如何根据第 2 行 [POWERSHELL] 的内容重命名目录中的所有文件

How to rename all files in directory based on contents of the 2nd line [POWERSHELL]

如何让这个脚本递归读取目录中每个文件的文本的第二行,并根据第2行的内容重命名文件本身?

此脚本是在此处找到的: Renaming text files based on the first word in the file in Powershell

该脚本仅使用第一行文本重命名文件夹中的第一个文件,以下是文件中前两行文本: 样本名称 O123456.NT;想要重命名为:O14294 (CXP-14294).NT

第 1 行:%

第 2 行:O14294 (CXP-14294)

... ...其余文件数百行等

$files = Get-ChildItem *.NT


$file_map = @()
foreach ($file in $files) {
    $file_map += @{
        OldName = $file.Fullname
        NewName = "{0}.NT" -f $(Get-Content $file.Fullname| select -First 2)
    }
}

$file_map | % { Rename-Item -Path $_.OldName -NewName $_.NewName } 

这可以通过使用名称而不是全名来更简洁地完成。从文件中获取第二行的技巧是跳过一行,然后只取一行。

所以:

    Get-ChildItem *nt |
    ForEach-Object{
        $oldname = $_.name;
        $newname = "{0}.nt" -f $(Get-Content $oldname | Select-Object -Skip 1 -First 1);
        Rename-Item -Path $oldname -NewName $newname
    }

另一个选项,通过索引获取第二行:

$files = (Get-ChildItem -path G:\Test -Filter *.ng).FullName

foreach ($File in $Files) {

  $MyName = (get-content -Path "$File")[1] + ".ng"
  Rename-Item -Path "$File" -NewName "$MyName"

}

HTH