从https://stackoverflow.com/questions/7005951/batch-file-find-if-substring-is-in-string-not-in-a-file,我知道如何检查 PATH 变量是否具有特定子字符串(groovy 的路径)。但是,我的 PATH 变量中有空格,这会导致错误“Files\Amazon这时才出乎意料。“。
set str1=%PATH%
rem set str1=C:\lang\groovy-2.4.21\bin
rem set str1=foo
if not x%str1:groovy-2.4.21=%==x%str1% goto noNeedToAddGroovy
echo "Groovy is not in the path. Add groovy to the path"
SET "PATH=C:\lang\groovy-2.4.21\bin;%PATH%;
endlocal
在上面的代码块中,下面一行
if not x%str1:groovy-2.4.21=%==x%str1% goto noNeedToAddGroovy
给出错误“Files\Amazon这时“。
我怎样才能正确地转义 str1 变量中的空格?
答案1
您只需在两边添加引号即可。
if not x%str1:groovy-2.4.21=%==x%str1% goto noNeedToAddGroovy
变成
if not "x%str1:groovy-2.4.21=%"=="x%str1%" goto noNeedToAddGroovy
那么为什么这会起作用呢?
IF 语句将检查 == 左边的所有内容并将其与 == 右边的所有内容进行比较。
因此,写入BLA%1BLA==BLAtestBLA
将测试 %1 是否与测试相同,因为 BLA 部分存在于 == 的两边。
通过使用引号,它可以测试“xxx”==“yyy”,这与 xxx==yyy 相同。
但在脚本中,所有用空格分隔的元素都被视为参数。如果你用引号括起来,引号内的元素都被视为一个参数。
所以是的,它确实与两边的引号进行了比较,但考虑到比较并不重要,它是有效的,并且引号基本上是这样,因此您不需要转义字符串并使事情变得不必要地复杂。