이름을 기준으로 파일을 폴더로 이동


1

이동해야 할 .pdf 및 .jpg 파일이 여러 개 있습니다.

그들은 이와 같은 이름을지었습니다

002-054*.pdf
042-021*.pdf

* 어떤 접미사.

이제이 파일들을 다음과 같은 폴더로 옮기고 싶습니다

002\002 - 054\002-054*.pdf
042\042 - 021\042-021*.pdf

일부 폴더가 이미 존재하지만이 이름 지정 체계에는 002\002 - 054 Some Name\

폴더가 존재하지 않을 때 두 번째 코드 스 니펫에 명시된 폴더 만 만들고 싶습니다. 이미 존재하는 경우 파일을 해당 폴더로 옮기고 싶습니다.

인터넷 검색을 통해 함께 무언가를 넣을 수있었습니다.

@echo off
for %%F in (*.pdf *.jpg) do call :subr "%%F"
exit /b

:subr
set filename=%1
move %1 %filename:~1,3%\%filename:~1,7%\
exit /b

그러나 이것은 이미 존재하는 폴더를 고려하지 않습니다. 그것을 달성하는 가장 좋은 방법은 무엇입니까?

답변:


2

서브 루틴에 몇 줄만 추가하면됩니다.

:subr
set filename=%1
Rem Check for existence of directories in target path
if not exist %filename:~1,3% md %filename:~1,3%
if not exist %filename:~1,3%\%filename:~1,7% md %filename:~1,3%\%filename:~1,7%
Rem Now the move can proceed
move %1 %filename:~1,3%\%filename:~1,7%\
exit /b

작성해야하는 디렉토리 경로 중 하나와 이름이 같은 기존 파일이 있으면 실패합니다. 확장명을 이름에 추가하거나 파일을 다른 위치로 이동하는 등이 사례를 처리하는 방법을 결정해야합니다.


0

현재 디렉토리에 폴더를 작성
하고 2 레벨 폴더는 -숫자 사이에 있어야합니다.

@echo off
for /f "delims=" %%F in (
  'Dir /b *.pdf *.jpg^|findstr "^[0-9][0-9][0-9]-[0-9][0-9][0-9]" '
) do call :subr "%%F"
exit /b

:subr
set "file=%~n1"
set "fold=%file:~0,3%\%file:~0,3% - %file:~4,3%\"
if not exist "%fold%" md "%fold%"
move %1 "%fold%"

dir |findstr숫자 패턴 999-999로 시작하는 파일 만 변경 되고 재 분류됩니다.
md가 중간 폴더를 만들 때 하나의 md 만 필요합니다.


와일드 카드로 폴더 이름을 확인하려면 어떻게합니까? 이렇게 if not exist "%fold%"* md "%fold%"
쓸까요

댓글이 어떻게 든 중단되었으므로 요청한 내용이 확실하지 않습니다.
LotPings
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.