Você pode tornar sua vida mais fácil ao filtrar a saída do certutil com um findstr /V ":"
o hash é a única linha sem dois pontos.
@Echo off
(for %%f in (*.json) do certutil -hashfile "%%~f" SHA256 | findstr /V ":"
)> HASH.txt
Uma abordagem diferente para obter qualquer número de linha especificado:
@Echo off
Set Line=2
(for %%f in (*.json) do for /f "tokens=1,* delims=:" %%A in (
'certutil -hashfile "%%~f" SHA256 ^| findstr /n "^" ^|findstr "^%Line%:"'
) Do echo %%B) > HASH.txt
Outra variante que armazena o hash e o nome completo do arquivo em HASHjson.txt
@Echo off
Set "Hash=HASHjson.txt"
For %%F in (*.json) do For /f %%A in (
'certutil -hashfile "%%~F" SHA256 ^| findstr /V ":"'
) Do Findstr "^%%A" "%HASH%" >NUL 2>&1 && (
Echo HASH %%A already present in %Hash%
) || (
Echo Add %%A %%~fF
>>"%Hash%" Echo %%A %%~fF
)
Execução da amostra:
> hashjson.cmd
Add eaf7df6fd6fe0719b6eafef8e4f74070684125822d03e6642a7e42fb425b442b A:\AIMavJ5IlpEmYCN.json
Add 24f1508e5e4a920b3233a37ce959e1e4f3fcd2a4ed90daec7879bc58af2a3a98 A:\AQ0G8KFw6KIj0JR.json
> hashjson.cmd
HASH eaf7df6fd6fe0719b6eafef8e4f74070684125822d03e6642a7e42fb425b442b already present in HASHjson.txt
HASH 24f1508e5e4a920b3233a37ce959e1e4f3fcd2a4ed90daec7879bc58af2a3a98 already present in HASHjson.txt