我有一个简单的PowerShell脚本,可以批量重命名文件,我希望有一个表格输出显示“旧文件名”'和'新文件名'显示变化。如何在仍然在' ForEach-Object'内部访问/引用新文件名?循环,假设它可以完成?我可以刷新$ _的特定值吗?我不想使用我的变量$ newname,因为我创建了它,因为这应该是输出,显示文件名实际上已更改,我想访问该文件的新内容系统根据脚本确定的名称。
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
}
})
答案 0 :(得分:3)
您可以在$ newname上执行Get-Item:
(Get-Item $newname).Name
答案 1 :(得分:1)
我已经冒昧地使用哈希表和新对象重写你的脚本。
为了解释我在这里做的事情,我会为你分一点。 首先我声明一些变量,我将在我的foreach循环中使用,用这个: 注意:-File参数,如果你想重命名所有内容,文件和文件夹,它只会采用文件名,然后删除它。
$files = Get-ChildItem -Path "C:\Users\dha\Desktop\PS test folder" -File
$OldFiles = $files
[int]$i = "0"
然后我逐个拍摄每个文件,并在:
中创建新名称$Newname = ("Blop" + "$i" + ".txt")
然后获取一个文件的文件信息,并将其传递给rename-item here
$File | Rename-Item -NewName $Newname
$ ixx只是一个加号器,所以每次foreach循环运行时,将文件数增加一个。
然后我用$ Old_And_New变量编写一个哈希表。
最后,我正在使用New-object创建一个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
}