比较来自两个文件的文本,如果它们不同则做一些事情
Compare text from two files and do something if they are diffrent
所以我需要比较两个文本文件,如果其中一个文件的内容不同,则告诉批处理文件 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
如果有差异,如果有 none.[=16= 则执行 echo You are up to date!
]
- 我应该 运行 另一个命令来执行此操作还是有什么东西可以让我用 fc 执行此操作?
大多数命令 return 完成后出现错误代码。按照惯例,零等于成功,non-zero 等于失败(这是一般规则 - 也有例外)。所以这个答案的大部分都可以应用于任何命令,只要你知道如何解释 returned 错误代码。
FC 命令return如果文件匹配则为 0,如果至少有一处不同则为 1。您不需要查看命令的输出(差异),因此您可以将 stdout 重定向到 nul。
一个选项是使用 IF ERRORLEVEL N,如果 returned 错误代码 >= N,它的计算结果为真。
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
请注意 %cd%\file
和 file
是等价的 - %cd%
不是必需的。
另一种选择是使用动态 %ERRORLEVEL% "variable".
检查特定值
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
但我几乎从不使用上述任何一种语法。相反,我使用条件命令连接运算符 &&
和 ||
。 &&
之后的命令仅在前一个命令 return 为零时执行,而 ||
之后的命令在命令 return 为 non-zero 时执行。请注意,&&
之后的命令可能会失败,这可能会导致 ||
命令触发,即使原始命令成功也是如此。因此,最好以保证成功的命令结束 &&
命令。一个不错的选择是 (call )
,它除了 return 0(成功)之外什么都不做。
someCommand && (
REM Success commands go here
REM Make sure the last commmand in this block returns 0
(call )
) || (
REM Error commands go here
)
如果 FC "fails" 你只想转到 GOTO(发现不同),所以你只需要 ||
.
fc ActiveVer.txt CurrentVer.txt >nul || goto outOfDate
echo You are Up-To-Date
exit /b
:outOfDate
echo You are Out-Of-Date
所以我需要比较两个文本文件,如果其中一个文件的内容不同,则告诉批处理文件 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
如果有差异,如果有 none.[=16= 则执行 echo You are up to date!
]
- 我应该 运行 另一个命令来执行此操作还是有什么东西可以让我用 fc 执行此操作?
大多数命令 return 完成后出现错误代码。按照惯例,零等于成功,non-zero 等于失败(这是一般规则 - 也有例外)。所以这个答案的大部分都可以应用于任何命令,只要你知道如何解释 returned 错误代码。
FC 命令return如果文件匹配则为 0,如果至少有一处不同则为 1。您不需要查看命令的输出(差异),因此您可以将 stdout 重定向到 nul。
一个选项是使用 IF ERRORLEVEL N,如果 returned 错误代码 >= N,它的计算结果为真。
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
请注意 %cd%\file
和 file
是等价的 - %cd%
不是必需的。
另一种选择是使用动态 %ERRORLEVEL% "variable".
检查特定值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
但我几乎从不使用上述任何一种语法。相反,我使用条件命令连接运算符 &&
和 ||
。 &&
之后的命令仅在前一个命令 return 为零时执行,而 ||
之后的命令在命令 return 为 non-zero 时执行。请注意,&&
之后的命令可能会失败,这可能会导致 ||
命令触发,即使原始命令成功也是如此。因此,最好以保证成功的命令结束 &&
命令。一个不错的选择是 (call )
,它除了 return 0(成功)之外什么都不做。
someCommand && (
REM Success commands go here
REM Make sure the last commmand in this block returns 0
(call )
) || (
REM Error commands go here
)
如果 FC "fails" 你只想转到 GOTO(发现不同),所以你只需要 ||
.
fc ActiveVer.txt CurrentVer.txt >nul || goto outOfDate
echo You are Up-To-Date
exit /b
:outOfDate
echo You are Out-Of-Date