在一个目录中有很多文件,它们的名字分别为1.txt、2.txt、3.txt直到n.txt。我需要将它们全部重命名为它们的md5值。
我尝试过,但失败了。
for %f in (*.txt) do certutil -hashfile "%f" MD5 | findstr /C:2
在一个目录中有很多文件,它们的名字分别为1.txt、2.txt、3.txt直到n.txt。我需要将它们全部重命名为它们的md5值。
我尝试过,但失败了。
for %f in (*.txt) do certutil -hashfile "%f" MD5 | findstr /C:2
for /f
处理每个文件执行 certutil
命令的输出即可。for %a in (*.txt) do @for /f "skip=1 tokens=1,* delims=:" %b in ('certutil -hashfile "%a" MD5') do @if "%c"=="" @echo ren "%a" "%b%~xa"
for /f
使用skip
子句来避免在certutil
输出中的第一行(文件名)和冒号作为分隔符来拆分行以处理不需要的输出消息(以CertUtil:
开头)。这样,如果该行包含冒号(不需要的行),它将被拆分为两个部分(tokens=1,*
),将左标记存储在%b
中,右标记存储在%c
中。如果%c
有任何内容,则这不是包含哈希的行。如果%c
为空,则这是具有哈希的行,我们将重命名文件。注意:ren命令只会回显到控制台。如果输出看起来正确,请删除echo命令。如果文件无法读取(锁定或为空),则certutil仅输出错误行,因此不会有任何哈希,并且所有行都将被丢弃而不执行重命名操作。无论如何,从命令行执行此操作容易出错。如果可以,请像Hackoo建议的那样使用批处理文件。@echo off
setlocal enableextensions disabledelayedexpansion
for /f "tokens=1,* delims=:" %%a in ('
cmd /q /c "for %%f in (*.txt) do certutil -hashfile "%%f" MD5&&(echo file:%%f)"
^| findstr /v /b /i /c:"MD5" /c:"Cert"
') do (
if "%%a"=="file" (
set "file=%%b"
set "extension=%%~xb"
setlocal enabledelayedexpansion
echo ren "!file!" "!md5: =!!extension!"
endlocal
set "md5="
) else (
set "md5=%%a"
)
)
编辑:根据评论中sst指出的更正,将其包含在批处理代码中。
Ren
命令之前删除echo
命令。@echo off
Color 0A
Title Rename Files to MD5 Hashes
echo(
SetLocal EnableDelayedExpansion
for %%a in (*.txt) do (
for /f "skip=1 delims=" %%H in ('CertUtil -hashfile "%%a" MD5 ^| findstr /i /v "CertUtil"') do ( set H=%%H)
echo "%%a" = "!H!.txt"
echo Ren "%%a" "!H!.txt"
)
EndLocal
Pause & Exit
@Echo Off
SetLocal EnableExtensions DisableDelayedExpansion
For /F "Delims==" %%A In ('Set _[ 2^>Nul') Do Set "%%A="
For /F "Tokens=1* Delims=]" %%A In ('Where .:*.txt 2^>Nul^|Find /N /V ""') Do (
For /F "Delims=" %%C In ('CertUtil -HashFile "%%B" MD5 2^>Nul^|Find /V ":"'
) Do (Set "_=%%C" & Call Set "_%%A]=Ren "%%B" "%%_: =%%%%~xB""))
For /F "Tokens=1* Delims==" %%A In ('Set _[ 2^>Nul') Do %%B
ren“%a”%b
更改为ren“%a”“%b%〜xa”
(保留文件扩展名被%a
引用)或者如果你只处理.txt
文件,则可以简单地使用ren“%a”%b.txt
。 - MC NDe2 cf e4 cd ...
vse2cfe4cd...
- sst