2015-10-14 102 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