ファイル名を小文字に一括変更する方法はありますか?


63

フォルダーとサブフォルダー内のすべてのファイルの名前を小文字に変更する方法が必要です。

ウィンドウ(XPまたは7)のみを使用してそれを行う方法があるかどうかを知りたい


Windowsは、unixのように大文字と小文字を区別しません。多分、なぜこれが必要なのかと言ったら、それは問題の解決に役立つでしょう。
ルーク

1
@Idigas。申し訳ありませんが、NTFS以降、ファイル名では大文字と小文字が区別されます。support.microsoft.com/kb/100625
DaveParillo 09年

ただ素晴らしい。悪い考えを取り、それをさらに広めてください。誰かがファイルを送信して太った指を間違えたときのサポートの悪夢は、彼らが「Answers.dat」を送信し、着信プロセスが「answers.dat」を期待することを意味します。これら2つの名前が「異なる」と見なされる正当な理由はありません。
デイビッド

2
@David、たとえばJavaでは、実際には大文字と小文字が区別されるファイル名が必要です。大文字と小文字を区別しないファイルシステムでは、多くの問題が発生する可能性があります。
アルジャン

10
私はこれが古いことを知っていますが、ここで誤解を明確にしたかったです。NTFSは大文字と小文字を区別しますが、Windows OSは区別しません!
ジオ

回答:


122

ディレクトリに移動し、次のコマンドを実行します。

for /f "Tokens=*" %f in ('dir /l/b/a-d') do (rename "%f" "%f")

誰かが修正/改善したい場合の内訳は次のとおりです。

  • for /f -すべての行に対して
  • "Tokens=*" -すべての行の各アイテムを処理します。
  • %f in (...)- %fは、すべてのアイテムの変数名です。
  • dir -ディレクトリ内のすべてのファイルとサブディレクトリをリストします。
  • /l- (dirのパラメーター)小文字を使用します。
  • /b- (dirのパラメーター)ファイル/ディレクトリ名のみ、サイズなし、ヘッダーなしの裸形式を使用します。
  • /a-d- (dirのパラメーター)ディレクトリーをリストしませんaattribute-notddirectory
  • rename "%f" "%f"-ファイルの名前を独自の名前に変更します。この名前は実際にはdirコマンドと/l組み合わせによって小文字になります。

7
再帰バージョン:for /f "Tokens=*" %f in ('dir /l/b/a-d/s') do (rename "%f" "%f")(/ rをディレクトリに追加)。
Sawny

3
これはただのブリリアントある
Shirガンズ

4
再帰バージョンは私にとっては機能しませんでした-renameはコマンドが無効な形式であると不平を言いました。/ sにより、2番目のファイルが絶対パスとしてリストされ、ファイル名展開(%〜nxf)を使用すると、元の大文字のファイル名が得られました。手動で再帰的に終了しました。
Dogmatixed

3
これはとてもいい答えです。要するに、外部プログラムは必要なく、素敵で小さなコマンドも、バッチファイルの複雑さも必要ありません。
ジェフウィルバート

2
小文字から大文字に変更することはできますか?
チャッキー

18

spacetornado Renamerは、バッチで大量のファイルの名前を変更するWindowsプログラムです。テキストの検索と置換、特定の文字数の削除、大文字小文字の大文字小文字の変更、およびすべてのファイル名の先頭または末尾へのテキストの追加(追加/追加)ができます。

ここに画像の説明を入力してください


1
反対票の理由を教えてください。
-joe

5
残念ながら、人々はめったに説明しません:/
グヌーピ2009年

7
OPが追加のソフトウェアなしで機能するソリューションを望んでいたからだと思います。一部の人々は復venのダウン票を処理する傾向があるため、ダウン票は説明されなかったと思います。
innaM

GUIは少しファンキーですが、私が見た他のいくつかの名前変更よりも優れた仕事をします。
jcollum

1
Linux FTPサーバーからファイルをクリーンアップするために再帰的な名前変更が必要になったときに、それがしたことをしました...しかし、適切に機能する前に管理者として実行する必要がありました。古いメンテナンスされていないプログラムのように感じます:)
ネルソン

12

Windows 7以降では、これらのタスクにPowerShellを使用できます

Get-ChildItem "C:\path\to\folder" -recurse | 
  Where {-Not $_.PSIsContainer} | 
  Rename-Item -NewName {$_.FullName.ToLower()}

-ルートフォルダーを選択します
- ルートフォルダーとサブフォルダー内のすべてのファイルの
名前が変更されます-フォルダー名は Where {-Not $_.PSIsContainer} |


7

