2014-09-28 66 views
0

我有一個簡單的PowerShell腳本批量重命名文件,我想有一個表格輸出顯示「舊文件名」和「新文件名」以顯示更改。如果在仍處於'ForEach-Object'循環內部的情況下如何訪問/引用新文件名,假定可以完成?我可以刷新$ _的特定值嗎?我不想僅僅使用我的變量$ newname,因爲我創建了它,並且由於這應該是輸出,顯示文件名實際上已更改,所以我想從系統中訪問文件的新名稱,腳本。突變後立即訪問PowerShell變量

Write-Host "Old Name `t`t`t`t`t`t New Name" 
Write-Host "-------- `t`t`t`t`t`t --------" 

$files = Get-ChildItem -Path C:\Users\<user>\Desktop\Config 
$files | % ({ 
    if ((!$_.PsIsContainer) -and ($_.Extension -eq '')) { 
     $oldname = $_.FullName 
     $newname = "$($_.FullName).cfg" 
     Rename-Item $oldname $newname 

     # $_.Name still refers to the old file name without the extension 
     # How do I immediately access its new name (including extension)? 
     Write-Host $_.Name `t`t`t`t`t`t $newname 
    } 
}) 
+1

什麼是錯的使用'$ newname'?如果'Rename-Item'沒有返回錯誤,你可以假設它有效,並且你選擇的新名稱是正確的。 – arco444 2014-09-28 12:30:16

回答

3

您可以在$ NEWNAME做一個GET-項目:

(Get-Item $newname).Name 
+0

謝謝。正是我在找什麼。 – spickles 2014-09-30 16:34:01

1

我已經冒昧重寫你的腳本一點,使用哈希表和新物體。

爲了解釋我在這裏做什麼,我會爲你分一杯羹。 首先我去掉一些變量,我將在我的foreach循環中使用,用這個: 注意:-File參數,是它只會取文件名,如果你喜歡重命名所有文件和文件夾,然後刪除它。這裏

$Newname = ("Blop" + "$i" + ".txt") 

再取文件信息的一個文件,和管道將其重命名項:

$files = Get-ChildItem -Path "C:\Users\dha\Desktop\PS test folder" -File 
$OldFiles = $files 
[int]$i = "0" 

然後,我通過一個以每個文件之一,並創造新的名稱

$File | Rename-Item -NewName $Newname 

$ ixx只是一個加號,所以每次foreach循環運行時都要增加一個文件號。

然後我正在用$ Old_And_New變量寫一個哈希表。

最後,我用New-object創建一個對象並輸出它。

我希望這個幫助和我的解釋是可以理解的。

腳本安裝:

$files = Get-ChildItem -Path "C:\Users\dha\Desktop\PS test folder" -File 
$OldFiles = $files 
[int]$i = "0" 

foreach ($File in $files) 
{ 
    $Newname = ("Blop" + "$i" + ".txt") 
    $File | Rename-Item -NewName $Newname 
    $i++ 

    $Old_And_New = @{ 
     'Old File Name' = "$OldFiles"; 
     'New File Name' = "$Newname" 
    } 

    $obj = New-Object -TypeName PSObject -Property $Old_And_New 
    Write-Output $obj 
} 
+0

非常感謝! – spickles 2014-09-30 16:33:36

+0

已回答您的問題嗎? 或者還有其他什麼...? – 2014-10-01 06:36:10

+0

是的,它確實回答了!我很遺憾沒有提供足夠的反饋意見。 – spickles 2014-10-30 14:37:10