2012-03-01 18 views
2

に保存します。タイトルと同じように、FINDコマンドの出力を変数に保存しようとしています。FINDコマンドの出力を変数

DIR /b /s "C:\" | FIND "someexe.exe" 

が正常に動作するよう、特定の.exeファイルを、見つけるために、その後私は同じスクリプトで、後で使用するためにFINDの結果を保存したい:具体的には、私が使用しています。

私は、様々な異なる微調整しようとしました:

for /f "usebackq" %%i in (`DIR /b /s "C:\" | FIND "someexe.exe"`) do SET foobar=%%i 

をしかし、私は、コマンド・ウィンドウはすぐにいくつかのエラーに恐らく(閉じスクリプトを実行しようとすると、私は次の行にPAUSEコマンドを入れてみました無駄に)。

は、私はそれが私が間違ってやっているいくつかの愚かなマイナーなことだと仮定誰かがそれが何であるか私を見ることができれば、私はそれを感謝します。さらに参考にするために、 "someexe.exe"のコピーがいくつあるか気にしません。そのうちの1つのパスだけが必要です。

答えて

4

あなたはこのエラーを取得する必要があります| was unexpected at this time.。あなたの直接の問題は、引用符で囲まれていない特殊文字(|など)は、^を使用してエスケープする必要があります(FOR)。

for /f "usebackq" %%i in (`DIR /b /s "C:\" ^| FIND "someexe.exe"`) do SET foobar=%%i 

デスクトップまたはWindowsエクスプローラからダブルクリックしてバッチファイルを実行しているようです。これはうまくいくが、バッチ終了後すぐにウィンドウが閉じられる。あなたの場合、構文エラーのためにPAUSEに達する前に終了します。

私はいつもコマンドウィンドウからの私のバッチファイルを実行します。あなたはrun cmd.exeしたい[スタート]メニューから。コマンドコンソールが開きます。次に、バッチファイルが存在するディレクトリにCDを置き、名前を入力してバッチファイルを実行します(拡張子は不要です)。スクリプトが終了した後もウィンドウは開いたままです。 SETを使って変数を調べたり、別のスクリプトを実行したりすることができます。

あなたのケースでFINDを使用する必要はありません - DIRは、直接ファイルを見つけることができます。また、ファイルのパスに空白が含まれている場合は、トークンに解析されます。完全なパスを取得するには、 "DELIMS ="または "TOKENS = *"を設定する必要があります。

私は、なぜ人々がコマンドを実行しているときにUSEBACKQを使用するのか理解できません。私はファイルでFOR/Fを使用しようとしていてスペースや特殊文字のためにファイルを引用符で囲む必要がある場合にのみ便利です。

また、アクセスできないディレクトリのためにエラーを起こすことがあります。 stderrをnulにリダイレクトすると、出力がクリーンアップされます。ここでもまた>をエスケープする必要があります。

for /f "delims=" %%F in ('dir /b /s "c:\someexe.exe" 2^>nul') do set foobar=%%F 
+0

ありがとうございます!私はあなたがDIRをそのように使うことができるのかどうか分かりませんでした。 – mintchkin

関連する問題