如何根据第 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
如何让这个脚本递归读取目录中每个文件的文本的第二行,并根据第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