我正在尝试编写一个打印变量的脚本。这是代码:
@echo off
set workspace=%CD%
set artifact_ids=online_deploy
for %%x in (%artifact_ids%) do (
echo %workspace%
)
当我从 C:\ Program Files(x86) 中的任何文件夹运行脚本时出现此错误:\此时出现意外情况。
我猜测路径名有问题,因为我可以从除程序文件(x86)之外的任何地方成功运行它。
任何帮助将不胜感激。
答案 0 :(得分:2)
使用“Program Files(x86)”目录的短名称。实际上,它适用于所有目录。可能有其他目录包含空格和特殊字符。
set "workspace=%CD%"
FOR /F "tokens=*" %%p IN ("%workspace%") DO (SET "workspace=%%~sp")
答案 1 :(得分:2)
问题是,变量过早扩展"因此来自)
的{{1}}会意外关闭Program Files (x86)
循环。
至少有三种方法可以安全地处理这个问题(除了使用短名称):
1)将字符串括在引号中:for
,echo "%workspace%"
2)escaping结束的paranthese
3)Delayed expansion
以下示例显示了所有三种方法:
set "var=%workspace%"
哪种方法最好,取决于您的实际代码。所有这些都有利弊。
答案 2 :(得分:0)
可悲的是,您发布的代码并未证明问题。你显然用echo
代替你正在使用的实际命令。值得称赞,但在这种情况下,会产生误导。
问题是)
被解释为do
的右括号。如何解决这个问题取决于您的实际代码。