このPowershellスクリプトに何か問題があると思うかどうか誰かに教えてもらえますか。
Dir |
where {$_.extension -eq ".txt"} |
Rename-Item –NewName { $_.name –replace “.“,”-” }
現在のディレクトリ内のテキストファイルごとに、ファイル名のすべてのピリオドをハイフンに置き換えようとしています。よろしくお願いします。
このPowershellスクリプトに何か問題があると思うかどうか誰かに教えてもらえますか。
Dir |
where {$_.extension -eq ".txt"} |
Rename-Item –NewName { $_.name –replace “.“,”-” }
現在のディレクトリ内のテキストファイルごとに、ファイル名のすべてのピリオドをハイフンに置き換えようとしています。よろしくお願いします。
他の人が言ったように、-replace
正規表現を使用します(「。」は正規表現の特殊文字です)。ただし、彼らのソリューションはファイル拡張子を忘れており、実際に削除しています。元。「test.txt」は「test-txt」(拡張子なし)になります。より良い解決策は次のとおりです。
dir -Filter *.txt | Rename-Item -NewName { $_.BaseName.replace(".","-") + $_.Extension }
これはまた、 -Filter を使用して、「.txt」で終わるファイルのみを選択します。これは、where と比較するよりも高速です。
-replaceは正規表現で動作します。エスケープする必要があります'。':
rename-item -NewName { $_.Name -replace '\.', '-' }
そうしないと、「----」という名前になってしまいます。
PowerShell のファイル オブジェクトの名前プロパティは文字列型です。
つまり、replace
次のような静的文字列メソッドを使用して、正規表現の予約文字を気にしないこともできます。
dir | ? { $_.extension -eq ".txt" } | rename-item -newname { $_.name.replace(".","-") }