比较来自两个文件的文本,如果它们不同则执行某些操作

时间:2015-12-30 03:35:31

标签: batch-file version-control diff difference

所以我需要比较两个文本文件,如果其中一个文件中的内容有差异,那么告诉批处理文件GOTO Diffrence我知道FC命令可以检查差异,但是我可以用它来制作它转到一个不同的地方

所以我跑了 fc %cd%\ActiveVer.txt %cd%\currentver.txt

ActiveVer.txt说: 0.5.6

和currentver.txt说: 0.5.7 fc告诉我区别。

但是,如果存在差异,我会尝试查看并运行GOTO out-of-date,如果没有则会echo You are up to date!

  • 我应该运行另一个命令来执行此操作还是允许我使用fc执行此操作?

1 个答案:

答案 0 :(得分:3)

大多数命令在完成时返回错误代码。按惯例,零等于成功,非零等同于失败(这是一般规则 - 有例外)。因此,只要您知道如何解释返回的错误代码,大多数答案都可以应用于任何命令。

如果文件匹配,则FC命令返回0,其中1表示至少有一个差异。您不需要查看命令的输出(差异),因此您可以将stdout重定向到nul。

一种选择是使用IF ERRORLEVEL N,如果返回的错误代码是> = N,则评估为true。

%cd%\file

请注意,file%cd%是等效的 - 不需要fc ActiveVer.txt CurrentVer.txt >nul if %errorlevel%==1 goto outOfDate echo you are Up-To-Date exit /b :outOfDate echo you are Out-Of-Date exit /b

另一种选择是使用动态%ERRORLEVEL%“变量”来检查特定值。

&&

但我几乎从不使用上述任何一种语法。相反,我使用条件命令连接运算符||&&||之后的命令仅在先前命令返回零时执行,而&&之后的命令如果命令返回非零则执行。请注意,||之后的命令可能会失败,这可能导致&&命令触发,即使原始命令成功也是如此。因此,最好使用保证成功的命令结束(call )命令。一个不错的选择是someCommand && ( REM Success commands go here REM Make sure the last commmand in this block returns 0 (call ) ) || ( REM Error commands go here ) ,除了返回0(成功)之外什么都不做。

||

如果FC“失败”(找到差异),你只想要GOTO,所以你只需要fc ActiveVer.txt CurrentVer.txt >nul || goto outOfDate echo You are Up-To-Date exit /b :outOfDate echo You are Out-Of-Date

{{1}}