1

次のコマンドは、CMD ウィンドウで正常に機能します。「NOTE」という単語を含み、「NOTES」を含まないディレクトリを一覧表示します。

dir c:\myfiles\mydirectories /s /b /ad |find "NOTE" | find "NOTES" /v

コマンドをバッチ ファイルに入れると、CMD が文句を言いinvalid switch -vます。

dir c:\myfiles\mydirectories /s /b /ad ^|find "NOTE" ^|find "NOTES" /v

私は何を間違えましたか?ありがとう。

これは Windows 7 上にあります。

4

2 に答える 2

4

findstr必要なパイプは 1 つだけです。

dir c:\myfiles\mydirectories /s /b /ad|findstr "\<NOTE\>"

または for ループを使用:

for /f "delims=" %%a in ('dir "c:\myfiles\mydirectories" /s /b /ad^|findstr "\<NOTE\>"') do echo %%~a

\<は単語の開始を表す
\>正規表現です は単語の末尾を表す正規表現です
詳細については、を参照してくださいhelp findstr

于 2013-08-10T20:02:33.863 に答える
4

あなたは:

  1. これをコマンドとしてバッチファイルに入れるときにパイプをエスケープしますか?
    もしそうなら、パイプから逃げないでください。

    dir c:\myfiles\mydirectories /s /b /ad |find "NOTE" |find "NOTES" /v
    
  2. サブシェル内で検索を呼び出すことはできますか?
    その場合は、パイプでエスケープ文字を保持します。私は次のようなことを意味します:

    for /f "delims=" %%a in ('dir c:\myfiles\mydirectories /s /b /ad ^|find "NOTE" ^|find "NOTES" /v') do echo Something
    
  3. コマンドをサブシェルで呼び出されるバッチ ファイルに保存しますか?
    その場合は、エスケープ文字を破棄します。つまり:

    for /f "delims=" %%a in ('call <path to batch file containing your command>') do echo Something
    
  4. 上記のいずれにも当てはまらない場合、この行がより大きなバッチ ファイルの一部であるときにエラーが表示されますか? もしそうなら、それを完全に共有してもらえますか?

于 2013-08-10T17:58:09.487 に答える