Windows 将文件与CMD进行比较

Windows 将文件与CMD进行比较,windows,cmd,compare,batch-processing,Windows,Cmd,Compare,Batch Processing,我想比较2个文件(比较大小)和一个CMD批处理文件。如果文件不相等,我想启动一个复制操作,不是从命令行而是在批处理文件中 我想取消“比较更多文件”这一问题 它不是Comp命令前面的Echo N吗? 此外,我并不完全相信我的“>Nul”陈述 我试过: @echo off :main Echo n comp g:\test.accdb g:\test21.accdb >nul if errorlevel 1 goto different size :next echo Files are s

我想比较2个文件(比较大小)和一个CMD批处理文件。如果文件不相等,我想启动一个复制操作,不是从命令行而是在批处理文件中

我想取消“比较更多文件”这一问题 它不是Comp命令前面的Echo N吗? 此外,我并不完全相信我的“>Nul”陈述

我试过:

@echo off
:main
Echo n comp  g:\test.accdb g:\test21.accdb >nul
if errorlevel 1 goto different size
:next
echo Files are same size
pause
exit

:different size
copy g:\test.accdb g:\test21.accdb
pause
EXIT
错误级别

FC将设置错误级别,如下所示:

-1 Invalid syntax (e.g. only one file passed)
0 The files are identical.
1 The files are different.
2 Cannot find at least one of the files.
For an invalid switch (with two passed files) an error message is 
printed but the errorlevel is not changed.
@echo off
:main
FC g:\test.accdb g:\test21.accdb >nul && echo Files are same size || goto different size
pause
exit

:different size
copy g:\test.accdb g:\test21.accdb
pause
EXIT

进一步阅读

从技术上讲,@Paul的答案中提供的示例的性能与预期相符,但是如果您打算使用比Echo命令更复杂的命令,则需要了解发生了什么,然后才能将其应用于您自己的情况。(我也会在对他的回答的评论中提到这一点,但我没有足够的声望。)

给定以下命令行:

Command1 && Command2 || Command3
如果Command1失败,则将执行Command3

如果Command1成功,则将执行Command2但是…如果Command2失败,那么Command3也将被执行

下面演示了这一点,我将三个FIND命令链接在一起,用于搜索包含大写字母关键字的文件,并相应地更改了正在搜索的字符串的大小写。注意,最后一个示例执行所有三个命令

C:\Temp>find "select" test.txt && find "FROM" test.txt || find "WHERE" test.txt

---------- TEST.TXT

---------- TEST.TXT
WHERE            (

C:\Temp>find "SELECT" test.txt && find "FROM" test.txt || find "WHERE" test.txt

---------- TEST.TXT
SELECT           dbo.SalProductClass.ProductClass               ,

---------- TEST.TXT
FROM             dbo.SalProductClass

C:\Temp>find "SELECT" test.txt && find "from" test.txt || find "WHERE" test.txt

---------- TEST.TXT
SELECT           dbo.SalProductClass.ProductClass               ,

---------- TEST.TXT

---------- TEST.TXT
WHERE            (

C:\Temp>
也就是说,由于原始海报确实希望将Echo命令作为Command2,因此他的批处理文件可以重写如下:

-1 Invalid syntax (e.g. only one file passed)
0 The files are identical.
1 The files are different.
2 Cannot find at least one of the files.
For an invalid switch (with two passed files) an error message is 
printed but the errorlevel is not changed.
@echo off
:main
FC g:\test.accdb g:\test21.accdb >nul && echo Files are same size || goto different size
pause
exit

:different size
copy g:\test.accdb g:\test21.accdb
pause
EXIT

命令comp具有/M选项以避免要求更多比较:

COMP [data1] [data2] [/D] [/A] [/L] [/N=number] [/C] [/OFF[LINE]] [/M]

使用管道符号将
echo
的输出提供给
comp
echo n | comp…
作为替代,您可以使用
fc
,它不要求进一步比较文件。
echo n | comp g:\test.accdb g:\test21.accdb>nul 2>&1
其中
>nul 2>&1
将抑制所有
comp
输出(请注意,比较更多文件?问题在
STDERR
中)。此外,
echo n|
将回答此问题。。。