フォルダーとサブフォルダー内のすべてのファイルの名前を小文字に変更する方法が必要です。
ウィンドウ(XPまたは7)のみを使用してそれを行う方法があるかどうかを知りたい
フォルダーとサブフォルダー内のすべてのファイルの名前を小文字に変更する方法が必要です。
ウィンドウ(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のパラメーター)ディレクトリーをリストしません。(を、を、を)。a
attribute
-
not
d
directory
rename "%f" "%f"
-ファイルの名前を独自の名前に変更します。この名前は実際にはdir
コマンドと/l
組み合わせによって小文字になります。for /f "Tokens=*" %f in ('dir /l/b/a-d/s') do (rename "%f" "%f")
(/ rをディレクトリに追加)。
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
/a-d
スイッチを削除すると、フォルダー名も小文字になります。
" D"') was unexpected at this time.
です。直接コマンドとして実行すると正常に機能しますが、バッチファイルとして実行すると機能しません。バッチファイルとしてどのように機能させるかはわかりませんが、この問題を解決することを考えました。
%D
変更する必要があります。%%D
%F
%%F
私の個人的なお気に入りのバッチファイル名変更ユーティリティは、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")
最初の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
ですか?完全に不要です。
echo %cd%
は、現在のフォルダーを絶対パスのリストに追加するためにあります。そして、cmd /c
なり&
、コマンドを結合する作業を。私は、Windowsバッチスクリプトに関するまったくの初心者です。より良い方法を知っているなら、気軽に答えを改善してください!
http://www.dostips.com/DtCodeCmdLib.php#Function.toLowerは、バッチファイルを含めて呼び出すことができる単純な関数を提供します。
そのため、バッチファイルでフォルダー/ファイル名を反復処理し、この関数を呼び出して名前の小文字バージョンを生成します。
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
Windowsでこれを行うための最適なプログラムは、一括名前変更ユーティリティです。マンツールです。正規表現を使用して、ファイルやフォルダの名前を変更することもできます。また、シェルとの統合が行われているため(右クリックでエクスプローラーから実行できます)、とても便利です。64ビットおよび32ビットバージョンが利用可能です。
loftysnakeによるこの質問に対する受け入れられた答えは、現在のディレクトリで機能しますが、サブフォルダを検索しません。
Sawnyは、loftysnakeの答え
を単純に変更して再帰的にすることを提案しましたが、rename
コマンドではfilename1(ソース)でドライブとパスを指定できますが、filename2(宛先)は単なるファイル名でなければならないため、動作しません。ヘルプ(/?
)メッセージを引用するには、
…宛先ファイルに新しいドライブまたはパスを指定することはできません。
ただしmove
、rename
機能しない場所でも機能するため、このコマンドを使用して、ファイル名を小文字に再帰的に変更できます。
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
が、今はそれを見つけることができない。
パワーシェル
dirに移動して実行します:
dir | Rename-Item -NewName { $_.Name.ToLowerInvariant() }
これが機能することを確認しました。ここにあります:http : //www.hanselman.com/blog/PennyPinchingVideoMovingMyWebsitesImagesToTheAzureCDNAndUsingACustomDomain.aspx