注意:我理解^符号可以用来在批处理脚本中转义&符号。但是由于路径是在运行时构造的,所以我需要执行转义操作( automatically,)。下面的示例脚本只是显示问题,它是,而不是,实际的脚本。请在脚本输出后阅读我的解释。
由于某些原因,批处理脚本中的命令不能很好地使用路径中的符号符号(&)。
假设您有一个test.cmd或test.bat脚本,如下所示:
set TEST=A E
echo %TEST%
set TEST="A E"
echo %TEST%
set TEST=AE
echo %TEST%
set TEST="AE"
echo %TEST%
set TEST=A & E
echo %TEST%
set TEST="A & E"
echo %TEST%
set TEST=A&E
echo %TEST%
set TEST="A&E"
echo %TEST%这是输出:
C:\>set TEST=A E
C:\>echo A E
A E
C:\>set TEST="A E"
C:\>echo "A E"
"A E"
C:\>set TEST=AE
C:\>echo AE
AE
C:\>set TEST="AE"
C:\>echo "AE"
"AE"
C:\>set TEST=A & E
'E' is not recognized as an internal or external command,
operable program or batch file.
C:\>echo A
A
C:\>set TEST="A & E"
C:\>echo "A & E"
"A & E"
C:\>set TEST=A & E
'E' is not recognized as an internal or external command,
operable program or batch file.
C:\>echo A
A
C:\>set TEST="A&E"
C:\>echo "A&E"
"A&E"请注意,当字符串不是双引号时,脚本解析器如何在符号符号(&)之前添加两个额外的空格。在添加两个空格之前,它还会将A&E分解为A& E,从而导致A & E
在实际情况下, --当在文件夹名中添加包含符号符号的路径到PATH变量时,会引起问题。即使在PATH中引用为set PATH=C:\Another\Folder;%PATH%时,即使是现有的一组文件夹路径也会出现此问题。
它既发生在命令提示符中,也发生在PowerShell中。我试过enableDelayedExpansion,但没有用。
它为什么会这样表现?看起来是因为在批处理脚本中使用&来连接两个命令吗?如果是的话,我如何确保它是转义的automatically (因为PATH值是在运行时自动构造的,所以我不能使用^ -路径是而不是在批处理脚本中硬编码的)。
目前,我找到的唯一解决办法(如上面所示)是将整个字符串用双引号(")括起来。对于PATH变量的现有值,我想我需要解析循环中的值,并在其中的每个文件夹路径中添加引号。有没有其他(也许更容易)的解决办法或永久的解决方案?
发布于 2014-09-14 04:33:13
启用延迟扩展并尝试如下:
Set "test1=c:\file&folder\"
Set "test2=!test1!currentPath"
echo !test2!对于环境变量(如PATH ),在其现有值中包含&:
set PATH=C:\Another\Folder;!PATH!https://stackoverflow.com/questions/25829908
复制相似问题