Batch file 将Md5校验和放入文件名
目录1.txt 2.txt 3.txt中有一些文件。。n、 txt,我需要用它们的md5总和重命名它们。 我累了Batch file 将Md5校验和放入文件名,batch-file,cmd,Batch File,Cmd,目录1.txt 2.txt 3.txt中有一些文件。。n、 txt,我需要用它们的md5总和重命名它们。 我累了 for %f in (*.txt) do certutil -hashfile "%f" MD5 | findstr /C:2 您可以尝试类似此批处理脚本的操作,只需将其另存为重命名MD5.bat,并将其放在存储文本文件的同一目录中,然后双击执行即可 如果一切正常,您可以在Ren命令之前删除echo命令 @echo关闭 颜色0A 标题将文件重命名为MD5哈希 回音( SetLoca
for %f in (*.txt) do certutil -hashfile "%f" MD5 | findstr /C:2
您可以尝试类似此批处理脚本的操作,只需将其另存为重命名MD5.bat,并将其放在存储文本文件的同一目录中,然后双击执行即可 如果一切正常,您可以在
Ren
命令之前删除echo
命令
@echo关闭
颜色0A
标题将文件重命名为MD5哈希
回音(
SetLocal EnableDelayedExpansion
对于(*.txt)中的%%a,请执行以下操作(
对于/f“skip=1 delims=“%%H in('CertUtil-hashfile“%%a”MD5^ | findstr/i/v“CertUtil””)do(设置H=%%H)
回显“%%a”=“!H!.txt”
echo Ren“%%a”“!H!.txt”
)
端部
暂停和退出
如果您确实需要从命令行(根据您问题中的语法)执行此操作,您只需要为/f添加一个,以处理为每个文件执行的certutil
命令的输出
对于(*.txt)do@for/f“skip=1 tokens=1,*delims=:%b in('certutil-hashfile“%a”MD5')中的%a,如果“%c”=”@echo ren“%a”%b%~xa,则执行
/f
的for
使用skip
子句来避免certutil
输出中的第一行(文件名)和冒号作为分隔符来拆分行以处理不需要的输出消息(以certutil:
开头)
这样,如果该行包含冒号(不需要的行),它将被拆分为两个(tokens=1,*
),将左标记存储在%b
中,将右标记存储在%c
中
如果%c
有任何内容,则这不是包含哈希的行。如果%c
为空,则这是包含哈希的行,我们将重命名该文件
注:
命令仅回显到控制台。如果输出似乎正确,请删除ren
命令echo
- 如果文件无法读取(锁定或为空),
只输出错误行,因此不会有任何散列,如果不执行重命名操作,所有行都将被丢弃certutil
@echo关闭
setlocal enableextensions disabledelayedexpansion
对于/f“tokens=1,*delims=:”%%a in('
用于(*.txt)中%%f的cmd/q/c“do certutil-hashfile”%%f“MD5&(回显文件:%%f)”
^|findstr/v/b/i/c:“MD5”/c:“证书”
""做"(
如果“%%a”==“文件”(
设置“文件=%%b”
设置“扩展=%%~xb”
延迟扩展
echo ren“!file!”!md5:=!!扩展名!”
端部
设置“md5=”
)否则(
设置“md5=%%a”
)
)
<强>编辑< <强> >在批次代码中,在注释< /p> 中指出SST所指的纠正,以确保我新更名的<>代码.txt < /c>文件不被循环回<<代码> > 循环,并且因为MD5的结果可能是一组由空格分隔的两个字符串,所以我可能会考虑使用批处理文件执行类似操作:
@Echo关闭
SetLocal EnableExtensions DisableDelayedExpansion
对于/F“Delims=”('Set[2^>Nul')中的%%A,请设置“%%A=”
对于/F“Tokens=1*Delims=]”中的%%A('Where.*.txt 2^>num^| Find/N/V“”)Do(
对于/F“Delims=“%%C In('CertUtil-HashFile“%%B”MD5 2^>Nul^|Find/V):“'
)Do(设置“\=%%C”&调用设置“\%%A]=Ren”%%B”“%%\\=%%%xB”“)
对于/F“Tokens=1*Delims==”%%A In('Set[2^>Nul')Do%%B
批处理运行后,脚本已更改名称,但丢失了文件扩展名。如“e2cfe4cd8e52eed3e602b6730df29d4e”。无文件extension@AligamarliNamazov你至少测试过我的批次了吗?@AligamarliNamazov,答案更新。你只需要将ren“%a”%b
更改为ren“%a”%b%~xa
(要防止文件扩展名被%a
)引用,或者如果只处理.txt
文件,则只需使用ren“%a”%b.txt
@MCND,在某些windows版本上,哈希算法必须以大写形式传递,否则cerutil将失败,这在我的windows 7上是肯定的,在我的windows 10上certutil接受小写、大写和混合大写。我找不到Microsoft关于此行为的任何官方声明。此外,从哈希字符串中删除空格似乎也是错误的好主意,同样是因为Windows版本之间的输出格式不同。例如,e2 cf e4 cd…
vse2cfe4cd…
@sst,谢谢,你是对的。内存不好,手头只有Windows 10,这样结束了。