![希望将一批 cab 文件重命名为小写,并添加其 SHA1 哈希值](https://linux22.com/image/1434206/%E5%B8%8C%E6%9C%9B%E5%B0%86%E4%B8%80%E6%89%B9%20cab%20%E6%96%87%E4%BB%B6%E9%87%8D%E5%91%BD%E5%90%8D%E4%B8%BA%E5%B0%8F%E5%86%99%EF%BC%8C%E5%B9%B6%E6%B7%BB%E5%8A%A0%E5%85%B6%20SHA1%20%E5%93%88%E5%B8%8C%E5%80%BC.png)
我需要一个批处理脚本来将文件夹中的所有文件重命名为小写字母,并在下划线后添加其 SHA1 哈希值。
例子:
我有一个名为“Windows8.1-KB2862152-x86.cab”的文件,它的哈希值是“bc44b5c4daca0fb2a7b596bafb3d751231983c0e”,所以我需要将其重命名为:windows8.1-kb2862152-x86_bc44b5c4daca0fb2a7b596bafb3d751231983c0e.cab,其中 W 现在是小写的,KB 也是小写的。
我有大量需要这种格式的文件。
我还应该提到,我有 IBM Endpoint Manager 的 SHA1 工具(sha1.exe),其用法如下:
sha1 [-r|-s|-m|-b] <filename> [-c]
-r: Calculate Size/Sha1 and print out a prefetch style statement for 6.0+ style downloads (use this normally).
-s: Sha1 only.
-m: Sha1 in MIME format (hex-encoded and base-64).
-b: Calculate Size/sha1 and print out a prefetch block statment for 7.2+ style downloads.
-c: Puts the result string into you paste buffer so you don't need to copy/paste out of the command window.
我有以下在该站点上找到的脚本,但出现“命令语法不正确”
@ECHO OFF
SET FULLNAME=%~f1
for /f "delims=" %%a in ('sha1.exe -s %FULLNAME%') do SET hash=%%a
ren %FULLNAME% %FULLNAME%_%hash%
显然它被这样调用:for %A IN (C:\PathToFolder*) DO C:\SomeFolder\hasher.bat "%A" 但是这对小写重命名也没有帮助,而且我认为它会丢失文件扩展名。
答案1
如果您将文件名作为参数传递,您的脚本应该可以正常工作。例如,将其保存为 hash.bat 并hash.bat Windows8.1-KB2862152-x86.cab
从命令行运行。
该脚本将文件重命名为Windows8.1-KB2862152-x86.cab_bc44b5c4daca0fb2a7b596bafb3d751231983c0e
如果我理解正确的话,你想要。出租车扩展名在末尾,并且希望文件名全部为小写。
要修复 .cab 部分,请使用替换。将脚本中的最后一行从:
ren %FULLNAME% %FULLNAME%_%hash%
到
ren %FULLNAME% %FULLNAME:.cab=%_%hash%.cab
现在,添加另一行将所有文件重命名为小写。dir /l 以小写列出输出,因此列出所有文件并根据输出重命名它们:
for /f "tokens=*" %%a in ('dir /l /b /s /a-d') do ren "%%a" "%%a"
因此,你的脚本应该是:
@ECHO OFF
SET FULLNAME=%~f1
for /f "delims=" %%a in ('sha1.exe -s %FULLNAME%') do SET hash=%%a
ren %FULLNAME% %FULLNAME:.cab=%_%hash%.cab
for /f "tokens=*" %%a in ('dir /l /b /s /a-d') do ren "%%a" "%%a"
您需要修改工作目录的脚本或从存储 .cab 文件的同一目录运行该脚本。