7

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

通常是这样的:

for /f %%a IN ('tasklist') DO echo %%a

应该执行命令“Tasklist”并通过 echo 输出其结果。但我总是得到“找不到命令”。

我试图在 forloop 之外执行命令并且它有效。我还尝试在 for 中执行许多外部命令,但每个命令都说“找不到命令”。

我也试过这篇文章的例子:

批处理:使用管道在 for 循环中执行带引号的命令以查找

我确定

  • 命令存在
  • 我已阅读并执行它的权利
  • 我的用户在管理员组中
  • 我使用“以管理员身份运行”运行命令

但是在这台电脑上什么都没有。相同的命令可以在另一台运行 Windows 7 Ultimate 的 PC 上运行。

那么有没有人在没有找到所有命令的电脑上的想法可能是错误的?

这是我使用命令“ls”尝试时控制台输出的示例。ls.exe 是来自 gun4win 项目的可执行文件,它位于运行批处理文件的同一文件夹中。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

我更改了 ComSpecErweiterte Systemeigenschaften->Erweitert->Umgebungsvariaben->Systemvariablen" to "C:\Windows\system32\cmd.exe并解决了问题。

感谢@foxidrive 和@jeb

4

1 回答 1

5

如果您使用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 奇怪的行为

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

对于德国系统:
Erweiterte Systemeigenschaften->Erweitert->Umgebungsvariaben->Systemvariablen

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

FOR /F出现异常行为的第二个可能原因
如果可以在注册表中启用自动运行功能...\Command Processor\AutoRun,请参阅更多详细信息cmd /?
每次启动新的 cmd.exe 实例时,自动运行功能都可以启动一个批处理文件。
这对 ex 很有用。在打开新的 cmd 窗口时显示一些数据或始终更改为选定的目录。
但是这个批处理也会在里面执行FOR /F,通常会导致意想不到的结果。
管道也启动新的 cmd 实例,但禁止自动运行脚本

于 2016-03-09T11:07:17.633 回答