首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >win7 x64批处理命令语法错误

win7 x64批处理命令语法错误
EN

Stack Overflow用户
提问于 2014-04-30 16:50:17
回答 2查看 804关注 0票数 0

考虑下面的简单脚本

代码语言:javascript
运行
复制
for /f "delims=" %%a in ('dir') do echo %%a

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

它在我的家用pc (win7 x64)上工作得很好,在当前目录下打印文件,但是在我的办公机器(也是win7 x64)上获得“命令的语法不正确”。

不知道为什么会发生这种情况,但这是很烦人的,我不能安装一些软件,因为这一点。

已经证实“以管理员身份运行”无助于此。

我是不是对我的办公室机器做了什么错事,破坏了批处理命令解析。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-05 02:25:15

终于起作用了。

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

不知道为什么从"C:\windows\systems32\cmd.exe“改为"C:/windoes/systems32/cmd.exe",正斜杠把事情搞砸了。

不知道这有什么关系,但似乎反斜杠在windows下更安全:-)

票数 0
EN

Stack Overflow用户

发布于 2014-05-03 15:36:36

您真的在批处理文件或其他命令中使用命令dir吗?因为路径中有空格或双引号中有参数,命令本身包含在双引号中?

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

代码语言:javascript
运行
复制
for /f "usebackq delims=" %%a in (`"command to run" "command parameter"`) do echo %%a

举个例子:

代码语言:javascript
运行
复制
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列表的应用程序编写错误的安装程序脚本所造成的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23393806

复制
相关文章

相似问题

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