0

私はpowershellスクリプトを使ってファイル名からいくつかの特殊文字を削除する方法を探しています。Powershellファイル名から特殊文字を削除する

私のファイル名は次のようになります。

[レポート] _first_day_of_month_01_(generated_by_powershell)_ [repnbr1]私は削除の上に不可解されている

.txtの[]と、それらの間のすべてのもの、()、すべてをこれらの、および所望の結果は次のようになり、ファイル名であることで、同様にすべての_さんを削除する間:これまで

01.txt月の

初日、私は無駄に以下の解決策を試してみました。私はファイルが存在するディレクトリからこれらのファイルを実行しました。私はこのタスクを達成しようとしています方法に固有の欠陥があるとし

Get-ChildItem -Path .\ -Filter *.mkv | %{ 
$Name = $_.Name 
$NewName = $Name -Replace "(\s*)\(.*\)",'' 
Rename-Item -Path $_ -NewName $NewName 
} 

:それは私がしようとしても動作し、このような時に1セットを行いませんので

Get-ChildItem -Path .\ -Filter *.mkv | %{ 
$Name = $_.Name 
$NewName = $Name -Replace "(\s*)\(.*\)",'' 
$NewName2 = $NewName -Replace "[\s*]\[.*\]",'' 
$NewName3 = $NewName2 -Replace "_",' ' 
Rename-Item -Path $_ -NewName $NewName3 
} 

。つまり、Move-Itemソリューションを使用するのではなく、Rename-Itemコマンドレットを使用することをお勧めします。

答えて

1
gci *.txt | Rename-Item -NewName {$_ -replace '_*(\[.*?\]|\(.*?\))_*' -replace '_+', ' '} 

名前変更は[text]または(text)ブロックと一致し、何に置き換える正規表現です。括弧と括弧は、文字通り一致させるために正規表現でエスケープする必要があります。オプションの先頭または末尾のアンダースコアと一致させると、[Report]_または_[repnbr1]が名前の先頭または末尾に_のまま残るため、先頭と末尾のスペースになるので迷惑です。次に、残りのアンダースコアをスペースで置き換えます。

正規表現を参照してください:Regex101

+0

ありがとうございます。限られた成功率でこれに似た解決策を試しましたが、これは100%トリックでした!ありがとうございました! – GreatMagusKyros

関連する問題