我的目录中有很多zip。
所有具有不同名称的软件,这些软件已随着时间的推移而获得。
例如:
Software1_ABCDE-FGHIJ.zip
Software2_256SS-BM42.zip
Software3_aswdfbbgtyyn.zip
我想使用批处理/ powershell或bash将它们全部重命名为
例如:
Software1.zip
Software2.zip
Software3.zip
基本上需要_之后和.zip之前的所有内容,但其所有内容都是随机的...基本上是串行密钥。名称对于我在服务器上制作的php下载器来说已经很长了,其他功能需要限制,因此我需要重命名100个zip。
我已经有了一个for循环,可以将dir中的所有文件/文件夹压缩为bash中自己的zip。
for i in */; do zip -r "${i%/}.zip" "$i"; done
并且我已经有了可以将.exe从.zip之前的任何文件名中删除的bash。
rename.ul '.exe' '' *.zip
例如:
file1_23434434.exe.zip
成为
file1_23434434.zip
我如何批量重命名我的所有zip 从software1_serial-here-1234.zip到software1.zip
保留软件的原始zip名称和.zip扩展名
答案 0 :(得分:1)
在Windows命令提示符窗口中,运行包含ZIP文件的目录:
for /F "tokens=1* delims=_ eol=" %I in ('dir *_*.zip /A-D-H /B 2^>nul') do ren "%I_%J" "%I.zip"
在包含ZIP文件的目录中存储的批处理文件中:
@for /F "tokens=1* delims=_ eol=" %%I in ('dir "%~dp0*_*.zip" /A-D-H /B 2^>nul') do ren "%~dp0%%I_%%J" "%%I.zip"
如果软件名称后有多个下划线而不是一个_
,或者软件名称以一个或多个下划线开头,则必须使用两个 FOR 循环来重命名所有*_*.zip
个文件正确:
@for /F "delims= eol=" %%I in ('dir "%~dp0*_*.zip" /A-D-H /B 2^>nul') do @for /F "delims=_ eol=" %%J in ("%%I") do ren "%~dp0%%I" "%%J.zip"
外部 FOR 的循环变量I
保留具有文件扩展名的ZIP文件的完整文件名,但没有文件路径,而内部for循环的循环变量J
仅保留第一个下划线之前的文件名部分。 J
也删除了文件名开头的所有下划线。因此__SoftwareX__Y.zip
重命名为SoftwareX.zip
。
要了解所使用的命令及其工作方式,请打开命令提示符窗口,在其中执行以下命令,并非常仔细地阅读每个命令显示的所有帮助页面。
call /?
...说明%~dp0
...驱动器和参数0的路径,该参数是始终以反斜杠结尾的批处理文件路径。dir /?
for /?
ren /?
答案 1 :(得分:0)
由于您还用powershell
标记了问题,因此这是PowerShell的处理方式:
Get-ChildItem -Filter *.zip | Rename-Item -NewName { $_.Name -replace "_.*", ".zip" }
使用类似批处理的别名的简短版本:
dir -filter *.zip | ren -new { $_.name -replace "_.*", ".zip" }
答案 2 :(得分:0)
Get-ChildItem -Path C:\temp -Filter software* -File |
Rename-Item -NewName { ($_.BaseName -split '_')[0] + $_.Extension } -WhatIf
删除-whatif以应用操作。 -whatif用于预览。
这假定您要重命名的所有文件都以“软件”一词开头,并且文件名中只有一个_。