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

我确定

但这台电脑没有任何工作。 相同的命令在另一台 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 实例,但会抑制自动运行脚本