使用批处理文件计算每个文本文件的行数
count number of rows per text file using batch file
我有这个批处理命令可以计算每个 log/text 文件的行数。如果我有一个包含 3 行或更多行的文本文件,这意味着我的 md5deep 验证不匹配。问题是我有多个 CheckMismatch.txt 的文件夹。我正在寻找一个循环,它将检查所有 CheckMismatch.txt 并逐行计数。
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
CheckMismatch.txt
- 文件夹2
CheckMismatch.txt
- 文件夹3
CheckMismatch.txt
- 文件夹4
CheckMismatch.txt
- 文件夹5
CheckMismatch.txt
存在延迟扩展问题(在代码块中使用 %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)
)
)
FIND
之前不需要FINDSTR
。您可以单独使用 FIND
直接计算行数。您可以使用 FINDSTR
来测试计数是否小于或等于 2。这使您可以使用 &&
和 ||
而不是 IF
.
如果要处理"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
)
)
您更有可能希望处理 "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
)
)
如果 CheckMismatch.txt 只是一个您以后不需要的临时文件,那么您可以完全避免创建该文件
@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
)
)
我有这个批处理命令可以计算每个 log/text 文件的行数。如果我有一个包含 3 行或更多行的文本文件,这意味着我的 md5deep 验证不匹配。问题是我有多个 CheckMismatch.txt 的文件夹。我正在寻找一个循环,它将检查所有 CheckMismatch.txt 并逐行计数。
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 CheckMismatch.txt
- 文件夹2 CheckMismatch.txt
- 文件夹3 CheckMismatch.txt
- 文件夹4 CheckMismatch.txt
- 文件夹5 CheckMismatch.txt
存在延迟扩展问题(在代码块中使用 %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)
)
)
FIND
之前不需要FINDSTR
。您可以单独使用 FIND
直接计算行数。您可以使用 FINDSTR
来测试计数是否小于或等于 2。这使您可以使用 &&
和 ||
而不是 IF
.
如果要处理"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
)
)
您更有可能希望处理 "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
)
)
如果 CheckMismatch.txt 只是一个您以后不需要的临时文件,那么您可以完全避免创建该文件
@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
)
)