0

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

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

[レポート]_first_day_of_month_01_(generated_by_powershell)_[repnbr1].txt

[] とそれらの間のすべて、() とそれらの間のすべてを削除し、_ もすべて削除することに戸惑いました。望ましい結果は次のようなファイル名です。

月の最初の日 01.txt

これまでのところ、以下の解決策を試してみましたが、役に立ちませんでした。ファイルが存在するディレクトリからこれらをそれぞれ実行しました。

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

このように一度に1セットずつやってもうまくいかないので:

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

このタスクを達成しようとしている方法には、固有の欠陥があると思います。そうは言っても、move-item ソリューションを使用するよりも、Rename-Item コマンドレットを使用することをお勧めします。

4

1 に答える 1

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

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

ここで動作する正規表現を参照してください: Regex101

于 2016-06-17T01:05:46.603 に答える