循环浏览子文件夹以重命名Powershell中的文件
我有一个包含许多文件夹的文件目录。在每个子文件夹中,我都有各种各样的文件。我想浏览每个文件,重命名其中的一些项目,并为其中的一些项目添加扩展名。我正在使用Powershell来执行此操作 我有带“.”的文件名,所有文件名都需要替换为“\u”,例如,“wrfprs\u d02.03”应该是“wrfprs\u d02\u 03”。我能够使用以下代码在一个文件夹中成功完成此操作:循环浏览子文件夹以重命名Powershell中的文件,powershell,foreach,rename,Powershell,Foreach,Rename,我有一个包含许多文件夹的文件目录。在每个子文件夹中,我都有各种各样的文件。我想浏览每个文件,重命名其中的一些项目,并为其中的一些项目添加扩展名。我正在使用Powershell来执行此操作 我有带“.”的文件名,所有文件名都需要替换为“\u”,例如,“wrfprs\u d02.03”应该是“wrfprs\u d02\u 03”。我能够使用以下代码在一个文件夹中成功完成此操作: dir | rename-item -NewName {$_.name -replace "wrfprs_d02.","w
dir | rename-item -NewName {$_.name -replace "wrfprs_d02.","wrfprs_d02_"}
$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"}
}
之后,我进行了这些替换,我想在一些文件上添加.grb扩展名,这些文件恰好都以“w”开头,我可以在一个文件夹中通过以下方式完成此操作:
Get-ChildItem | Where-Object {$_.Name -match "^[w]"} | ren -new {$_.name + ".grb"}
当我从一个文件夹后退并尝试在多个文件夹中迭代执行时,我的代码无法工作。我在一个名为“Z:\Windows.Documents\My Documents\Test\u data\extracted”的目录中,该目录包含我要迭代的所有子文件夹。我正在使用以下代码:
dir | rename-item -NewName {$_.name -replace "wrfprs_d02.","wrfprs_d02_"}
$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"}
}
关于我的问题有什么想法吗?不确定您遇到了什么错误,但使用重命名项可能会很挑剔。至少在我的经验中是这样 我使用了下面的方法,没有问题。我的文件名不同,所以我用下划线替换了所有句点。如果文件以“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
}
}
希望有帮助 因为当您使用管道时,$\被替换为循环。我向你提出一个新的准则:
$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
}
谢谢那密码几乎对我有用。由于我正在处理的特定文件,我做了一些修改。我看到Powershell窗口中的文件名从“.”变为“uu”,但当我打开Windows资源管理器时,句点实际上并没有变为下划线。虽然已经添加了扩展,但该部分已解决!您是对的,我们进行了更改,但从未实际保存这些更改。我现在用一个合适的例子来更新它。如果没有,希望这有助于让我知道。我收到以下代码错误:Get ChildItem:找不到与参数名称“file”匹配的参数。您的powershell版本是什么?