如何在变量中转义引号以与另一个变量进行比较。
示例:脚本输出“test.exe”的输出“正常”(没有周围的引号)
在批处理脚本中,我将输出保存在我的批处理脚本中的变量中,然后想要与保存的变量进行比较。
set ouputTest1 = "The output of "test.exe" is OK"
test.exe -p 75 > temp.txt
set /p TESTOUTPUT=< temp.txt
if %TESTOUTPUT% == %ouputTest1%
问题在于outputTest1变量和字符串中的引号。我尝试用这样的双引号:
set ouputTest1 = "The output of ""test.exe"" is OK"
但没有运气。
有什么想法吗?
答案 0 :(得分:5)
您的代码有三个问题:
脚本行set ouputTest1 = "The output of "test.exe" is OK"
不会创建名为outputTest1
的变量;相反,它会创建一个名为outputTest1<space>
的变量。这就是%outputTest1%
始终为空的原因。
在“set”语句中,在等号被分配后所有 - 包括空格和外引号。在您的情况下,变量的内容最终为<space>"The output of "test.exe" is OK"
。
最后,您需要更改IF比较。正确的方法如下:
set "ouputTest1=The output of "test.exe" is OK"
test.exe -p 75 > temp.txt
set /p TESTOUTPUT=< temp.txt
if "%TESTOUTPUT%" == "%ouputTest1%" echo Equal
答案 1 :(得分:4)
使用延迟扩展似乎可以绕过此问题,无论是否包含引号(c
和d
均未加引号):
@echo off
setlocal disabledelayedexpansion
set a="The output of "test.exe" is OK"
set b="The output of "test.exe" is OK"
set "c=The output of "test.exe" is NOT OK"
set "d=The output of "test.exe" is NOT OK"
setlocal enabledelayedexpansion
if !a!==!b! echo a and b match!
if !c!==!d! echo c and d match!
endlocal
答案 2 :(得分:1)
wmz提出的答案似乎是一个可靠的答案,但我认为我仍然可以提供这种替代方案,以供考虑。
为了进行比较,您可以将比较字符串写入另一个文件并比较文件,而不是将输出(即temp.txt)读入变量。如下所示:
echo The output of "test.exe" is OK>temp-expected.txt
fc temp.txt temp.expected.txt >NUL
if "%ERRORLEVEL%"=="0" ( echo YAY ) else ( echo BOO )