突变后立即访问PowerShell变量
我有一个简单的PowerShell脚本,可以批量重命名文件,我希望有一个显示“旧文件名”和“新文件名”的表输出来显示更改。假设可以访问/引用新文件名,但仍在“ForEach Object”循环中,如何访问/引用该文件名?我可以刷新$的特定值吗?我不想只使用我的变量$newname,因为我创建了它,并且由于它应该是显示文件名实际更改的输出,所以我希望根据脚本确定从系统访问文件的新名称突变后立即访问PowerShell变量,powershell,foreach,rename-item-cmdlet,Powershell,Foreach,Rename Item Cmdlet,我有一个简单的PowerShell脚本,可以批量重命名文件,我希望有一个显示“旧文件名”和“新文件名”的表输出来显示更改。假设可以访问/引用新文件名,但仍在“ForEach Object”循环中,如何访问/引用该文件名?我可以刷新$的特定值吗?我不想只使用我的变量$newname,因为我创建了它,并且由于它应该是显示文件名实际更改的输出,所以我希望根据脚本确定从系统访问文件的新名称 Write-Host "Old Name `t`t`t`t`t`t New Name" Write-Host "-
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
}
})
写主机“旧名`t`t`t`t`t`t新名”
写入主机“----------`t`t`t`t`t`t------------”
$files=Get ChildItem-路径C:\Users\\Desktop\Config
$files |%({
if(!$PsIsContainer)-和($扩展名-eq“”){
$oldname=$\u.FullName
$newname=“$($\ u.FullName).cfg”
重命名项$oldname$newname
#$\ Name仍然引用没有扩展名的旧文件名
#如何立即访问其新名称(包括扩展名)?
写入主机$\名称`t`t`t`t`t`t$newname
}
})
您可以在$newname上执行Get项:
(Get-Item $newname).Name
您可以在$newname上执行Get项目:
(Get-Item $newname).Name
我冒昧地用一个哈希表和一个新对象重写了一下您的脚本 为了解释我在这里做什么,我将为你把它分成几部分。 首先,我定义了一些变量,我将在我的foreach循环中使用这些变量: 注意:-文件参数,因此它将只接受文件名,如果您想重命名所有内容、文件和文件夹,则将其删除
$files = Get-ChildItem -Path "C:\Users\dha\Desktop\PS test folder" -File
$OldFiles = $files
[int]$i = "0"
然后,我将逐个获取每个文件,并在中创建新名称:
$Newname = ("Blop" + "$i" + ".txt")
然后获取一个文件的文件信息,并通过管道将其重命名为此处的项
$File | Rename-Item -NewName $Newname
$ixx只是一个plusser,所以每次foreach循环运行时,将文件号增加一个
然后我用$Old\u和\u New变量编写一个哈希表
最后,我用新对象创建一个对象并输出它
我希望这个帮助和我的解释是可以理解的
要编写汇编的脚本,请执行以下操作:
$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
}
我冒昧地用一个哈希表和一个新对象重写了一下您的脚本 为了解释我在这里做什么,我将为你把它分成几部分。 首先,我定义了一些变量,我将在我的foreach循环中使用这些变量: 注意:-文件参数,因此它将只接受文件名,如果您想重命名所有内容、文件和文件夹,则将其删除
$files = Get-ChildItem -Path "C:\Users\dha\Desktop\PS test folder" -File
$OldFiles = $files
[int]$i = "0"
然后,我将逐个获取每个文件,并在中创建新名称:
$Newname = ("Blop" + "$i" + ".txt")
然后获取一个文件的文件信息,并通过管道将其重命名为此处的项
$File | Rename-Item -NewName $Newname
$ixx只是一个plusser,所以每次foreach循环运行时,将文件号增加一个
然后我用$Old\u和\u New变量编写一个哈希表
最后,我用新对象创建一个对象并输出它
我希望这个帮助和我的解释是可以理解的
要编写汇编的脚本,请执行以下操作:
$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
}
使用
$newname
有什么问题?如果重命名项
未返回任何错误,则可以假定它工作正常,并且您选择的新名称正确无误。使用$newname
有什么问题?如果Rename Item
没有返回错误,您可以假定它工作正常,并且您选择的新名称是正确的。谢谢。正是我想要的。谢谢。正是我想要的回答了你的问题吗?或者还有别的什么…?是的,它回答了!我很抱歉没有提供足够的反馈。你的问题回答了吗?或者还有别的什么…?是的,它回答了!我很抱歉没有提供足够的反馈。