
파일 이름의 첫 번째 세계를 기준으로 하위 폴더로 정렬하려는 단일 디렉터리에 수많은 파일이 저장되어 있습니다.
따라서 첫 번째 단어(7자리 숫자)가 서로 다른 수천 개의 .pdf 파일이 있습니다.
또한 동일한 디렉토리에 첫 번째 단어 7개의 숫자가 다른 수천 개의 폴더가 있습니다.
모든 .pdf를 첫 번째 단어(7자)가 동일한 폴더로 이동하려고 합니다.
따라서 기본적으로 pdf 파일을 확인하고 동일한 디렉터리에서 처음 7개의 숫자가 동일한 폴더가 이미 있는지 확인하고 .pdf를 해당 폴더로 이동하는 배치 파일이 필요합니다.
.pdf에 대한 폴더가 없는 경우 .pdf 파일의 처음 7자를 기반으로 폴더가 생성됩니다.
예를 들어 같은 디렉토리에 "1617832_XXXXXXXX_XXX.pdf"라는 이름의 PDF와 "1617832_XXXXXXXX"라는 폴더가 있는 경우 "1617832_XXXXXXXX_***.pdf"를 기존 폴더 "1617832_XXXXXXXX"로 이동하려고 합니다. 그러나 ""1617832_XXXXXXXX" 폴더가 존재하지 않으면 "1617832"(파일의 처음 7자)라는 폴더를 생성하고 싶습니다.
그런 다음 다음 .pdf "4530834__XXXXXXXX_XXX.pdf"로 이동하여 폴더를 확인하여 첫 번째 단어(7자)가 동일한 일치 폴더가 있는지 확인한 다음 파일을 해당 폴더로 이동합니다(있는 경우). 존재하지 않으면 새 폴더가 생성됩니다.)
가까이 다가왔지만 실행하는 데 너무 오래 걸리고 폴더가 없으면 폴더를 생성하지 않는 유일한 배치는 다음과 같습니다.
@echo on
setlocal enabledelayedexpansion
cls
pushd c:\folders\
for /f "tokens=*" %%1 in ('dir /a-d /b *') do (
set filename=%%1&set dirname=!filename:~0,7!
for /f "tokens=*" %%A in ('dir /ad /b') do (
set dirid=%%A&set dirid=!dirid:~0,7!
if "!dirid!" equ "!dirname!" move %%1 %%A
)
)
이 작업을 보다 효율적이고 효과적으로 수행할 수 있는 방법이 있습니까?
답변1
이것을 테스트해 보세요:
@echo off
setlocal EnableDelayedExpansion
REM Put here the path where the PDFs are:
set "Source=%userprofile%\Desktop\test"
for %%a in ("%Source%\*.PDF") do (
set "File=%%~na"
for /d %%b in ("%Source%\*") do (
set "Folder=%%~nb"
If "!File:~0,7!"=="!Folder:~0,7!" Move "%%a" "%%b"
)
if Exist "%%a" md "!Source!\!File:~0,7!"& move /y "%%a" "!Source!\!File:~0,7!"
)
답변2
- 업데이트됨이 의견을 고려하면:예, 두 개의 폴더가 처음 7자와 일치하는 경우 처음 7자가 동일한 두 폴더로 파일을 이동하고 싶습니다.
이동하면 이동 후 처음 7자가 일치하는 다른 폴더에 해당 파일(이동된 파일)의 또 다른 복사본(이동된 파일)을 만들 수 없기 때문에 이동 명령을 사용할 수 없습니다. 명령은 파일을 이동하는 것이 아니라 복사본을 만들어야 합니다. ..
@echo off && setlocal enabledelayedexpansion
cd /d "O:\Path\Operations\Blank\Blanky\Blank Blank" && cls
for /f tokens^=* %%i in ('dir /a:d .\* /b ')do set "_folder=%%~ni" && if exist ".\%%~ni*.pdf" (
for /f tokens^=* %%F in ('dir /a:d /b ".\!_folder:~0,7!*"')do copy ".\%%~ni*.pdf" "%%~dpnF\." )
for %%F in (*.pdf)do set "_file=%%~nF" && call set "_file=!_file:~0,7!" && (
if not exist .\!_file!\. md .\!_file!\ && copy /y "%%~dpnxF" ".\!_file!\." )
:: Deleting these files was copied to multiple folders instead of being moved to folder...
(echo/ if exist .\*.pdf del .\*.pdf /q /f ) & %__APPDIR__%timeout.exe -1 & endlocal && goto :EOF
먼저 폴더를 처리하고 일치하는 파일이 있는지 확인하십시오. 그 후 폴더에 대상 없이 남은 파일을 확인하세요.
모든 파일이 해당 폴더에 복사된 경우 다음을 삭제해야 합니다.echo /
명령:
(에코/존재하는 경우 .\*.pdf del .\*.pdf /q /f ) & %__APPDIR__%timeout.exe -1 & endlocal && goto :EOF