我想使用Get-ChildItem
管道选择一个文件列表,Rename-Item
并让输出显示文本,每行显示类似“将旧文件名重命名为新文件名”的内容。
我怎样才能做到这一点?
我想使用Get-ChildItem
管道选择一个文件列表,Rename-Item
并让输出显示文本,每行显示类似“将旧文件名重命名为新文件名”的内容。
我怎样才能做到这一点?
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)
}
一种简单的解决方案是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
,但也执行操作:)
你可以这样做:
gci . | %{ rename-item -Path $_.fullname -NewName ($_.name + 1); Write-Host "Renamed $($_.fullname) to $($_.name + 1)"}
我知道这有点老了,但我确实对所有这些都有问题。这将遍历所有文件并重命名它们,即使名称没有改变!这是不必要的开销。
我添加了更多选项。
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);
}
}