Windows10ファイル名に使えない文字と重複しないファイル名を取得

千代かみ御見本 コンピュータ
出典:国立国会図書館「NDLイメージバンク」 (https://rnavi.ndl.go.jp/imagebank/)

ファイル名に使えない文字

\/:*?"<>|

ファイル名に使えない文字を16進数に変換するPowerShellコマンド

[regex]::Replace("ファイル\/:*?""<>|.txt", "[\\/:\*\?""<>|]", {"%"+([byte][char]$args.groups[0].value).ToString("x")})

結果

ファイル%5c%2f%3a%2a%3f%22%3c%3e%7c.txt

重複しないファイル名を取得

"./new.txt"|%{$d=Split-Path $_;$f=[System.IO.Path]::GetFileNameWithoutExtension($_);$e=[System.IO.Path]::GetExtension($_);$i=1;while(Test-Path $_){$_ =Join-Path $d ("{0}({1}){2}"-f $f, $i++, $e)};$_}

結果
new.txtが既に存在する場合.\new(1).txt()内の数値を増やすことで重複しないファイル名を返し増します。

最後に

正規表現でマッチした文字列の置換で、置き換える文字列を動的に生成する方法と、文字をAsciiコードに変換する方法を確認するために記事を書きました。確認の為なのでワンライナーで書いてみましたが、スクリプトで関数を作って使うべきでしょう。

コメント