此时出人意料

时间:2017-12-11 17:44:56

标签: windows batch-file cmd

我正在尝试编写一个打印变量的脚本。这是代码:

@echo off

set workspace=%CD%
set artifact_ids=online_deploy

for %%x in (%artifact_ids%) do (
    echo %workspace%
)

当我从 C:\ Program Files(x86) 中的任何文件夹运行脚本时出现此错误:\此时出现意外情况。

我猜测路径名有问题,因为我可以从除程序文件(x86)之外的任何地方成功运行它。

任何帮助将不胜感激。

3 个答案:

答案 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)将字符串括在引号中:forecho "%workspace%"
2)escaping结束的paranthese
3)Delayed expansion

以下示例显示了所有三种方法:

set "var=%workspace%"

哪种方法最好,取决于您的实际代码。所有这些都有利弊。

答案 2 :(得分:0)

可悲的是,您发布的代码并未证明问题。你显然用echo代替你正在使用的实际命令。值得称赞,但在这种情况下,会产生误导。

问题是)被解释为do的右括号。如何解决这个问题取决于您的实际代码。