以下は、実際に機能するネイティブcmd.exeコマンドのみを使用した適切な再帰コマンドラインソリューションです。私はそれが可能な限り単純なネイティブソリューションだと思います:

for /r %D in (.) do @for /f "eol=: delims=" %F in ('dir /l/b/a-d "%D"') do @ren "%D\%F" "%F"

ネイティブのcmd.exeコマンドを超えたい場合、別のオプションは、名前を大文字または小文字に変換するオプションをサポートするJREN.BAT正規表現の名前変更ユーティリティです。XP以降のWindowsマシンでネイティブに実行される純粋なスクリプト(ハイブリッドJScript /バッチ)です。サードパーティのexeファイルは必要ありません。完全なドキュメントが組み込まれています-コマンドラインからを介してアクセスするjren /?jren /??、ページ出力が必要な場合。

JRENを使用すると、再帰的なソリューションは次のように簡単です。

jren "^" "" /s /l

1
よく働く。参考までに/a-dスイッチを削除すると、フォルダー名も小文字になります。
キース

バッチファイルとして保存し、system32にポップして、1つのコマンドでいつでも実行できるようにしました。結果は次のとおり" D"') was unexpected at this time.です。直接コマンドとして実行すると正常に機能しますが、バッチファイルとして実行すると機能しません。バッチファイルとしてどのように機能させるかはわかりませんが、この問題を解決することを考えました。
ドン・カレン

1
@DonCullen-バッチスクリプト内でFORを使用する場合、FOR変数パーセントを2倍にする必要があるのは標準構文です。したがって、バッチスクリプト内にコマンドを配置する場合は、に%D変更する必要があります。%%D%F%%F
-dbenham

毎日新しいことを常に学んでいます。ありがとう!
ドン・カレン

6

私の個人的なお気に入りのバッチファイル名変更ユーティリティは、CylogのWildRenameです。他の多くの機能の中で、ファイル名の大文字と小文字を変更できます。WildRenameの最大の利点は、おそらく正規表現をサポートしていることです!


10秒でインストールした後、これは適切なアプリです。リモートフォルダーを再帰的に構成し、名前を変更しました(便宜上マッピングされています)。
マッテオコンタ

5

受け入れられた回答の「再帰的」バージョン(動作します*)

for /f "Tokens=*" %f in ('cmd /c "echo %cd%& dir /l/b/ad/s"') do (for /f "Tokens=*" %g in ('dir /l/b/a-d "%f"') do (rename "%f"\"%g" "%g"))


最初のループ

for /f "Tokens=*" %f in ('cmd /c "echo %cd%& dir /l/b/ad/s"')

現在のディレクトリ(それを含む)内のすべてのディレクトリの絶対パスのリストを取得します。

C:\ Foo>

  • C:\ Foo \ TO.txt

  • C:\ Foo \ Bar \ LOWER.txt

  • C:\ Foo \ Bar \ Baz \ CASE.txt


2番目のループ

for /f "Tokens=*" %g in ('dir /l/b/a-d "%f"') do (rename "%f"\"%g" "%g")

最初のloopで見つかった各絶対パス内のすべてのファイル名(または、スイッチを削除した場合はファイル名ディレクトリ名)のリストを取得し、これらのファイルの名前を小文字に変換します。/a-d

  • C:\ Foo \ TO.txt

  • C:\ Foo \ Bar \ LOWER.txt

  • C:\ Foo \ Bar \ Baz \ CASE.txt


* 2番目の引数renameファイル名であり、絶対パス/sスイッチによって取得されたもの)ではないため、2つのループが必要です。


なぜcmd /c "echo %cd%& 最初に持っているのforですか?完全に不要です。
DavidPostill

@DavidPostill echo %cd%は、現在のフォルダーを絶対パスのリストに追加するためにあります。そして、cmd /cなり&、コマンドを結合する作業を。私は、Windowsバッチスクリプトに関するまったくの初心者です。より良い方法を知っているなら、気軽に答えを改善してください!
wc.matteo

初心者にとっては素晴らしい仕事です。あなたのものは、実際に機能する最初のネイティブcmd.exeコマンドラインソリューションでしたが、名前がスペースまたはセミコロンで始まる場合は失敗します。受け入れられた答えにも同じ問題があります。先頭のスペースまたはセミコロンでも機能する簡単な回答については、私の回答を参照しください。
dbenham

これを変更して、下位を上限に変換できますか?
リシャフ

3

「文字置換」戦略を使用できます...

set Name=%Name:A=a%
set Name=%Name:B=b%
set Name=%Name:C=c%

...など、A〜Zの文字の場合。おそらくFORループの形式で実装できます。



1

http://windowsitpro.com/articles/index.cfm?articleid=81612から:

