ディレクトリ内に、「1050_14447_Letter Extension.pdf」などの命名規則のファイルが多数あります。2 番目のアンダースコア (2 番目のアンダースコアを含む) の前にあるすべての文字を削除する必要があります。したがって、新しいファイル名は「Letter Extension.pdf」になります。それに応じて単一のディレクトリの名前変更を繰り返すにはどうすればよいですか?
5 に答える
以下は、現在のディレクトリ内のすべての pdf ファイルの名前を変更し、ファイル名から先頭の数字またはアンダースコアをすべて削除する例です。
Get-ChildItem -Filter *.pdf | Rename-Item -NewName {$_.Name -replace '^[0-9_]+'}
正規表現に依存しないが、ファイルパスにアンダースコアがないことを前提とする別の方法を次に示します。
Get-ChildItem 'C:\path2files' | %{
Rename-Item $_.fullname $_.Name.Split("_")[2]
}
これは、ファイル名の任意の数のアンダースコアを処理し (パスを無視します)、新しい名前を生成するときに最後のアンダースコアまですべてをスキップします:-
Get-ChildItem 'C:\somedir' -Filter *.pdf |`
%{Rename-Item $_.Fullname ($_.Name.Split("_")|`
select -last 1)}
rename-item コマンドで -whatif スイッチを使用してテストできます。
gci 'R:\TECH' -Filter *.pdf|`
%{rename-item -whatif $_.Fullname ($_.Name.Split("_")|`
select -last 1)}
戻り値:
What if: ターゲット "アイテム: R:\TECH\38415_JOBS121121155535240.pdf 宛先: R:\TECH\JOBS121121155535240.pdf" で操作 "ファイル名の変更" を実行しています。What If: ターゲット "アイテム: R:\TECH\CHG38415_JOB_121112153717550.pdf 宛先: R:\TECH\121112153717550.pdf" で操作 "ファイル名の変更" を実行しています。What If: ターゲット "アイテム: R:\TECH\CHG38415_PREH_121113152548740.pdf 宛先: R:\TECH\121113152548740.pdf" で操作 "ファイル名の変更" を実行しています。What If: ターゲット "アイテム: R:\TECH\CHG38415_PREI_121113152600640.pdf 宛先: R:\TECH\121113152600640.pdf" で操作 "ファイル名の変更" を実行しています。What If: ターゲット "アイテム: R:\TECH\MCPTEST121125121201390.pdf 宛先: R:\TECH\MCPTEST121125121201390.pdf" で操作 "ファイル名の変更" を実行しています。仮に:対象の「アイテム: R:\TECH\PREHAND_38415_121121154127000.pdf 宛先: R:\TECH\121121154127000.pdf」で操作「ファイル名の変更」を実行しています。What If: ターゲット "アイテム: R:\TECH\PREIMP_38415_121121154140630.pdf 宛先: R:\TECH\121121154140630.pdf" で操作 "ファイル名の変更" を実行しています。
StringSolverの自動ツールを使用した別の方法を次に示します。インストール後、mv
コマンドは半自動化された決定手順で強化されます。
最初に次のことを行います。
mv "1050_14447_Letter Extension.pdf" "Letter Extension.pdf"
次に、一般化された変換とは何かを尋ねます。
mv --explain
それはあなたに次のようなことを教えてくれるでしょう
「.」で区切られた最初の単語から始まるファイル名とその拡張子の両方を連結します。
これはまだあなたが望むものではありません。必要なのは、次のような別の例を示すことです。
mv --explain "25771_144_ 17Your file_name.pdf" " 17Your file_name.pdf"
2 番目の「_」の後に始まるファイル名 + 定数文字列「.」+拡張子
だから今、あなたはできる:
mv
そして、それは変換を実行します。
免責事項: 私は学術目的でこの作品の共著者です。他の例はyoutubeで入手できます。
「1050_14447_Letter Extension.pdf」のような文字列を指定すると、次のようになります。
$foo = "1050_14447_Letter Extension.pdf"
$foo -replace '^.*_.*_(.*)$', '$1'