Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
File 如何比较批处理文件中的两个文件?_File_Comparison_Batch File_If Statement - Fatal编程技术网

File 如何比较批处理文件中的两个文件?

File 如何比较批处理文件中的两个文件?,file,comparison,batch-file,if-statement,File,Comparison,Batch File,If Statement,如何比较批处理文件中的两个文件,并根据它们是否匹配执行操作?我试过这样的方法: if file1.txt NEQ file2.txt goto label 但它比较的是实际字符串file1.txt,而不是文件。我已经读过COMP命令,但是如果我把它放在if语句中,它似乎不起作用。有人知道怎么做吗?很抱歉,我很少使用批处理文件,对它们也没有什么经验 提前感谢。看起来COMP程序实际上相当容易使用。请参阅雅虎答案 请注意,运行comp/?将打印程序的帮助文本,就像指定/?任何本机Windows命令

如何比较批处理文件中的两个文件,并根据它们是否匹配执行操作?我试过这样的方法:

if file1.txt NEQ file2.txt goto label
但它比较的是实际字符串file1.txt,而不是文件。我已经读过COMP命令,但是如果我把它放在if语句中,它似乎不起作用。有人知道怎么做吗?很抱歉,我很少使用批处理文件,对它们也没有什么经验


提前感谢。

看起来COMP程序实际上相当容易使用。请参阅雅虎答案

请注意,运行comp/?将打印程序的帮助文本,就像指定/?任何本机Windows命令行程序的参数。这将输出您在上面链接的问题的答案中看到的相同文本

雅虎答案的内容:

C:\>comp /? 
Compares the contents of two files or sets of files. 

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

data1 Specifies location and name(s) of first file(s) to compare. 
data2 Specifies location and name(s) of second files to compare. 
/D Displays differences in decimal format. 
/A Displays differences in ASCII characters. 
/L Displays line numbers for differences. 
/N=number Compares only the first specified number of lines in each file. 
/C Disregards case of ASCII letters when comparing files. 
/OFF[LINE] Do not skip files with offline attribute set. 

To compare sets of files, use wildcards in data1 and data2 parameters.

我相信您可以使用FC命令,然后检查errorlevel。下面是一些代码:

@echo off
:main
fc c:\filename r:\filemame > nul
if errorlevel 1 goto error

:next
echo insert next CD
pause
goto main

:error
echo failed check

中提取,我使用以下示例基于文件差异构建报告:

set %Batch_Work_Space_Dir%=folder for your batch file and temp resource files
set file_1=name of file
set file_2=name of file

fc %file_1% %file_1%t > %Batch_Work_Space_Dir%\Are_They_Different.txt

powershell -command "(Get-Content %Batch_Work_Space_Dir%\Are_They_Different.txt) | select -skip 1 | Set-Content %Batch_Work_Space_Dir%\Are_They_Different.txt"
set /p Diff_Found=<%Batch_Work_Space_Dir%\Are_They_Different.txt
if %Diff_Found:~0,17%" == "FC: no difference" (
  execute commands
 )

关注这个答案的人注意到comp有一个问题:在每次比较之后,它会以交互方式询问用户是否想要比较更多的文件。并且没有关闭该查询的开关,所以最好的选择是回显N | comp file1 file2。否则,comp会更快,因为它首先比较大小,在显示10个差异后停止比较,并且可以使用掩码比较文件组。另一方面,FC会比较完整文件,尽管大小不同,但会显示所有差异,并尝试重新同步不同偏移量上的相似性,因为unix diff.@LogicDaemon有一个停止提示更多文件的开关/M不提示比较更多文件。@tiboo它只出现在某些最新的Windows 10版本中,我想至少在2019年。我还建议检查errorlevel 2,这是出了问题的迹象,其中一个文件无法打开,磁盘错误,等等。你能澄清一下吗?errorlevel 0表示相同,errorlevel 1表示不同吗?反之亦然?@CraigMcQueen取自:-1:无效语法,例如仅传递了一个文件;0:文件完全相同。;1:文件不一样。;2:至少找不到一个文件。