Batch file Windows批处理:使用FOR/F--“执行命令”;“未找到命令”;

Batch file Windows批处理:使用FOR/F--“执行命令”;“未找到命令”;,batch-file,cmd,command-execution,Batch File,Cmd,Command Execution,在Windows 7 Ultimate上执行FOR命令中的其他命令时出现问题。 for命令是批处理文件的一部分,应该解析另一个命令的输出 通常情况下: for /f %%a IN ('tasklist') DO echo %%a 应执行命令“Tasklist”,并通过echo输出其结果。 但我总是得到“找不到命令” 我试着在forloop之外执行这个命令,它成功了。 我还尝试在for中执行许多外部命令,但每个命令都说“找不到命令” 我还尝试了这篇文章的例子: 我敢肯定 命令是否存在 我已经

在Windows 7 Ultimate上执行FOR命令中的其他命令时出现问题。 for命令是批处理文件的一部分,应该解析另一个命令的输出

通常情况下:

for /f %%a IN ('tasklist') DO echo %%a
应执行命令“Tasklist”,并通过echo输出其结果。 但我总是得到“找不到命令”

我试着在forloop之外执行这个命令,它成功了。 我还尝试在for中执行许多外部命令,但每个命令都说“找不到命令”

我还尝试了这篇文章的例子:

我敢肯定

  • 命令是否存在
  • 我已经阅读并执行了它的权利
  • 我的用户在管理员组中
  • 使用“以管理员身份运行”运行命令
但是在这台电脑里什么都不工作。 同样的命令也适用于另一台运行Windows7 ultimate的PC

那么,有没有人认为在没有找到所有命令的pc上可能会出错

下面是我使用命令“ls”尝试控制台输出的一个示例。 ls.exe是gun4win项目中的一个可执行文件,它位于运行批处理文件的同一文件夹中。 windows是德语的,因此错误输出也是德语的

C:\test>test\u 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”中的ComSpec更改为“C:\Windows\system32\cmd.exe
,问题就解决了


多亏了@foxidrive和@jeb

如果您对/F使用
并得到错误
“某物”未被识别为内部或外部命令、可操作程序或批处理文件
,对于每个程序,甚至是内部命令,最常见的原因是错误的ComSpec变量

您可以使用
set ComSpec
检查变量,它应该是
C:\Windows\System32\cmd.exe

更改命令行上的变量没有帮助,原因在中描述

如果变量包含不同的值,则应在下更正

对于德国系统:
Erweitert系统特征值schaften->Erweitert->Umgebungsvariaben->Systemvariablen

对于英语系统:
Win Key+Pause Key->Advanced System Settings->Environment Variables->System Variables

对于/F
行为存在第二种可能的奇怪原因

如果可以在注册表中启用自动运行功能,
…\Command Processor\AutoRun
,有关详细信息,请参阅
cmd/?

自动运行功能可以在每次启动新cmd.exe实例时启动批处理文件。
这对于显示打开新cmd窗口或始终更改为choosen目录时的某些数据非常有用。
但此批处理也将在FOR/F的
中执行,通常会导致意外结果。

管道也会启动新的cmd实例,但会抑制自动运行脚本

脚本是否使用名为
path
?…或
pathext
的变量?您可以尝试在目录
%SystemRoot%\System32`中执行脚本,该目录下的
tasklist`命令位于…@JosefZ
“command not found”似乎不是任何标准的Windows cmd错误消息。
如果错误消息被错误引用,则
comspec
变量也可能是fubar,如果命令在脚本中运行,但只在for命令中失败-因为comspec用于为for中的每个命令调用cmd.exe。如上所述,更改comspec将被缓存。在
Erweiterte Systemeigenschaften->Erweitert->Umgebungsvariaben->Systemvariablen