一次重命名包含不同字符的多个文件

时间:2018-12-11 20:24:56

标签: powershell batch-file scripting

脚本编写的新手,我一直在研究其他主题,并尝试了不同的脚本,但没有成功。

我想将“ _discard”添加到“项目”文件夹中不同子目录中的多个文件中

原始文件名如下:

first-file_us-tower_10.jpg
first-file_us-tower_tr_10.jpg
first-file_us-bridge_10.jpg
first-file_us-bridge_gps_10.jpg
first-file_us-bridge_tr_10.jpg
first-file_us-river_bbnf_10.jpg

我想要的是以下内容:

first-file_us-tower_10_discard.jpg
first-file_us-tower_tr_10_discard.jpg
first-file_us-bridge_10_discard.jpg
first-file_us-bridge_gps_10_discard.jpg
first-file_us-bridge_tr_10_discard.jpg
first-file_us-river_bbnf_10_discard.jpg

这是我试图在ps1脚本中使用的内容,但无法完成。

$dir = "C:\pics\projects" 
$file = "*_us*.jpg"
$copy = "*_us*_discard.jpg" 

get-childitem -Path "$dir" | where-object { $_.Name -like "$file" } | %{rename-item -path $dir$_ -newname $d"_"$_}

不幸的是没有成功。如果可以在批处理脚本中实现此功能,也欢迎使用,但我对批处理不熟悉。

任何帮助将不胜感激

2 个答案:

答案 0 :(得分:1)

您阅读过文档吗?有一个示例几乎可以完全按照您的意图进行操作。示例4:

Get-ChildItem *.txt | Rename-Item -NewName { $_.name -Replace '\.txt$','.log' }

https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/rename-item?view=powershell-6

PS C:\> (Get-ChildItem "C:\pics\projects").FullName
C:\pics\projects\first-file_us-bridge_10.jpg
C:\pics\projects\first-file_us-bridge_gps_10.jpg
C:\pics\projects\first-file_us-bridge_tr_10.jpg
C:\pics\projects\first-file_us-river_bbnf_10.jpg
C:\pics\projects\first-file_us-tower_10.jpg
C:\pics\projects\first-file_us-tower_tr_10.jpg

PS C:\> Get-ChildItem "C:\pics\projects" | Rename-Item -NewName {$_.Name -Replace "\.jpg$","_discard.jpg"}

PS C:\> (Get-ChildItem "C:\pics\projects").FullName
C:\pics\projects\first-file_us-bridge_10_discard.jpg
C:\pics\projects\first-file_us-bridge_gps_10_discard.jpg
C:\pics\projects\first-file_us-bridge_tr_10_discard.jpg
C:\pics\projects\first-file_us-river_bbnf_10_discard.jpg
C:\pics\projects\first-file_us-tower_10_discard.jpg
C:\pics\projects\first-file_us-tower_tr_10_discard.jpg

我删除了Where-Object,因为它与您示例中的所有文件名都匹配。

答案 1 :(得分:0)

同样,子文件夹中的文件也应重命名并
您肯定要排除已经附加了_discard的文件

$dir    = "C:\pics\projects" 
$file   = "*_us*.jpg"
$append = "_discard"
Get-ChildItem "$dir\$file" -Recurse -File |
  Where-Object BaseName -notmatch $append |
    Rename-Item -NewName {"{0}{1}{2}" -f $_.BaseName,$append,$_.Extension} -WhatIf

如果输出看起来正常,请删除结尾的-WhatIf