win7 x64批处理命令语法错误

时间:2014-04-30 16:50:17

标签: batch-file windows-7

考虑遵循简单的脚本

for /f "delims=" %%a in ('dir') do echo %%a

另存为a.bat,然后运行。

它在我的家用电脑(win7 x64)上运行完美,在当前目录下打印文件, 但在我的办公室机器上获得“命令的语法不正确”(也是win7 x64)。

不知道为什么会发生这种情况,但是我觉得无法安装某些软件非常烦人 因为这个。

已经验证“以管理员身份运行”无效。

我的办公室机器出了什么问题,这会损坏批处理命令解析..

2 个答案:

答案 0 :(得分:0)

您是否真的在批处理文件或其他命令中使用命令dir,由于路径中的空格或双引号中的参数,该命令本身用双引号括起来?

如果应在循环内处理命令的输出,并且必须在双引号或至少一个参数中指定命令本身,则需要使用后引号的以下语法:

for /f "usebackq delims=" %%a in (`"command to run" "command parameter"`) do echo %%a

一个例子:

for /f "usebackq delims=" %%a in (`dir "%CommonProgramFiles%"`) do echo %%a

%CommonProgramFiles%引用环境变量 CommonProgramFiles 的值,这是一个通常包含空格的目录路径。因此,有必要将命令dir的参数括在双引号中,这需要在开始后和结束圆括号之前使用usebackq和后引号。

此外,我建议查看环境变量 PATH 的值。有些应用程序在安装期间将其程序文件目录添加到 PATH ,但不是通过将目录附加到目录列表的末尾,而是通过在开头插入它们。这当然是这些应用程序的安装程序的不良行为。

如果您在批处理文件中调用不在cmd.exe中的标准Windows命令,而是在Windows系统目录中调用,该目录通常是 PATH 中的第一个目录,例如命令find,并且已安装的应用程序在应用程序的程序文件目录中也有一个同名的可执行文件,由于运行了错误的命令,批处理文件可能无法在此计算机上运行。

在批处理文件find中使用而不仅仅是%SystemRoot%\system32\find.exe更安全,以避免因错误的一端修改PATH列表的应用程序的错误编写安装程序脚本而导致的问题。

答案 1 :(得分:0)

最后让它发挥作用。

问题来自环境变量%COMSPEC%。

不知道为什么它从“C:\ windows \ systems32 \ cmd.exe”更改为 “C:/windoes/systems32/cmd.exe”,正斜杠搞砸了。

不知道为什么这很重要,但似乎在Windows下反斜杠更安全: - )