폴더와 하위 폴더의 모든 파일 이름을 소문자로 바꾸는 방법이 필요합니다.
Windows (XP 또는 7) 만 사용하여 수행 할 수있는 방법이 있는지 알고 싶습니다.
폴더와 하위 폴더의 모든 파일 이름을 소문자로 바꾸는 방법이 필요합니다.
Windows (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")
(dir에 / 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 's 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 : \ 푸>
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
입니까? 완전히 불필요합니다.
echo %cd%
은 현재 폴더를 절대 경로 목록에 추가합니다 . 그리고 cmd /c
만드는 &
명령을 결합하는 작업을. 저는 Windows Batch Scripting 에 관한 멍청한 놈입니다 . 더 나은 방법을 알고 있다면 답을 자유롭게 개선하십시오!
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에서이 작업을 수행하는 가장 좋은 프로그램은 Bulk Rename Utility 입니다. 망 도구입니다. 정규식을 사용하여 파일 및 / 또는 폴더의 이름을 바꿀 수도 있습니다. 또한 셸 통합 (오른쪽 클릭으로 탐색기에서 실행할 수 있음)이있어 매우 좋습니다. 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
) 파일 에서이 작업을 수행 하려면 %
문자 를 두 배로 늘려야합니다 .
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 | Rename-Item -NewName { $_.Name.ToLowerInvariant() }
이것이 작동하는지 확인했습니다. 여기에서 찾을 수 있습니다 : http://www.hanselman.com/blog/PennyPinchingVideoMovingMy WebsitesImagesToTheAzureCDNAndUsingACustomDomain.aspx