考虑下面的简单脚本
for /f "delims=" %%a in ('dir') do echo %%a
保存为a.bat,然后运行。
它在我的家用pc (win7 x64)上工作得很好,在当前目录下打印文件,但是在我的办公机器(也是win7 x64)上获得“命令的语法不正确”。
不知道为什么会发生这种情况,但这是很烦人的,我不能安装一些软件,因为这一点。
已经证实“以管理员身份运行”无助于此。
我是不是对我的办公室机器做了什么错事,破坏了批处理命令解析。
发布于 2014-05-05 02:25:15
终于起作用了。
问题来自于环境变量%COMSPEC%。
不知道为什么从"C:\windows\systems32\cmd.exe“改为"C:/windoes/systems32/cmd.exe",正斜杠把事情搞砸了。
不知道这有什么关系,但似乎反斜杠在windows下更安全:-)
发布于 2014-05-03 15:36:36
您真的在批处理文件或其他命令中使用命令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
和back引号。
此外,我建议查看环境变量路径的值。有些应用程序在安装过程中将它们的程序文件目录添加到PATH,但不是通过将该目录追加到目录列表的末尾,而是在开始时插入它们。这当然是那些应用程序的安装程序的坏行为。
如果您调用的批处理文件标准Windows命令不是位于cmd.exe中,而是在Windows目录(通常是PATH中的第一个目录)中调用,就像命令find
一样,并且安装的应用程序在应用程序的程序文件目录中也有一个同名的可执行文件,则由于运行错误的命令,批处理文件可能无法在此计算机上工作。
与其在批处理文件find
中使用%SystemRoot%\system32\find.exe
,不如在批处理文件中使用更安全的方法,以避免错误地修改PATH
列表的应用程序编写错误的安装程序脚本所造成的问题。
https://stackoverflow.com/questions/23393806
复制相似问题