파일 이름을 소문자로 일괄 변경하는 방법이 있습니까?


63

폴더와 하위 폴더의 모든 파일 이름을 소문자로 바꾸는 방법이 필요합니다.

Windows (XP 또는 7) 사용하여 수행 할 수있는 방법이 있는지 알고 싶습니다.


윈도우는 유닉스처럼 작은 대문자와 대문자를 구별하지 않습니다. 어쩌면, 왜 이것이 필요한지, 문제를 해결하는 데 도움이 될 것입니다.
Rook

1
@Idigas. 죄송하지만 NTFS 이후로 파일 이름은 대소 문자를 구분합니다.
DaveParillo

그냥 좋아요 나쁜 생각을 가지고 그것을 더 널리 퍼 뜨리십시오. 누군가 파일을 보내거나 손가락이 뚱뚱한 실수를 할 때 지원하는 악몽은 "Answers.dat"를 보냈으며 들어오는 프로세스에는 "answers.dat"가 필요하다는 것을 의미합니다. 이 두 이름이 '다른'것으로 간주 될 이유는 없습니다.
David

2
@David, 예를 들어 Java는 실제로 대소 문자를 구분하는 파일 이름이 필요합니다. 대소 문자를 구분하지 않는 파일 시스템에서 많은 문제가 발생할 수 있습니다.
Arjan

10
나는 이것이 오래되었다는 것을 알고 있지만 여기서 오해를 분명히하고 싶었습니다. NTFS는 대소 문자를 구분하지만 Windows OS는 차별화되지 않습니다!
geo

답변:


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에 대한 매개 변수)하지 목록 디렉토리 . (의 a약자 attribute, -약자 notd약자 directory) .
  • rename "%f" "%f"-파일 이름을 고유 한 이름으로 바꾸십시오. 실제로는 dir명령과 /l조합으로 소문자 입니다.

7
재귀 버전 : for /f "Tokens=*" %f in ('dir /l/b/a-d/s') do (rename "%f" "%f")(dir에 / r이 추가됨)
Sawny

3
이것은 단지 화려하다
Shir 간스

4
재귀 버전이 작동하지 않았습니다. 이름이 잘못된 형식의 명령에 대해 불평했습니다. / s로 인해 두 번째 파일이 절대 경로로 표시되고 파일 이름 확장 (% ~ nxf)을 사용하면 원래의 대문자 파일 이름이되었습니다. 수동으로 되풀이되었습니다.
Dogmatixed

3
이것은 매우 좋은 답변입니다. 요컨대, 외부 프로그램이 필요없고 훌륭하고 작은 명령이 필요하며 배치 파일 복잡성이 필요하지 않습니다.
Jeff Wilbert

2
소문자를 대문자로 변경하도록 수정할 수 있습니까?
Chucky

18

spacetornado Renamer 는 대량의 파일 이름을 일괄 적으로 바꾸는 Windows 프로그램입니다. 텍스트를 검색 및 교체하고, 특정 문자 수를 제거하고, 대소 문자를 소문자, 대문자 또는 첫 글자 대문자로 변경하고, 모든 파일 이름의 시작 또는 끝에 텍스트를 추가 할 수 있습니다

여기에 이미지 설명을 입력하십시오


1
다운 투표 이유를 알려주세요.
joe

5
불행히도 사람들은 거의 설명하지 않습니다 : /
Gnoupi

7
OP가 추가 소프트웨어없이 작동하는 솔루션을 원했기 때문에 다운 보트가 된 것 같습니다. 그리고 몇몇 사람들은 복수의 다운 보트를 다루기 쉽기 때문에 다운 보트가 설명되지 않았다고 생각합니다.
innaM

GUI는 약간 펑키하지만 내가 본 다른 이름 바꾸기 도구보다 더 잘 작동합니다.
jcollum

1
Linux FTP 서버에서 파일을 정리하기 위해 재귀 이름을 변경해야 할 때 수행 한 작업을 수행했지만 제대로 작동하기 전에 관리자로 실행해야했습니다. 유지되지 않는 오래된 프로그램 인 것 같습니다 :)
Nelson

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스위치를 제거하면 폴더 이름도 소문자로 표시됩니다.
Keith

