首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >批处理脚本(bat或cmd)

批处理脚本(bat或cmd)
EN

Stack Overflow用户
提问于 2014-09-14 03:51:20
回答 1查看 1.4K关注 0票数 1

注意:我理解^符号可以用来在批处理脚本中转义&符号。但是由于路径是在运行时构造的,所以我需要执行转义操作( automatically,)。下面的示例脚本只是显示问题,它是,而不是,实际的脚本。请在脚本输出后阅读我的解释。

由于某些原因,批处理脚本中的命令不能很好地使用路径中的符号符号(&)。

假设您有一个test.cmdtest.bat脚本,如下所示:

代码语言:javascript
复制
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%

这是输出:

代码语言:javascript
复制
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变量的现有值,我想我需要解析循环中的值,并在其中的每个文件夹路径中添加引号。有没有其他(也许更容易)的解决办法或永久的解决方案?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-14 04:33:13

启用延迟扩展并尝试如下:

代码语言:javascript
复制
Set "test1=c:\file&folder\"
Set "test2=!test1!currentPath"
echo !test2!

对于环境变量(如PATH ),在其现有值中包含&

代码语言:javascript
复制
set PATH=C:\Another\Folder;!PATH!
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25829908

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档