2017-02-21 13 views
0

私はその中に多くのフォルダを含むファイルディレクトリを持っています。これらの各サブフォルダの中には、さまざまなファイルがあります。私は各ファイルを調べ、いくつかの項目の名前を変更し、それらの一部に拡張機能を追加したいと思います。私はこれを行うためにPowershellを使用しています。Powershellのファイルの名前を変更するサブフォルダを循環

ファイル名に「。」が付いています。例えば、 "_"で置き換える必要がある場合、 "wrfprs_d02.03"は "wrfprs_d02_03"でなければなりません。私は正常に次のコードで1つのフォルダにそれを行うことができました:

dir | rename-item -NewName {$_.name -replace "wrfprs_d02.","wrfprs_d02_"} 

私はそれらの置換を行い、後に、私は「すべてはで始まるに起こるいくつかのファイルへの.grbの拡張機能を追加したいです「ワット、そして私は一つのフォルダの中にそれを行うことができた:私は戻って一つのフォルダからのステップと多くのフォルダの中に反復してそれを実行しようとすると

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

あなたはどのようなエラーが発生しているのかわかりませんが、rename-itemを使用すると気になることがあります。少なくとも私の経験ではそうです。

私は次のことを問題なく使用しました。私のファイル名は異なっていたので、すべてのピリオドをアンダースコアに置き換えました。ファイルが "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 
    } 
} 

希望します。

+0

ありがとう!そのコードはほとんど私のために働いた。私は作業している特定のファイルのためにいくつかの変更を加えました。ファイル名が変更されています。 " Powershellウィンドウで "_"に設定しますが、Windowsエクスプローラを開くと、ピリオドは実際には下線に変わりません。拡張機能が追加されましたので、その部分が解決されました! – Amelia

+0

あなたは正しいです、私たちは変更を加えましたが、実際には変更を保存しませんでした。私はそれを今適切な例で更新します。うまくいけば、これは私に知らせてくれます。 – JonnyBoy

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 

} 
+0

このコードで次のエラーが表示されます。 Get-ChildItem:パラメータ名 'file'に一致するパラメータが見つかりません。 – Amelia

+0

あなたのパワーシェルバージョンは何ですか? – Esperento57

関連する問題