所以我需要比较两个文本文件,如果其中一个文件中的内容有差异,那么告诉批处理文件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!
。
答案 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}}