이것은 기본적으로 답변된 질문의 연속이지만 추가 조건이 있습니다.
아래와 같은 디렉토리 구조가 있습니다.
Folder
> SubFolder1xxxx
> FileName1.abc
> Filename2.abc
> .............
> SubFolder2xxxx
> FileName11.abc
> Filename12.abc
> ..............
> ..........
등. 하위 폴더 내의 파일 이름을 다음과 같이 바꾸고 싶습니다.
SubFolder1_Filename1.abc
SubFolder1_Filename2.abc
SubFolder2_Filename11.abc
SubFolder2_Filename12.abc
즉, 구분 기호 " "를 사용하여 파일 이름 시작 부분에 폴더 이름의 일부를 추가합니다 _
. 디렉터리 구조는 변경되지 않은 상태로 유지되어야 합니다.
아래 스크립트가 있습니다
for /d %D in (*) do (
for %F in ("%~D\*") do (
for %P in ("%F\..") do (
ren "%F" "%~nxP_%~nxF"
)
)
)
위 스크립트의 문제점은 전체 폴더 이름을 사용한다는 것입니다.
따라서 구문 하위 문자열을 사용하여 파일 이름의 일부만 추출하려고 했습니다.
%variable:~num_chars_to_skip,num_chars_to_keep%
그래서 위의 코드를 수정했지만 오류가 발생했습니다.
for /d %D in (*) do (
for %F in ("%~D\*") do (
for %P in ("%F\..") do (
ren "%F" "%~nxP:~0,10%_%~nxF"
)
)
)
오류는 기본적으로 구문 substring이 작동하지 않고 문자열로 인쇄된다는 것입니다. 이런 것
SubFolder1xxxx:~0,10%
답변1
배치 파일의 폴더 이름을 가져오는 배치 예입니다.
@echo off
set a=%~p0%
for /f "tokens=1,2,3,4,5,6,7,8,9 delims=\" %%a in ("%a%") do call :getlast %%a %%b %%c %%d %%e %%f %%g %%h %%i
goto :eof
:getlast
if "%1"=="" goto :eof
if "%2"=="" echo Current folder name is %1.
shift
goto :getlast
현재 제한 사항: 하위 폴더 수준은 9개 이하(필요한 경우 편집, 여유 분석), 이름에 공백이 없습니다(필요한 경우 편집, 인용 추가).