2014-09-28 100 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