Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
循环浏览子文件夹以重命名Powershell中的文件_Powershell_Foreach_Rename - Fatal编程技术网

循环浏览子文件夹以重命名Powershell中的文件

循环浏览子文件夹以重命名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

我有一个包含许多文件夹的文件目录。在每个子文件夹中,我都有各种各样的文件。我想浏览每个文件,重命名其中的一些项目,并为其中的一些项目添加扩展名。我正在使用Powershell来执行此操作

我有带“.”的文件名,所有文件名都需要替换为“\u”,例如,“wrfprs\u d02.03”应该是“wrfprs\u d02\u 03”。我能够使用以下代码在一个文件夹中成功完成此操作:

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版本是什么?