首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将压缩文件重命名为原始名称,但删除部分名称

将压缩文件重命名为原始名称,但删除部分名称
EN

Stack Overflow用户
提问于 2019-01-16 10:35:02
回答 3查看 317关注 0票数 1

我有目录,其中有很多拉链。

都有不同的软件名称,这些软件都是随时间而获得的。

例如:

代码语言:javascript
复制
Software1_ABCDE-FGHIJ.zip
Software2_256SS-BM42.zip
Software3_aswdfbbgtyyn.zip

我想使用批处理/powershell或bash将它们全部重命名为

例如:

代码语言:javascript
复制
Software1.zip
Software2.zip
Software3.zip

基本上,在.zip之后和之前的任何东西都需要去,但它的所有随机内容.基本上是串行密钥。我在服务器上创建的php下载器的名称很长,其他功能也需要限制,所以我需要重命名1000次zip。

我已经有一个for循环,可以将dir中的所有文件/文件夹压缩到bash中的zip中。

代码语言:javascript
复制
for i in */; do zip -r "${i%/}.zip" "$i"; done

我已经有了这个bash,它将.exe从.zip之前的任何文件名中删除

代码语言:javascript
复制
rename.ul '.exe' '' *.zip

例如:

代码语言:javascript
复制
file1_23434434.exe.zip 

变成了

代码语言:javascript
复制
file1_23434434.zip

如何将我的所有拉链重命名从软件1_串行-这里-1234.zip到软件1.zip

保留软件的原始zip名称和.zip扩展

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-01-16 10:53:29

由于您也使用powershell标记了您的问题,所以这将是PowerShell的方法:

代码语言:javascript
复制
Get-ChildItem -Filter *.zip | Rename-Item -NewName { $_.Name -replace "_.*", ".zip" }

使用批处理类别名的短版本:

代码语言:javascript
复制
dir -filter *.zip | ren -new { $_.name -replace "_.*", ".zip" }
票数 1
EN

Stack Overflow用户

发布于 2019-01-16 11:00:19

在Windows命令提示符窗口中,运行在包含ZIP文件的目录中:

代码语言:javascript
复制
for /F "tokens=1* delims=_ eol=" %I in ('dir *_*.zip /A-D-H /B 2^>nul') do ren "%I_%J" "%I.zip"

在存储在包含ZIP文件的目录中的批处理文件中:

代码语言:javascript
复制
@for /F "tokens=1* delims=_ eol=" %%I in ('dir "%~dp0*_*.zip" /A-D-H /B 2^>nul') do ren "%~dp0%%I_%%J" "%%I.zip"

如果在软件名称之后有多个下划线,而不仅仅是一个_,或者软件名以一个或多个下划线开头,则需要使用两个来对循环重新命名所有*_*.zip文件:

代码语言:javascript
复制
@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"

循环变量I的外部保存完整的文件名ZIP文件扩展名,但没有文件路径,而循环变量J的内for循环只保留文件名部分之前的第一个下划线。J还删除了文件名开头的所有下划线。因此__SoftwareX__Y.zip被重命名为SoftwareX.zip

要了解所使用的命令及其工作方式,请打开命令提示符窗口,在那里执行以下命令,并非常仔细地读取为每个命令显示的所有帮助页。

  • call /? ...解释%~dp0 ..。参数0的驱动器和路径,这是批处理文件路径,始终以反斜杠结尾。
  • dir /?
  • for /?
  • ren /?
票数 1
EN

Stack Overflow用户

发布于 2019-01-16 10:57:11

代码语言:javascript
复制
Get-ChildItem -Path C:\temp -Filter software* -File | 
   Rename-Item -NewName { ($_.BaseName -split '_')[0] + $_.Extension } -WhatIf

删除-whatif以应用该操作。-whatif是用于预览的。

这假设您要重命名的所有文件都以word software开头,并且文件名中只有一个_。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54215170

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档