フォルダ内のファイルの名前を一括で変更し、フォルダの名前の前に新しい名前を付けたいのですが。つまり、のファイルC:\house chores\
はすべて名前が変更されhouse chores - $old_name
ます。
フォルダ内のファイルの名前を一括で変更し、フォルダの名前の前に新しい名前を付けたいのですが。つまり、のファイルC:\house chores\
はすべて名前が変更されhouse chores - $old_name
ます。
回答:
オプション1:WindowsPowerShellを使用する
Windowsメニューを開きます。「PowerShell」と入力し、「WindowsPowerShell」コマンドウィンドウを開きます。
目的のファイルを含むフォルダに移動します。例:cd "C:\ house chores"注意:スペースが含まれる場合、アドレスには引用符 ""を組み込む必要があります。
'dir'を使用して、フォルダ内のすべてのファイルを表示できます。'|'を使用する 次のコマンドの「dir」の出力をパイプラインします。
注:「dir」は「Get-ChildItem」のエイリアスです。参照:wiki:コマンドレット。さらに機能を提供することができます。たとえば、「dir -recurse」は、すべてのファイル、フォルダー、およびサブフォルダーを出力します。
ある範囲のファイルのみが必要な場合はどうなりますか?
'dir |'の代わりに 使うことができます:
dir | where-object -filterscript {($_.Name -ge 'DSC_20') -and ($_.Name -le 'DSC_31')} |
ディレクトリ名をプレフィックスとして使用してバッチ名前を変更する場合:
dir | Rename-Item -NewName {$_.Directory.Name + " - " + $_.Name}
オプション2:コマンドプロンプトの使用
フォルダ内でShift +右クリックを押します:「ここでコマンドウィンドウを開く」を選択します
for %a in (*.*) do ren "%a" "prefix - %a"
ファイルが多い場合は、この前に「@echo off」コマンドを追加し、最後に「echoon」コマンドを追加するとよいでしょう。
do
)は機能しません—一部のファイルのfor
名前が変更された後、新しい名前でそれらを検索し、ファイル名の長さの制限に達するまでプレフィックスを何度も追加します。
ren was unexpected at this time.
、理由がわかりますか?
do
彼の答えにはその言葉が欠けています。それはあるべきですfor %a in (.) do ren "%a" "prefix - %a"
ここでの2つのPowershellの回答の問題は、名前変更プロセスの実行時に再利用されるディレクトリによっては、名前が変更される前と後の両方でスクリプトがファイルに対して実行される可能性があるため、プレフィックスが重複する可能性があることです。これを回避するには、次の-Exclude
オプションを使用するだけです。
Get-ChildItem -Exclude "house chores-*" | rename-item -NewName { "house chores-" + $_.Name }
これにより、プロセスが1つのファイルの名前を複数回変更するのを防ぐことができます。
フリーソフトウェアの「一括名前変更ユーティリティ」もうまく機能します(高度なタスクにも強力です)。ダウンロードとインストールには1分かかります。
元のWebサイトのスクリーンショットとチュートリアルを参照してください。
-
画像はクリエイティブコモンズライセンスの下でリリースする必要があるため、ステップバイステップのスクリーンショットを提供することはできません。また、ソフトウェアのスクリーンショットを所有していません。
免責事項:私は、上記のソフトウェア/会社とは一切関係がありません。私は自分の仕事のためにこの製品が好きでした、それはOPと同様の要件を満たしているので、お勧めします。
これは私にとってはうまくいきました。最初にファイル名を変更したいディレクトリにcdしてから、次のコマンドを実行します。
Get-ChildItem | rename-item -NewName { "house chores-" + $_.Name }
一部のアイテムでは、名前が変更されたアイテムが再び名前が変更されるため、髪を引き裂いていました(ファイル名の最大長に達しない限り、繰り返し)。これは、Get-ChildItemとdirの出力のパイピングの両方で発生していました。アルファベット順の変更により、名前が変更されたファイルが取得されたと思います。私はこの問題を次の方法で解決しました。
Get-ChildItem -Path . -OutVariable dirs
foreach ($i in $dirs) { Rename-Item $i.name ("<MY_PREFIX>"+$i.name) }
これにより、Get-ChildItemによって返された結果が変数$ dirsに「ロック」され、順序が変更されたり、その他の面白いビジネスが発生したりすることを恐れずに、結果を繰り返すことができます。
-Excludeを使用するためのDave.Guggのヒントもこの問題を解決するはずですが、これは別のアプローチです。名前を変更するファイルに、プレフィックスで使用されているパターンがすでに含まれている場合があります。
(免責事項:私はPowerShell n00bです。)
古い質問だとは思いますが、いろいろな答えからたくさんのことを学びましたが、関数として自分の解決策を思いつきました。これにより、特定のパターンに一致するすべてのファイルにプレフィックスとして親フォルダーが動的に追加されますが、そのプレフィックスがまだない場合に限ります。
function Add-DirectoryPrefix($pattern) {
# To debug, replace the Rename-Item with Select-Object
Get-ChildItem -Path .\* -Filter $pattern -Recurse |
Where-Object {$_.Name -notlike ($_.Directory.Name + '*')} |
Rename-Item -NewName {$_.Directory.Name + '-' + $_.Name}
# Select-Object -Property Directory,Name,@{Name = 'NewName'; Expression= {$_.Directory.Name + '-' + $_.Name}}
}
https://gist.github.com/kmpm/4f94e46e569ae0a4e688581231fa9e00
@
イン@echo on
は必要ありません。あなたはちょうど向きを変えました@echo off
。