0

ファイルの名前を一括で変更する単純な 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
    }
})  
4

2 に答える 2

3

$newname で Get-Item を実行できます。

(Get-Item $newname).Name 
于 2014-09-28T13:36:17.830 に答える
1

Hash Table と New-Object を使用して、スクリプトを少し書き直しました。

ここで何をしているのかを説明するために、少し分割します。最初に、いくつかの変数を宣言します。これを foreach ループで使用します。

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

次に、各ファイルを 1 つずつ取得し、次の場所に新しい名前を作成します。

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

そして、1 つのファイルのファイル情報を取得し、それを rename-item here にパイプします。

$File | Rename-Item -NewName $Newname

$ixx は単なる plusser であるため、foreach ループが実行されるたびにファイル番号を 1 ずつ増やします。

次に、$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
}
于 2014-09-29T12:42:55.617 に答える