2017-09-22 24 views
-1

我在替换多个文件名时遇到困难。 的情况是:替换Windows批处理文件夹中的多个文件名。代码必须只在一行中

[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 

任何人都可以解决问题吗? 并告诉我为什么上面的代码没有按预期工作。

+0

对于单行,你宁愿使用powershell,它在你的Windows系统上是标准的。 –

回答

0

您特别需要一行代码,因此这里是一个powershell版本。

get-childitem *20170921_5555.zip | foreach { rename-item $_ $_.Name.Replace("20170921_5555", "20170908_5555") } 
+0

谢谢你的代码。但不幸的是我的环境无法运行powershell。有没有可能将代码更改为简单的Windows批处理代码? – fahmifahim

+0

根据您的要求不是一行。否则在批处理中运行相同的代码,但在其之前调用powershell。 –

+0

我试图调用powershell,但没有得到系统的响应。我的是Windows Server 2003. – fahmifahim

0
  • 使用for迭代与错误的日期
  • 第2个堆叠for /f_
  • 命名分裂的名字用正确的日期更换第二个元素的文件

使用单条cmd线:

> @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" 

如果输出看起来OK,请删除ren命令前面的回显。
如果批量使用的文件百分号必须加倍%%

顺便说一句,你也可以使用这个PowerShell脚本批次:

powershell -NoP -C "gci '*_20170921_*.zip'|rni -NewName {$_.Name -replace '_20170921_','_20170908_'} -WhatIf 

如果输出看起来不错,取出后-WhatIf

+0

@GerhardBarnard请阅读我的答案 - **我做了** – LotPings

相关问题