2017-07-21 10 views
0

ログ/テキストファイルごとの行数をカウントするこのバッチコマンドがあります。 3つ以上の行を持つテキストファイルがある場合、md5deep検証に不一致があります。問題は、CheckMismatch.txtで複数のフォルダがあることです。私はすべてのCheckMismatch.txtをチェックし、行を1つずつ数えるループを探しています。バッチファイルを使用してテキストファイルあたりの行数をカウントする

IF EXIST C:\BACKUPS\WEBAPP-UAT\WEBAPP\FOLDER1 (md5deep64 -x "C:\BACKUPS\WEBAPP-UAT\WEBAPP\FOLDER1\FOLDER1.md5" -r "C:\BACKUPS\WEBAPP-UAT\WEBAPP\FOLDER1" > C:\BACKUPS\WEBAPP-UAT\WEBAPP\FOLDER1\CheckMismatch.txt 
@echo off 
setlocal EnableDelayedExpansion 
set "cmd=findstr /R /N "^^" C:\BACKUPS\WEBAPP-UAT\WEBAPP\FOLDER1\CheckMismatch.txt | find /C ":"" 
for /f %%a in ('!cmd!') do set number=%%a 
if %number% gtr 2 (echo there is a mismatch in FOLDER1) ELSE (echo FOLDER1 HASHES matched) 
) 
  1. Folder1に CheckMismatch.txt
  2. FOLDER2 CheckMismatch.txt
  3. FOLDER3 CheckMismatch.txt
  4. Folder4 CheckMismatch.txt
  5. Folder5 CheckMismatch.txt

答えて

1

FINDFINDSTRの必要はありません。 FINDだけで行を直接数えることができます。 FINDSTRを使用して、数が2以下かどうかをテストできます。IFの代わりに&&||を使用することができます。

CheckMismatch.txtだけであるならば、あなたはあなたが"C:\BACKUPS\WEBAPP-UAT\WEBAPP\"

@echo off 
for /d %%F in ("C:\BACKUPS\WEBAPP-UAT\WEBAPP\*") do (
    md5deep64 -x "%%F\%%~nxF.md5" -r "%%F" >"%%F\CheckMismatch.txt" 
    type "%%F\CheckMismatch.txt" | find /c /v "" | findstr /x "0 1 2" && (
    echo %%~nxF hashes matched 
) || (
    echo There is a mismatch in %%~nxF 
) 
) 

下のすべてのフォルダを処理する可能性が高くなる"C:\BACKUPS\WEBAPP-UAT\WEBAPP\"

@echo off 
setlocal 
set "root=C:\BACKUPS\WEBAPP-UAT\WEBAPP" 
for %%F in (
    Folder1 
    Folder2 
    Folder3 
    Folder4 
    Folder5 
) do (
    md5deep64 -x "%root%\%%F\%%F.md5" -r "%root%\%%F" >"%root%\%%F\CheckMismatch.txt" 
    type "%root%\%%F\CheckMismatch.txt" | find /c /v "" | findstr /x "0 1 2" && (
    echo There is a mismatch in %%F 
) || (
    echo %%F hashes matched 
) 
) 

下のフォルダの固定リストを処理する場合後で必要としない一時ファイルを作成すると、ファイルの作成を完全に避けることができます。

@echo off 
for /d %%F in ("C:\BACKUPS\WEBAPP-UAT\WEBAPP\*") do (
    md5deep64 -x "%%F\%%~nxF.md5" -r "%%F" | find /c /v "" | findstr /x "0 1 2" && (
    echo %%~nxF hashes matched 
) || (
    echo There is a mismatch in %%~nxF 
) 
) 
+0

これが修正リストでない場合はどうなりますか?時には** Folder1 **は検証部分に含まれていませんが、** FOLDER2 **以降が含まれていますか? –

+0

ありがとうございました。私は2番目のコマンドを使用しました。それが私の必要なものです!ありがとう! –

0

遅延の問題が発生しました(!number!の代わりに%number%をコードブロックに使用しました)
フォーマットをより明確にしようとしました。

@Echo off 
SetLocal EnableExtensions EnableDelayedExpansion 
Set "Folder=C:\BACKUPS\WEBAPP-UAT\WEBAPP\FOLDER1 
IF EXIST "%Folder%" (
    md5deep64 -x "%Folder%\FOLDER1.md5"^
       -r "%Folder%" > "%Folder%\CheckMismatch.txt" 
    set "cmd=findstr /R /N "^^" "%Folder%\CheckMismatch.txt" | find /C ":"" 
    Set "number=0" 
    for /f %%a in ('!cmd!') do set number=%%a 

    if !number! gtr 2 (
     echo there is a mismatch in FOLDER1 
    ) ELSE (
     echo FOLDER1 HASHES matched) 
    ) 
) 
関連する問題