![PowerShell 脚本用于更改文件夹中所有文件的名称](https://linux22.com/image/1589621/PowerShell%20%E8%84%9A%E6%9C%AC%E7%94%A8%E4%BA%8E%E6%9B%B4%E6%94%B9%E6%96%87%E4%BB%B6%E5%A4%B9%E4%B8%AD%E6%89%80%E6%9C%89%E6%96%87%E4%BB%B6%E7%9A%84%E5%90%8D%E7%A7%B0.png)
我想编写一个脚本,将目录中所有文件的名称更改为统一的名称。
示例:现有文件:awff.jpg、forp.jpg、ddd.jpg、www.jpg
脚本后的文件:file1、file2、file3、file4.jpg
因此,如果我有一个充满文件的目录,我想运行该脚本,我假设它会将目录的内容拉入数组,然后通过循环进行迭代,将新名称应用到其末尾,并将迭代器附加到其末尾。
PowerShell 有这个功能吗?
这让我很接近,但我只想抓住所有文件,并按迭代顺序重命名它们。
Get-ChildItem -Filter “*current*” -Recurse | Rename-Item -NewName {$_.name -replace ‘current’,’old’ }
或这个:
Get-ChildItem -LiteralPath 'C:\temp' -Recurse | Where-Object {-Not $_.PsIscontainer -AND $_.name -match "."} |
foreach {
$New=$_.BaseName.Replace("*","File")+$_.Extension
Rename-Item -path $_.Fullname -newname $New -passthru
}
答案1
尽管 PowerShell 本身可以理解印刷引号,但
由于编码的边缘情况问题,我还是会避免使用它们。
您的描述和代码不匹配,您是否要使用前缀file
和计数器(递归)重命名所有 jpg 文件,还是仅重命名名称的一部分?
$Counter = 1
Get-ChildItem -Filter "*.jpg" -Recurse |
Rename-Item -NewName {'file{0:D3}.jpg' -f $script:Counter++} -WhatIf
在文件夹中:
> Get-ChildItem *.jpg -Name
awff.jpg
ddd.jpg
forp.jpg
www.jpg
上述脚本将产生结果(在我的德语区域设置窗口中):
WhatIf: Ausführen des Vorgangs "Datei umbenennen" für das Ziel
"Element: A:\awff.jpg Ziel: A:\file001.jpg".
WhatIf: Ausführen des Vorgangs "Datei umbenennen" für das Ziel
"Element: A:\ddd.jpg Ziel: A:\file002.jpg".
WhatIf: Ausführen des Vorgangs "Datei umbenennen" für das Ziel
"Element: A:\forp.jpg Ziel: A:\file003.jpg".
WhatIf: Ausführen des Vorgangs "Datei umbenennen" für das Ziel
"Element: A:\www.jpg Ziel: A:\file004.jpg".
如果输出结果正常,删除-WhatIf