替换Windows批处理中文件夹内的多个文件名。代码只能在一行中
我很难替换多个文件名。 情况将是:替换Windows批处理中文件夹内的多个文件名。代码只能在一行中,windows,batch-file,rename,Windows,Batch File,Rename,我很难替换多个文件名。 情况将是: [Before] C:¥data¥ -HOSTNAME1_20170921_5555.zip -HOSTNAME2_20170921_5555.zip -HOSTNAME3_20170921_5555.zip [After] C:¥data¥ -HOSTNAME1_20170908_5555.zip -HOSTNAME2_20170908_5555.zip -HOSTNAME3_20170908_5555.zi
[Before]
C:¥data¥
-HOSTNAME1_20170921_5555.zip
-HOSTNAME2_20170921_5555.zip
-HOSTNAME3_20170921_5555.zip
[After]
C:¥data¥
-HOSTNAME1_20170908_5555.zip
-HOSTNAME2_20170908_5555.zip
-HOSTNAME3_20170908_5555.zip
我尝试了下面的命令,但没有得到满意的结果
RENAME C:¥data¥*20170921_5555.zip *20170908_5555.zip
不幸的是,结果是:
C:¥data¥
-HOSTNAME1_20170920170908_5555.zip
-HOSTNAME2_20170920170908_5555.zip
-HOSTNAME3_20170920170908_5555.zip
谁能解决这个问题?
告诉我为什么上面的代码没有按预期工作 您特别需要一行代码,因此这里是powershell版本
get-childitem *20170921_5555.zip | foreach { rename-item $_ $_.Name.Replace("20170921_5555", "20170908_5555") }
- 使用
迭代日期错误的文件for
- 第二个堆叠的
,用于在用于/f
处拆分名称,以及
- 重命名并用正确的日期替换第二个元素
> @for %A in (*_20170921_*.zip) do @for /f "tokens=1,2* delims=_" %B in ("%A") do @echo ren "%A" "%B_20170908_%D"
ren "¥data¥-HOSTNAME1_20170921_5555.zip" "¥data¥-HOSTNAME1_20170908_5555.zip"
ren "¥data¥-HOSTNAME2_20170921_5555.zip" "¥data¥-HOSTNAME2_20170908_5555.zip"
ren "¥data¥-HOSTNAME3_20170921_5555.zip" "¥data¥-HOSTNAME3_20170908_5555.zip"
如果输出看起来正常,请删除ren命令前面的回显。如果在批处理文件中使用,百分比符号必须加倍
%%
顺便说一句,您也可以从批处理中使用此Powershell脚本:
powershell -NoP -C "gci '*_20170921_*.zip'|rni -NewName {$_.Name -replace '_20170921_','_20170908_'} -WhatIf
如果输出看起来正常,请删除尾随的
-WhatIf
作为单行,您更愿意使用windows系统上的标准powershell。谢谢您提供的代码。但不幸的是,我的环境无法运行powershell。是否有可能将代码更改为简单的windows批处理代码?没有您要求的一行代码。else在批处理中运行相同的代码,但将call powershell放在前面。我尝试调用powershell,但未收到系统的响应。我的是Windows Server 2003。纯批处理是可能的,但您需要一行代码,这是不可能的。@fahmifahim它不起作用,为什么需要单行代码?该代码没有进行重命名的智能,因为您没有告诉它执行您认为是告诉它执行的操作。