ファイル名に使えない文字
\/:*?"<>|
ファイル名に使えない文字を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コードに変換する方法を確認するために記事を書きました。確認の為なのでワンライナーで書いてみましたが、スクリプトで関数を作って使うべきでしょう。
コメント