我想使用管道传输到Get-ChildItem
的{{1}}选择一个文件列表,并输出显示文字,每行显示“重命名 oldfilename 到< EM> newfilename ”。
我该怎么做?
答案 0 :(得分:9)
Get-Childitem C:\Temp |
Foreach-object {
$OldName = $_.name;
$NewName = $_.name -replace 'temp','test';
Rename-Item -Newname $NewName;
Write-Output $("Renamed {0} to {1}" -f $OldName,$NewName)
}
答案 1 :(得分:8)
一个简单的解决方案是使用rename-item
运行-WhatIf
。这将显示类似
PS H:\test> gci | rename-item -newname { $_.name -replace 'temp','test' } -WhatIf
What if: Performing operation "Rename File" on Target "Item: H:\test\temp1 Destination: H:\test\test1".
足够好,还是在进行操作时是否需要它呢?
编辑:更简单的解决方案,使用-Verbose
。与-WhatIf
相同,但也执行操作:)
答案 2 :(得分:4)
你可以这样做:
gci . | %{ rename-item -Path $_.fullname -NewName ($_.name + 1); Write-Host "Renamed $($_.fullname) to $($_.name + 1)"}
答案 3 :(得分:0)
我知道这有点旧,但我对所有这些都有问题。这将遍历所有文件并重命名它们,即使名称没有改变!这是不必要的开销。
我添加了更多选项。
Get-ChildItem -Filter *.txt -Recurse -Path "C:\temp" |
Foreach-object {
$OldName = $_.name;
$NewName = $_.name -replace 'temp','test';
If ( $OldName -ne $NewName ){
Rename-Item -Path $_.PSPath -Newname $NewName;
Write-Output $("Renamed {0} to {1}" -f $OldName,$NewName);
}
}