gpt4 book ai didi

windows - 批处理脚本(bat 或 cmd)- 符号前的额外空格(或自动转义符号)

转载 作者:可可西里 更新时间:2023-11-01 11:18:26 37 4
gpt4 key购买 nike

注意:我了解 ^ 符号可用于在批处理脚本中转义 & 符号。但是我需要转义自动,因为路径是在运行时构建的。下面的示例脚本只是为了说明问题,它不是实际的脚本。 请在脚本输出后阅读我的解释。

出于某种原因,批处理脚本中的命令在路径中使用与符号 (&) 时表现不佳。

假设您有一个 test.cmdtest.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 但没有用。

为什么会这样?好像是因为Batch脚本中使用了&来连接两个命令?如果是,我如何确保它被自动转义(因为 PATH 值是在运行时自动构建的,所以我无法使用 ^ - 路径在批处理脚本中硬编码)。

目前我发现的唯一解决方法(如上所示)是用双引号 (") 将整个字符串括起来。对于 PATH 变量的现有值,我想我需要在循环中解析该值并向其中的每个文件夹路径添加引号。是否有任何其他(可能更简单)的解决方法或永久解决方案?

最佳答案

启用延迟扩展并试试这个:

Set "test1=c:\file&folder\"
Set "test2=!test1!currentPath"
echo !test2!

对于像 PATH 这样在现有值中包含 & 的环境变量:

set PATH=C:\Another\Folder;!PATH!

关于windows - 批处理脚本(bat 或 cmd)- 符号前的额外空格(或自动转义符号),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25829908/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com