2017-10-11 10 views
0

バッチファイル内の特定のフォルダ内のファイル数をカウントする際に問題が発生しています。 C:\ logsのMyフォルダには、7つの異なるログファイルが含まれています。バッチファイル内のフォルダ内のファイルの数が正常に動作しない

私は次の内容のバッチファイルを実行すると、私はいつもCOUNTの値として「1」を取得しています:

SETLOCAL ENABLEDELAYEDEXPANSION 

SET LOGS_LOCAL=C:\logs 

SET COUNT=0 

REM Count logs 
for %%A in ("%LOGS_LOCAL%") do set /a COUNT+=1 

echo !COUNT! 
pause 

あなたは私がthis質問からの回答のスニペットを使用見ることができるようにそれでも動作しません。 私は何が間違っていますか?他の設定を変更する必要はありますか?

+2

あなたはこのコードで遅延拡張は必要ありません:私はあなたがこのような、そのディレクトリ内のカウントファイルを実行するためのものだと思う何

。 –

答えて

2

私はちょっと実験しましたが、望むファイルを正確に指定しなければならないようです。私は私のバッチファイルに戻り、今

SET LOGS_LOCAL=C:\Backups\weekly\logs\*.log 

SET LOGS_LOCAL=C:\Backups\weekly\logs 

から私のログフォルダのパスを変更し、 "7" COUNTため。

for /f %%a in ('dir /b /a-d ^|find /c /v ""') do set count=%%a 
echo %count% 

dirパラメータ:ちょうどあなたに別の方法で表示する

+1

それは正解です。 '\ * .log'を指定しないと、インクルードファイルではなくログフォルダに一致します。 –

+0

はい。あなたが実際に 'FOR'コマンドのヘルプファイルを読んでいれば。 '(set)1つまたは複数のファイルのセットを指定します。ワイルドカードが使用されている可能性があります。 – Squashman

2

(名前だけで、何の要約、ヘッダーなし)
/a-d簡単な形式を使用していない
/bは、フォルダ(唯一のショー・ファイル)

を除外します

find /c /v ""は、エントリをカウントするだけです(/c =カウント、/v "" =すべての空でない行)

+1

代替案を表示していますが、最も複雑ですが、実際の問題は解決していません。 –

+1

@LS_ᴅᴇᴠ:Peteはすでに解決策を見つけました(タイムスタンプを参照)。それを繰り返す理由は見当たりませんでした。 – Stephan

0

あなたはSETです。1単一のディレクトリC:\logsを変数として使用すると、COUNTは出力結果1で正しく動作します。

@ECHO OFF 

SET "LOGS_LOCAL=C:\logs" 

SET "COUNT=0" 
REM Count logs 
FOR %%A IN ("%LOGS_LOCAL%\*.log") DO SET/A COUNT+=1 

ECHO %COUNT% 
PAUSE 
関連する問題