배치 파일로 저장을 시도하고 system32에 팝업하여 단일 명령으로 언제든지 실행할 수 있습니다. 결과 : " D"') was unexpected at this time.직접 명령으로 실행하면 배치 파일로 실행될 때 작동하지 않습니다. 파일을 배치 파일로 작동시키는 방법에 대해서는 확실하지 않지만 문제를 해결할 수 있다고 생각했습니다.
Don Cullen

1
@DonCullen-배치 스크립트 내에서 FOR를 사용할 때 FOR 변수 백분율을 두 배로 늘려야하는 것이 표준 구문입니다. 따라서 및 로 배치 스크립트 내에 명령을 넣은 경우로 %D변경해야합니다 . %%D%F%%F
dbenham

항상 새로운 것을 배우십시오. 감사!
Don Cullen

6

내가 좋아하는 배치 파일 이름 바꾸기 유틸리티는 Cylog 's WildRename 입니다. 다른 많은 기능 중에서 파일 이름의 경우를 변경할 수 있습니다. WildRename의 가장 좋은 점은 정규식을 지원한다는 것입니다.


설치 후 10 초 후에 올바른 앱입니다. 원격 폴더를 재귀 적으로 구성하고 이름을 바꿨습니다 (편의를 위해 매핑 됨).
Matteo Conta

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 : \ 푸>

  • 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


* 두 번째 인수 는 절대 경로가 아닌 파일 이름rename 이어야 하므로 두 개의 루프가 필요 합니다 ( 스위치에서 얻은 것과 동일 )./s


cmd /c "echo %cd%& 첫 번째 이유는 무엇 for입니까? 완전히 불필요합니다.
DavidPostill

@DavidPostill echo %cd%은 현재 폴더를 절대 경로 목록에 추가합니다 . 그리고 cmd /c만드는 &명령을 결합하는 작업을. 저는 Windows Batch Scripting 에 관한 멍청한 놈입니다 . 더 나은 방법을 알고 있다면 답을 자유롭게 개선하십시오!
wc.matteo

멍청한 놈에 대한 훌륭한 직업. 귀하의 이름은 공백 또는 세미콜론으로 시작할 때 실패한다는 점을 제외하고 실제로 작동하는 최초의 cmd.exe 명령 줄 솔루션이었습니다. 선행 공간 또는 세미콜론과 함께 작동하는 더 간단한 답변 은 내 답변 을 참조 하십시오.
dbenham

더 낮은 대문자로 변환하도록 수정할 수 있습니까?
Rishav

3

"문자 교체"전략을 사용할 수 있습니다 ...

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

AZ 등의 글자는 아마도 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에서이 작업을 수행하는 가장 좋은 프로그램은 Bulk Rename Utility 입니다. 망 도구입니다. 정규식을 사용하여 파일 및 / 또는 폴더의 이름을 바꿀 수도 있습니다. 또한 셸 통합 (오른쪽 클릭으로 탐색기에서 실행할 수 있음)이있어 매우 좋습니다. 64 비트 및 32 비트 버전을 사용할 수 있습니다.


1

loftysnake의해이 질문에 대한 대답 은 현재 디렉토리에서 작동하지만 하위 폴더는 검색하지 않습니다.  Sawnyloftysnake의 대답 을 재귀 적으로 만들기 위해 간단한 수정을 제안 했지만 작동하지 않습니다. 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) 파일 에서이 작업을 수행 하려면 %문자 를 두 배로 늘려야합니다 .

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

그리고 당신은 아마 괄호를 생략하고 /y 그냥 말할 수 있습니다 do move ….


다른 사람이 이미 게시 한 정보를 다시 게시하려면 원래 작성자를 식별하고 해당 게시물에 링크해야합니다.
Scott

미안하지만 그 move곳에서 효과 rename가없는 곳을 지적하고 있었고 , 나는 move여기 에서 명령 사용을 제안한 유일한 사람이라고 생각 합니다. 나는 단순히 @loftysnake와 @sawny의 제안을 받아 희망적으로 개선했습니다.
Adrian

이상 하네; 다른 사람이 언급했다고 생각 move했지만 지금은 찾을 수 없습니다.
Scott

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.