2015-10-14 116 views
2

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

我想压制这个问题“比较更多的文件吗?” 它不是Comp-command前面的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 
+0

使用管道符号给予的'echo'输出到'comp':'echo n | comp ...' – Stephan

+0

作为替代,你可以使用'fc',它不要求进一步的文件进行比较。 – Stephan

+0

'echo n | comp':test.accdb g:\ test21.accdb> nul 2>&1'其中'> nul 2>&1'会禁止所有的'comp'输出(注意_Compare more files?_问题在'STDERR'中) 。而且,'echo n |'会减少它... – JosefZ

回答

4
FC File1.txt File2.txt >NUL && Echo Same || Echo Different or error 

Errorlevels

FC将如下设置的ErrorLevel:

-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. 

Further reading http://ss64.com/nt/fc.html

0

技术上,@Paul答案中提供的示例按预期执行,但是如果您打算使用比Echo命令更复杂的任何操作,则需要在将其应用于自己的情况之前了解所发生的情况。 (我也有自己的答案的评论中提到这一点,但我没有足够的声望值。)

鉴于命令行:

Command1 && Command2 || Command3 

如果COMMAND1失败,那么,指令代码会被执行。

如果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命令的命令2他的批处理文件可以被改写为:

@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