3

如何转义变量中的引号以与另一个变量进行比较。

示例:脚本输出““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"

但没有运气。

有任何想法吗?

4

3 回答 3

6

您的代码存在三个问题:

问题 1:

脚本行,set ouputTest1 = "The output of "test.exe" is OK"不创建名为outputTest1;的变量 相反,它创建了一个名为outputTest1<space>. 这就是为什么%outputTest1%总是空的原因。

问题2:

在“set”语句中,等号之后的所有内容都被赋值——包括空格和外引号。在您的情况下,变量的内容最终是<space>"The output of "test.exe" is OK".

问题 3:

最后,您需要更改 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
于 2012-09-28T19:03:30.320 回答
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
于 2012-09-28T16:32:23.750 回答
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 )
于 2012-09-28T18:24:31.197 回答