標準コマンドのみを使用して、LwrCase.batおよびLwrCase_Folder.batのスクリプトを作成し、ファイル名を小文字に変更するか、フォルダー内のすべてのファイル名を小文字に変更しました。

ファイル名を小文字に変更するには、次を使用します。

[call] LwrCase FullyQualifiedFileName

FullyQualifiedFileNameは、名前を変更する完全修飾ファイル名です。

ディレクトリ内のすべてのファイル名を変更するには、次を使用します。

[call] LwrCase_Folder FullyQualifiedDirectoryName [/S]

ここで、FullyQualifiedDirectoryNameは完全修飾フォルダーパスであり、/ Sはすべてのサブフォルダーのファイル名も変更するオプションのパラメーターです。

注:LwrCase.batは、DIRコマンドの/ Lスイッチを使用して、小文字の名前を返します。

LwrCase.batの内容:

@echo off
if {%1}=={} @echo Syntax: LwrCase FullyQualifiedFileName&goto :EOF
if not exist %1 @echo LwrCase - %1 NOT found.&goto :EOF
setlocal
for /f "Tokens=*" %%a in ('@echo %~a1') do (
 set file=%%a
)
if /i "%file:~0,1%" EQU "d" @echo LwrCase - %1 is NOT a file.&endlocal&goto :EOF
for /f "Tokens=*" %%f in ('dir %1 /L /b /a /a-d') do (
 Rename %1 "%%f"
)
endlocal

LwrCase_Folder.batに以下が含まれます。

@echo off
if {%1}=={} @echo Syntax: LwrCase_Folder FullyQualifiedDirectoryName&goto :EOF
if not exist %1 @echo LwrCase_Folder - %1 NOT found.&goto :EOF
setlocal
for /f "Tokens=*" %%a in ('@echo %~a1') do (
 set folder=%%a
)
if /i "%folder:~0,1%" NEQ "d" @echo LwrCase_Folder - %1 is NOT a folder.&endlocal&goto :EOF
pushd %1
set sw=/B /A /A-D
if /i {%2}=={/S} set sw=%sw% %2
for /f "Tokens=*" %%f in ('dir %sw%') do (
 call LwrCase "%%f"
)
popd
endlocal

1

Windowsでこれを行うための最適なプログラムは、一括名前変更ユーティリティです。マンツールです。正規表現を使用して、ファイルやフォルダの名前を変更することもできます。また、シェルとの統合が行われているため(右クリックでエクスプローラーから実行できます)、とても便利です。64ビットおよび32ビットバージョンが利用可能です。


1

loftysnakeによるこの質問に対する受け入れられた答えは、現在のディレクトリで機能しますが、サブフォルダを検索しません。  Sawny、loftysnakeの答え単純に変更して再帰的にすること提案しましが、renameコマンドではfilename1(ソース)でドライブとパスを指定できますが、filename2(宛先)は単なるファイル名でなければならないため、動作しません。ヘルプ(/?)メッセージを引用するには、

…宛先ファイルに新しいドライブまたはパスを指定することはできません。

ただしmoverename機能しない場所でも機能するため、このコマンドを使用して、ファイル名を小文字に再帰的に変更できます。

for /f "Tokens=*" %f in ('dir /l/b/a-d/s') do (move /y "%f" "%f")

Moveディレクトリパスに対処できることが判明したためです。

上記のコマンドは、コマンドプロンプト(CMD.EXE)に直接入力すると機能します。バッチ(.BAT)ファイル内からこれを行うには、%文字を2倍にする必要があります。

for /f "Tokens=*" %%f in ('dir /l/b/a-d/s') do (move /y "%%f" "%%f")

そして、あなたはおそらく括弧を省略し、/y ちょうど言うことができますdo move …


他の人がすでに投稿した情報を再投稿する場合は、元の著者を特定し、その投稿にリンクする必要があります。
スコット

申し訳ありませんが、機能しないmove場所でrename機能していることを指摘していmoveました。ここでコマンドの使用を提案したのは私だけだと思います。私は単に@loftysnakeと@sawnyの提案を取り入れて、うまくいけばそれらを少し改善したことを願っています。
エイドリアン

それは変だ; 他の誰かが言及したと思ったmoveが、今はそれを見つけることができない。
スコット

0

再帰的なソリューション。これをrecursiverename.cmdファイルに入れます。

for /f "Tokens=*" %%f in ('dir /l/b/a-d') do (rename "%%f" "%%f")
for /r /d %%x in (*) do (
    pushd "%%x"
    for /f "Tokens=*" %%f in ('dir /l/b/a-d') do (rename "%%f" "%%f")
    popd
)

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