フォルダ内の複数のファイルの名前を変更し、プレフィックスを追加します(Windows)


81

フォルダ内のファイルの名前を一括で変更し、フォルダの名前の前に新しい名前を付けたいのですが。つまり、のファイルC:\house chores\はすべて名前が変更されhouse chores - $old_nameます。

回答:


146

オプション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」コマンドを追加するとよいでしょう。


1
マイナーなニトピック:@イン@echo onは必要ありません。あなたはちょうど向きを変えました@echo off
iInspectable 2014年

9
オプション2(欠落しているものを追加した後do)は機能しません—一部のファイルのfor名前が変更された後、新しい名前でそれらを検索し、ファイル名の長さの制限に達するまでプレフィックスを何度も追加します。
Sergey Vlasov 2014年

2
オプション2を使用するとren was unexpected at this time.、理由がわかりますか?
NULLポインタ

4
@billgatesdo彼の答えにはその言葉が欠けています。それはあるべきですfor %a in (.) do ren "%a" "prefix - %a"
Christiaan Westerbeek 2014

2
@SergeyVlasovこれは両方のオプションで発生します。これを回避する唯一の方法は、名前を元の名前の上に配置することです。または、名前を変更した後、別のフォルダに移動します。
デビッドスターキー2014

41

ここでの2つのPowershellの回答の問題は、名前変更プロセスの実行時に再利用されるディレクトリによっては、名前が変更される前と後の両方でスクリプトがファイルに対して実行される可能性があるため、プレフィックスが重複する可能性があることです。これを回避するには、次の-Excludeオプションを使用するだけです。

Get-ChildItem -Exclude "house chores-*" | rename-item -NewName { "house chores-" + $_.Name }

これにより、プロセスが1つのファイルの名前を複数回変更するのを防ぐことができます。


1
_ $を含む、あなたの提案にあまり具体的な例を追加することを検討してくださいDirectory.Name。
ofer.sheffer

18

フリーソフトウェアの「一括名前変更ユーティリティ」もうまく機能します(高度なタスクにも強力です)。ダウンロードとインストールには1分かかります。

元のWebサイトのスクリーンショットチュートリアルを参照してください。

-

画像はクリエイティブコモンズライセンスの下でリリースする必要があるため、ステップバイステップのスクリーンショットを提供することはできません。また、ソフトウェアのスクリーンショットを所有していません。

免責事項:私は、上記のソフトウェア/会社とは一切関係がありません。私は自分の仕事のためにこの製品が好きでした、それはOPと同様の要件を満たしているので、お勧めします。


ある時点で自分で使い始めました。スレッドに何かを追加するための+1。
ofer.sheffer 2014年

@ ofer.shefferありがとうございます。

この答えは話題外です!-1
マルコデマイオ2015年

1
@MarcoDemaioフィードバックをありがとう。OPはタスクを実行したいと考えており、リンクされたソフトウェアを使用すると簡単に実行できます。私は、ソリューションの複雑さはそれをより適切にするものではないと信じています。

@GopalAggarwal:申し訳ありませんが、彼の質問「フォルダー内のファイルの名前をバッチで変更したい」を読んだのですが、彼はWindowsのバッチファイルを探していると思いました。-1を削除しました。
マルコデマイオ2015年

9

これは私にとってはうまくいきました。最初にファイル名を変更したいディレクトリにcdしてから、次のコマンドを実行します。

Get-ChildItem | rename-item -NewName { "house chores-" + $_.Name }

5
これにより、ファイル名がWindowsの制限に達するまで無限ループが発生します。代わりに、@ Dave.Guggの応答を使用してください:stackoverflow.com/a/372​​79979/2179408
Rob Bell

7

一部のアイテムでは、名前が変更されたアイテムが再び名前が変更されるため、髪を引き裂いていました(ファイル名の最大長に達しない限り、繰り返し)。これは、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です。)


2

@ ofer.shefferの回答に基づいて、このコマンドは一括名前変更を行い、現在の日付をファイル名に追加します。つまり、「file.txt」は、現在のフォルダ内のすべてのファイルに対して「20180329--file.txt」になります。

for %a in (*.*) do ren "%a" "%date:~-4,4%%date:~-7,2%%date:~-10,2% - %a"

2

@ ofer.shefferの回答に基づくと、これは接辞を追加するためのCMDバリアントです(これは問題ではありませんが、接辞を検索した場合、このページは依然としてGoogleの検索結果の第1位です)。拡張機能のため、少し異なります。

for %a in (*.*) do ren "%~a" "%~na-affix%~xa"

「-affix」の部分は変更できます。


0

古い質問だとは思いますが、いろいろな答えからたくさんのことを学びましたが、関数として自分の解決策を思いつきました。これにより、特定のパターンに一致するすべてのファイルにプレフィックスとして親フォルダーが動的に追加されますが、そのプレフィックスがまだない場合に限ります。

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.