2

このPowershellスクリプトに何か問題があると思うかどうか誰かに教えてもらえますか。

Dir | 
where {$_.extension -eq ".txt"} | 
Rename-Item –NewName { $_.name –replace “.“,”-” }

現在のディレクトリ内のテキストファイルごとに、ファイル名のすべてのピリオドをハイフンに置き換えようとしています。よろしくお願いします。

4

3 に答える 3

8

他の人が言ったように、-replace正規表現を使用します(「。」は正規表現の特殊文字です)。ただし、彼らのソリューションはファイル拡張子を忘れており、実際に削除しています。元。「test.txt」は「test-txt」(拡張子なし)になります。より良い解決策は次のとおりです。

dir -Filter *.txt | Rename-Item -NewName { $_.BaseName.replace(".","-") + $_.Extension }

これはまた、 -Filter を使用して、「.txt」で終わるファイルのみを選択します。これは、where と比較するよりも高速です。

于 2013-01-26T22:43:53.097 に答える
7

-replaceは正規表現で動作します。エスケープする必要があります'。':

rename-item -NewName { $_.Name -replace '\.', '-' }

そうしないと、「----」という名前になってしまいます。

于 2013-01-26T22:02:16.923 に答える
1

PowerShell のファイル オブジェクトの名前プロパティは文字列型です。
つまり、replace次のような静的文字列メソッドを使用して、正規表現の予約文字を気にしないこともできます。

dir | ? { $_.extension -eq ".txt" } | rename-item -newname { $_.name.replace(".","-") }
于 2013-01-26T22:09:40.110 に答える