2012-02-09 4 views
3

私はテキストファイルにリストするものを除いて、ほとんどのディレクトリで別のディレクトリのコードを実行しようとしています。たとえば、すべてのディレクトリでC:\に直接コードを実行したいが、C:\ avoidme \とは言わない場合は、C:\ avoidmeをexcluions.txtの行に追加します。しかし、以下のコードは動作していないようです。どのようにこれを行うことができるかに関する任意のアイデア?バッチファイルを持つファイルにリストされているディレクトリ以外のほとんどのディレクトリでコードを実行するにはどうすればよいですか?

for /f %%d in ('dir /b C:\') do (
find /c "C:\%%d" exclusions.txt 
if %errorlevel% equ 1 (
    Do code here 

) 

答えて

2
 
@echo off 
for /D %%d in (*) do (
    %WINDIR%\system32\find "%%d" exclude.list >nul 
    if errorlevel 1 (
     echo good %%d 
    ) else (
     echo bad %%d 
    ) 
) 
1

あなたのコードが動作しない理由は、FOR DO()句が実際にFOR文を実行する前に、一度に解析されるの全身からです。しかし、%ERRORLEVEL%の値は解析時に展開されるため、実行時に更新された値を見ることはできません。

あなたはそう、あなたのFINDコマンドの出力を見ることに興味がないだけ

  • ディレクトリにリストを制限するDIR/ADオプションを使用する必要があり、追加の問題

    • を持っています出力をnulにリダイレクトする必要があります。

    gavendkoaには1つの解決策があります。

    もう一つの選択肢は、それが!が含まれている場合、これは、拡張時と%% dの意志壊れた値でリスクを持っている遅れる拡張

    setlocal enableDelayedExpansion 
    for /f %%d in ('dir /ad /b C:\') do (
        find /c "C:\%%d" exclusions.txt >nul 
        if !errorlevel! equ 1 (
        REM Do code here 
    ) 
    ) 
    

    を使用することです。これは、ループ内の遅延展開をトグルすることで解決できます。

    もう1つの方法は、||演算子を使用することです。これは、前のコマンドが失敗した場合は次のコマンドを実行することを意味します。

    for /f %%d in ('dir /ad /b C:\') do (
        find /c "C:\%%d" exclusions.txt >nul || (
        REM Do code here 
    ) 
    ) 
    

    おそらく最良のオプションは、/ Vと/ GでFINDSTRに直接DIRの結果をパイプで全くエラーレベルを心配する必要性を排除することである:オプションは、あなたの除外に表示される値をフィルタリングしますリスト。

    次は

    for /f %%d in ('dir /ad /b C:\ ^| findstr /l /v /g:"exclude.list"') do (
        REM - Do code here 
    ) 
    

    を動作するようになっすぎない - あなたは、異なる長さの複数のリテラル文字列を検索する場合、それが失敗する可能性があります厄介なFINDSTRのバグがあります。

    FINDSTRに強制的に正規表現を使用させるようにしていますが、除外リストに表示される正規表現メタ文字をエスケープする必要があります。たとえば、myName.extという名前のディレクトリは、myName\.extとしてエスケープする必要があります。 exclusion.list以内にエスケープする必要があるだろう

    for /f %%d in ('dir /ad /b C:\ ^| findstr /r /v /g:"exclude.list"') do (
        REM - Do code here 
    ) 
    

    その他の文字は\^$[]

  • +0

    ある私は忘れる**実際FOR文を実行する前に、一度に解析されます** 。これを思い出してうれしい。 – gavenkoa

    関連する問題