Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
突变后立即访问PowerShell变量_Powershell_Foreach_Rename Item Cmdlet - Fatal编程技术网

突变后立即访问PowerShell变量

突变后立即访问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 "-

我有一个简单的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
    }
})  
写主机“旧名`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
没有返回错误,您可以假定它工作正常,并且您选择的新名称是正确的。谢谢。正是我想要的。谢谢。正是我想要的回答了你的问题吗?或者还有别的什么…?是的,它回答了!我很抱歉没有提供足够的反馈。你的问题回答了吗?或者还有别的什么…?是的,它回答了!我很抱歉没有提供足够的反馈。