在powershell中,如何使用Rename-Item同时输出旧文件名和新文件名?

时间:2012-09-06 09:44:34

标签: powershell get-childitem rename-item-cmdlet

我想使用管道传输到Get-ChildItem的{​​{1}}选择一个文件列表,并输出显示文字,每行显示“重命名 oldfilename 到< EM> newfilename ”。

我该怎么做?

4 个答案:

答案 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);
            }
        }