フォルダーとサブフォルダー内のすべてのファイルの名前を小文字に変更する方法が必要です。
のみのウィンドウを使用してそれを行う方法があるかどうか知りたいのですが(XPまたは7)
ディレクトリに移動して次のコマンドを実行します。
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のパラメータ) Donotディレクトリ。 (a
はattribute
を表し、-
はnot
を表し、d
はdirectory
を表します)。rename "%f" "%f"
-ファイルの名前をそれ自身の名前に変更します。実際には、dir
コマンドと/l
の組み合わせによって小文字になります。spacetornado Renamer は、大量のファイルを一括して名前変更するWindowsプログラムです。テキストの検索や置換、特定の文字数の削除、大文字、小文字、または大文字への変更、すべてのファイル名の先頭または末尾へのテキストの追加(追加/追加)ができます。
Windows 7以降、これらのタスクには PowerShell を使用できます。
Get-ChildItem "C:\path\to\folder" -recurse |
Where {-Not $_.PSIsContainer} |
Rename-Item -NewName {$_.FullName.ToLower()}
- ルートフォルダを選択してください
- ルートフォルダおよびサブフォルダ内のすべてのファイルの名前が変更されました
- フォルダ名はWhere {-Not $_.PSIsContainer} |
で除外されます
これは、実際に動作するネイティブの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
私の個人的なお気に入りのバッチファイル名変更ユーティリティは CylogのWildRename です。他の多くの機能の中でも、ファイル名の大文字と小文字が変わる可能性があります。 WildRenameの最大の利点は、おそらく正規表現をサポートしていることです。
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
for /f "Tokens=*" %g in ('dir /l/b/a-d "%f"') do (rename "%f"\"%g" "%g")
内部のすべてのファイル名(または/a-d
スイッチを削除した場合はfileおよびdirectoryの名前)のリストを取得します。最初のループで見つかった絶対パスのそれぞれで、これらのファイルの名前を小文字に変換します。
C:\ Foo \TO.txt
C:\ Foo\Bar \LOWER.txt
C:\ Foo\Bar\Baz \CASE.txt
* rename
の2番目の引数は絶対パスではなくファイル名である必要があるため、2つのループが必要です(/s
スイッチで取得されるものと同じ)。
あなたは "文字置換"戦略を使うことができます...
set Name=%Name:A=a%
set Name=%Name:B=b%
set Name=%Name:C=c%
...など、A〜Zの文字についておそらくそれをFORループの形で実装することができます。
http://www.dostips.com/DtCodeCmdLib.php#Function.toLower を含めると呼び出すことができるはずです簡単な関数を提供しますバッチファイル。
そのため、バッチファイルにフォルダ/ファイル名を繰り返し処理させ、この関数を呼び出して名前の小文字バージョンを生成します。
Windowsでこれを行うのに最適なプログラムは、 Bulk Rename Utility です。マンツールです。正規表現を使ってファイルやフォルダの名前を変更することもできます。それはまた非常に素晴らしいですシェルの統合(あなたは右クリックでエクスプローラから実行することができます)を持っています。 64ビット版と32ビット版があります。
この質問に対する受け入れられた回答 は、 loftysnake によって、現在のディレクトリに対して機能しますが、サブフォルダは検索しません。 Sawny Suggested loftysnakeの答え を単純に変更して再帰的にしていますが、rename
name__コマンドではfilename1でドライブとパスを指定できます。 source)、filename2(宛先)は、単なるファイル名である必要があります。ヘルプ(/?
)メッセージを引用するには、
…コピー先ファイルに新しいドライブやパスを指定することはできません。
しかし、move
name__はrename
name__が機能しない場合に機能します。そのため、次のコマンドを使用してファイルの名前を再帰的に小文字に変更できます。
for /f "Tokens=*" %f in ('dir /l/b/a-d/s') do (move /y "%f" "%f")
なぜならMove
name__はディレクトリパスに対処できるからです。
上記のコマンドは、コマンドプロンプト(CMD.EXE
)に直接入力すると機能します。バッチ(.BAT
)ファイル内からこれを実行したい場合は、%
文字を2倍にする必要があります。
for /f "Tokens=*" %%f in ('dir /l/b/a-d/s') do (move /y "%%f" "%%f")
そして、括弧と/y
を省略して、do move …
と言うこともできます。
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
Powershell
ディレクトリに移動して実行します。
dir | Rename-Item -NewName { $_.Name.ToLowerInvariant() }
これが機能することを確認しました。ここで見つけた: http://www.hanselman.com/blog/PennyPinchingVideoMovingMyWebsitesImagesToTheAzureCDNAndUsingACustomDomain.aspx
再帰的な解決策これを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
)