9

我想使用Get-ChildItem管道选择一个文件列表,Rename-Item并让输出显示文本,每行显示类似“将旧文件名重命名为新文件”的内容。

我怎样才能做到这一点?

4

4 回答 4

11
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)
        }
于 2012-09-06T15:17:44.750 回答
9

一种简单的解决方案是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,但也执行操作:)

于 2012-09-06T09:52:35.310 回答
4

你可以这样做:

gci . | %{ rename-item -Path $_.fullname -NewName ($_.name + 1); Write-Host "Renamed $($_.fullname) to $($_.name + 1)"}
于 2012-09-06T10:05:34.743 回答
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);
            }
        }
于 2021-01-22T15:07:17.730 回答