Windows 批处理:使用 FOR /F 执行命令 -- "command not found"
Windows Batch: Executing command with FOR /F -- "command not found"
我在 Windows 7 Ultimate 上的 FOR 命令中执行其他命令时遇到问题。
for 命令是批处理文件的一部分,应该解析另一个命令的输出。
通常是这样的:
for /f %%a IN ('tasklist') DO echo %%a
应该执行命令 "Tasklist" 并通过回显输出其结果。
但我总是得到 "command not found".
我尝试在 forloop 之外执行命令并且它有效。
我也尝试在 for 中执行很多外部命令,但每个命令都说 "command not found".
我也试过这个post的例子:
Batch: Execute command with quotes in for loop with piping to find
我确定
- 命令存在
- 我已阅读并执行它的权利
- 我的用户在管理员组中
- 我 运行 使用 "Run as Administrator"
命令
但这台电脑没有任何工作。
相同的命令在另一台 PC 上工作,它也是 运行ning windows 7 ultimate.
所以有没有人知道在没有找到所有命令的电脑上可能是错误的?
这是我尝试使用命令 "ls" 时控制台输出的示例。
ls.exe 是 gun4win 项目的可执行文件,它位于我的批处理文件 运行ning 所在的同一文件夹中。
windows 是德语,所以错误输出也是德语。
C:\test>test_for.bat
C:\test>rem --- test a command stand-alone ---
C:\test>ls
ls.exe test_for.bat
C:\test>rem --- test same command in a FOR-Loop ---
C:\test>for /F "delims=" %a in ('ls') do echo FOR-OUTPUT: %a
Der Befehl "ls" ist entweder falsch geschrieben oder konnte nicht gefunden
werden.
最终编辑:
问题是系统环境变量 ComSpec
.
的值错误
我在 Erweiterte Systemeigenschaften->Erweitert->Umgebungsvariaben->Systemvariablen" to "C:\Windows\system32\cmd.exe
中更改了 ComSpec,问题解决了。
感谢@foxidrive 和@jeb
如果您使用 FOR /F
并为每个程序(甚至是内部命令)得到错误 'something' is not recognized as an internal or external command, operable program or batch file
,最常见的原因是错误的 ComSpec 变量。
可以用set ComSpec
查看变量,应该是C:\Windows\System32\cmd.exe
.
在命令行更改变量无济于事,原因在DosTips: ComSpec strange behaviour
如果变量包含不同的值,您应该在
下更正
对于德语系统:
Erweiterte Systemeigenschaften->Erweitert->Umgebungsvariaben->Systemvariablen
对于英文系统:
Win Key+Pause Key->Advanced System Settings->Environment Variables->System Variables
存在第二个可能导致奇怪 FOR /F
行为的原因
如果可以在注册表中启用自动运行功能 ...\Command Processor\AutoRun
,有关详细信息,请参阅 cmd /?
。
每次启动新的 cmd.exe 实例时,自动运行功能可以启动一个批处理文件。
这对前任很有用。显示打开新 cmd 时的一些数据 window 或始终切换到所选目录。
但是这个批处理也会在 FOR /F
内执行,通常会导致意外结果。
管道也会启动新的 cmd 实例,但会抑制自动运行脚本
我在 Windows 7 Ultimate 上的 FOR 命令中执行其他命令时遇到问题。 for 命令是批处理文件的一部分,应该解析另一个命令的输出。
通常是这样的:
for /f %%a IN ('tasklist') DO echo %%a
应该执行命令 "Tasklist" 并通过回显输出其结果。 但我总是得到 "command not found".
我尝试在 forloop 之外执行命令并且它有效。 我也尝试在 for 中执行很多外部命令,但每个命令都说 "command not found".
我也试过这个post的例子:
Batch: Execute command with quotes in for loop with piping to find
我确定
- 命令存在
- 我已阅读并执行它的权利
- 我的用户在管理员组中
- 我 运行 使用 "Run as Administrator" 命令
但这台电脑没有任何工作。 相同的命令在另一台 PC 上工作,它也是 运行ning windows 7 ultimate.
所以有没有人知道在没有找到所有命令的电脑上可能是错误的?
这是我尝试使用命令 "ls" 时控制台输出的示例。 ls.exe 是 gun4win 项目的可执行文件,它位于我的批处理文件 运行ning 所在的同一文件夹中。 windows 是德语,所以错误输出也是德语。
C:\test>test_for.bat
C:\test>rem --- test a command stand-alone ---
C:\test>ls
ls.exe test_for.bat
C:\test>rem --- test same command in a FOR-Loop ---
C:\test>for /F "delims=" %a in ('ls') do echo FOR-OUTPUT: %a
Der Befehl "ls" ist entweder falsch geschrieben oder konnte nicht gefunden
werden.
最终编辑:
问题是系统环境变量 ComSpec
.
我在 Erweiterte Systemeigenschaften->Erweitert->Umgebungsvariaben->Systemvariablen" to "C:\Windows\system32\cmd.exe
中更改了 ComSpec,问题解决了。
感谢@foxidrive 和@jeb
如果您使用 FOR /F
并为每个程序(甚至是内部命令)得到错误 'something' is not recognized as an internal or external command, operable program or batch file
,最常见的原因是错误的 ComSpec 变量。
可以用set ComSpec
查看变量,应该是C:\Windows\System32\cmd.exe
.
在命令行更改变量无济于事,原因在DosTips: ComSpec strange behaviour
如果变量包含不同的值,您应该在
下更正对于德语系统:
Erweiterte Systemeigenschaften->Erweitert->Umgebungsvariaben->Systemvariablen
对于英文系统:
Win Key+Pause Key->Advanced System Settings->Environment Variables->System Variables
存在第二个可能导致奇怪 FOR /F
行为的原因
如果可以在注册表中启用自动运行功能 ...\Command Processor\AutoRun
,有关详细信息,请参阅 cmd /?
。
每次启动新的 cmd.exe 实例时,自动运行功能可以启动一个批处理文件。
这对前任很有用。显示打开新 cmd 时的一些数据 window 或始终切换到所选目录。
但是这个批处理也会在 FOR /F
内执行,通常会导致意外结果。
管道也会启动新的 cmd 实例,但会抑制自动运行脚本