我有一个文件目录,其中包含许多文件夹。在每个子文件夹中,我有各种各样的文件。我想浏览每个文件,重命名一些项目,并为其中一些项目添加扩展名。我正在使用Powershell来做到这一点。
我的文件名为“。”所有都需要用“_”替换,例如,“wrfprs_d02.03”应该是“wrfprs_d02_03”。我能够使用以下代码在一个文件夹中成功完成此操作:
dir | rename-item -NewName {$_.name -replace "wrfprs_d02.","wrfprs_d02_"}
之后,我做了那些替换,我想在一些文件上添加.grb扩展名,这些文件都以“w”开头,我能够在一个文件夹中执行以下操作:
Get-ChildItem | Where-Object {$_.Name -match "^[w]"} | ren -new {$_.name + ".grb"}
当我从一个文件夹退回并尝试在许多文件夹中迭代执行时,我的代码不起作用。我在一个名为“Z:\ Windows.Documents \ My Documents \ Test_data \ extracted”的目录中,其中包含我想要迭代的所有子文件夹。我使用以下代码:
$fileDirectory = "Z:\Windows.Documents\My Documents\Test_data\extracted"
foreach($file in Get-ChildItem $fileDirectory)
{
dir | rename-item -NewName {$_.name -replace "wrfprs_d02.","wrfprs_d02_"}
Get-ChildItem | Where-Object {$_.Name -match "^[w]"} | ren -new {$_.name + ".grb"}
}
关于我的问题是什么想法?
答案 0 :(得分:0)
不确定您获得了什么错误,但使用重命名项可能很挑剔。或者至少在我的经历中如此。
我没有问题地使用了以下内容。我的文件名不同,所以我用下划线替换了所有句号。如果文件以" W"开头。然后它改变了该文件的扩展名。
$FilePath = Get-ChildItem "Z:\Windows.Documents\My Documents\Test_data\extracted" -Recurse -File
foreach ($file in $FilePath)
{
$newName = $file.Basename.replace(".","_")
$New = $newName + $file.Extension
if($file.Name -match "^[w]")
{
Rename-Item $file.FullName -NewName "$($New).grb"
}
else
{
Rename-Item $file.FullName -NewName $New
}
}
希望有所帮助。
答案 1 :(得分:0)
因为在使用管道时$ _被替换为循环。我建议你一个新的代码:
$fileDirectory = "Z:\Windows.Documents\My Documents\Test_data\extracted"
Get-ChildItem $fileDirectory -recurse -file -filter "*.*" |
%{
#replace . by _
$NewName=$_.Name.Replace(".", "_")
#add extension grb if name start by w
if ($NewName -like "w*") {$NewName="$NewName.grb"}
#Add path file
$NewName=Join-Path -Path $_.directory -ChildPath $NewName
#$NewName
#rename
Rename-Item $_.FullName $NewName
}