파일 이름 시작 부분에 폴더 이름 일부 추가

파일 이름 시작 부분에 폴더 이름 일부 추가

이것은 기본적으로 답변된 질문의 연속이지만 추가 조건이 있습니다.

파일 이름 시작 부분에 폴더 이름 추가

아래와 같은 디렉토리 구조가 있습니다.

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개 이하(필요한 경우 편집, 여유 분석), 이름에 공백이 없습니다(필요한 경우 편집, 인용 추가).

관련 정보