7

Windows 7 Ultimate の FOR コマンド内で他のコマンドを実行すると問題が発生します。for コマンドはバッチ ファイルの一部であり、別のコマンドの出力を解析する必要があります。

通常これ:

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

コマンド「Tasklist」を実行し、その結果をエコー経由で出力する必要があります。しかし、私はいつも「コマンドが見つかりません」と出ます。

forloopの外でコマンドを実行しようとしましたが、うまくいきました。また、for内で多くの外部コマンドを実行しようとしましたが、すべてのコマンドは「コマンドが見つかりません」と言いました。

この投稿の例も試しました:

バッチ: for ループで引用符を付けてコマンドを実行し、パイピングして検索する

きっと

  • コマンドが存在すること
  • 私はそれを読んで実行する権利を持っていること
  • 私のユーザーが管理者グループに属していること
  • 「管理者として実行」でコマンドを実行すること

しかし、このPCでは何も機能していません。Windows 7 Ultimate を実行している別の PC でも同じコマンドが機能します。

それで、すべてのコマンドが見つからないPCで間違っている可能性があるという考えはありますか?

コマンド「ls」で試したときのコンソール出力の例を次に示します。ls.exe は gun4win プロジェクトの実行可能ファイルで、バッチ ファイルが実行されているのと同じフォルダーにあります。ウィンドウはドイツ語なので、エラー出力もドイツ語です。

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

ComSpec を変更しErweiterte 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
レジストリで AutoRun 機能を有効にできる場合は、奇妙な動作の 2 つ目の原因が考え...\Command Processor\AutoRunられます。詳細については、 を参照してくださいcmd /?
AutoRun 機能は、新しい cmd.exe インスタンスが開始されるたびにバッチ ファイルを開始できます。
これは例に役立ちます。新しいコマンドウィンドウを開くか、常に選択したディレクトリに変更する際にいくつかのデータを表示します。
ただし、このバッチは の内部でも実行され、FOR /F通常は予期しない結果を引き起こします。
パイプも新しい cmd インスタンスを開始しますが、AutoRun スクリプトは抑制します

于 2016-03-09T11:07:17.633 に答える