윈 도 우 배치파일 고수님들께 질문 드립니다.
2017.09.13 13:16
안녕하세요.
제가 배치 파일을 하나 만들고 있는데 한계에 부딪쳐서... 질문 드립니다..
고수분들께서는 금방 만드실 것 같아요 ㅜㅜ 굉장히 간단한거라서요....
제가 하려는 것은
파일 이름을 get해서 각 하위폴더에서 최신버전의 파일(파일명이 00~20이 붙어 있음 높을 수록 최신)을
필터링 해서 삭제를 하는 것 입니다.
1. for문으로 배열 변수에 파일 이름 set 2.변수 비교 후 낮은 숫자 삭제 3. 모든 PDF폴더에 동일 명령어 적용
이런식으로 이론적으로는 알겠는데 코딩이 한계가 있네요.. ㅜㅜ
PDF파일이 수십개면 노가다를 하겠지만... 수천개라서 일일이 작업이 너무 힘들어서 만들어보려고 했어요..
고수님들 도와주세요~!
부탁드립니다!!
--------------------------------------------------------------------------------
ex) 트리 구조
Top-Folder
Folder1
Sub-Folder1
excel-folder
Sub-Folder2
ppt-Folder
Sub-Folder3
PDF-Folder
00-00-00-00.pdf, 00-00-00-01.pdf, 00-00-00-02.pdf, 00-00-00-03.pdf ... 00-00-00-06.pdf
Folder2
Sub-Folder1
excel-folder
Sub-Folder2
ppt-Folder
Sub-Folder3
PDF-Folder
00-00-00-00.pdf, 00-00-00-01.pdf, 00-00-00-02.pdf, 00-00-00-09.pdf ... 00-00-00-13.pdf
Folder10
Sub-Folder1
excel-folder
Sub-Folder2
ppt-Folder
Sub-Folder3
PDF-Folder
00-00-00-02.pdf, 00-00-00-05.pdf, 00-00-00-09.pdf, 00-00-00-13.pdf ... 00-00-00-20.pdf
--------------------------------------------------------------------------------
아래는 제가 나름 코딩 해본 것 입니다.
이렇게 하면.. 현재폴더에서 00~20까지 모든 파일이 있을 때는 삭제가 되지만 파일이 연속되지 않고 00,02,05 이런식으로 있으면 작동이 안됩니다..
1. 00,02,05,07 등 있으면 제일 높은 07빼고 나머지 파일 삭제
2. 모든 PDF 폴더에 동일하게 명령 실행
--------------------------------------------------------------------------------
@echo off
rem 임시로 경로 지정
cd "C:\Users\SHLee\Desktop\batch\PDF"
rem ------------------------변수지정------------------------
set /a max=20
set /a i=1
set /a ii=0
set /a iii=10
rem ------------------------변수지정------------------------
rem ------------------------10이하------------------------
:ten
if exist 00-00-00-0%i%.pdf (del 00-00-00-0%ii%.pdf)
set /a i+=1
set /a ii+=1
if %i%==10 (goto ten_over:)
goto ten:
rem ------------------------10이하------------------------
rem ------------------------10이상------------------------
:ten_over
if exist 00-00-00-10.pdf (del 00-00-00-09.pdf)
if exist 00-00-00-%iii%.pdf (del 00-00-00-%ii%.pdf)
cls
set /a ii+=1
set /a iii+=1
if %iii%==%max% (goto end:)
goto ten_over:
rem ------------------------10이상------------------------
rem ------------------------마무리------------------------
:end
echo GA 삭제 완료!
pause>nul
rem ------------------------마무리------------------------
댓글 [4]
-
무티 2017.09.13 16:39
-
서기다 2017.09.13 21:10
역시 무티님은대단하십니다
맥가이버 같습니다 그림 구경 잘했습니다^^ -
RichardWinters 2017.09.14 10:33
급조된 것 치고는 굉장히 심플하고 굉장히 완벽하네요.
정말로 감사드립니다!!! ㅎㅎ
하지만.. 염치불구하더라도 한가지만 더 부탁 드려도 될까요? ㅜㅜ
코딩에 대한 이해가 조금 힘들어서요...1. _KNIFE_ == %~n1 == 파일이름 ??
2. "_FOLDER_=%~1" == 폴더 경로 set ??
3. ~9%,~10%, &, || >nul은 이해를 못 했습니다. ㅜㅜ마지막으로... :_BEGIN_ 에서 경로를 지정하셨는데, 제가 수천개가 넘고 폴더명이 규칙이 없고
일정하지 않아서
모든 경로를 다 입력하기가 힘듭니다. ㅜㅜ 최상위 폴더만 지정하여 삭제가 가능할까요?다시 한 번 답변 주신 것 정말 감사 드립니다!
-
무티 2017.09.14 12:28
예) c:\folder\RichardWinters.Boy
%~1 : "c:\folder\RichardWinters.Boy"
%~n1 : 파일이름만 ,"RichardWinters"
%~x1 : 확장자만, "Boy"
%~z1 : 파일크기 ....
set "_KNIFE1=%_KNIFE_:~9%" : %_KNIFE_% 문자열의 9번째부터 끝까지 가져오기입니다.
for /f %%i in ('dir /s /b /ad "d:\Top-Folder\sub*.*"') do set /a "_TOP_=0"&for /f %%a in ('dir /s /b /a-d /o-n "%%i\00-00-00-*.*"') do if exist "%%~a" call remove.cmd "%%~a"
외부파일 remove.cmd
set "_KNIFE_=%~n1"
set "_KNIFE1=%_KNIFE_:~9%"&set "_KNIFE2=%_KNIFE_:~10%"
set /a "_NKNIFE=%_KNIFE1%" >Nul 2>&1||set /a "_NKNIFE=%_KNIFE2%"
if %_TOP_% EQU 0 set "_TOP_=%_NKNIFE%"
if %_NKNIFE% GEQ %_TOP_% (set "_TOP_=%_NKNIFE%") else ( del /f /q "%~1" )
번호 | 제목 | 글쓴이 | 조회 | 등록일 |
---|---|---|---|---|
[공지] | 질문과 답변 게시판 이용간 유의사항 | gooddew | - | - |
70305 | 윈 도 우| 윈도우10 에서 IPv6 터널브로커 사용 할수 없나요? [4] | ohys | 396 | 09-14 |
70304 | 윈 도 우| 윈도우 업데이트 하고 난후 소음 [5] | 웨일 | 698 | 09-14 |
70303 | 윈 도 우| 윈도우 10 프로 재설치 후........... [2] | 카니발 | 675 | 09-14 |
70302 | 소프트웨어| 압축파일 손상.. [7] | Lepton2 | 891 | 09-14 |
70301 | 기 타| 구글 드라이브 사본 만들기 오류 [4] | 니그 | 6687 | 09-14 |
70300 | 기 타| 구글아이디 해킹당했는데요 [4] | 슴도치 | 969 | 09-14 |
70299 | 윈 도 우| 컴푸러 종료시에... [2] | 김영자 | 399 | 09-14 |
70298 | 윈 도 우| WindowsPE란 무엇입니까 ? [4] | 나그네길 | 668 | 09-13 |
70297 | 윈 도 우| 윈도우10 th2 해쉬값 알수 있을까요? [1] | tuzki | 232 | 09-13 |
70296 | 윈 도 우| wim파일 마운트 배치파일 [5] | 고북 | 451 | 09-13 |
70295 | 윈 도 우| WinXP SP3 IE8 6in Hotfix161214 App3in E-Driver 받는방법요 [8] | 아레 | 973 | 09-13 |
70294 | 윈 도 우| 윈포 동그라미 계속 돌며 멈추는 현상 [2] | 자연을보며 | 349 | 09-13 |
70293 | 소프트웨어| 오피스 2016 로컬계정으로 인증시 백업은 어떻게 하나요? [3] | 리치아빠 | 591 | 09-13 |
70292 | 윈 도 우| 자료실 "어띠다..." 사용후 윈업데이트 문제발생... [5] | UCLA | 582 | 09-13 |
» | 윈 도 우| 배치파일 고수님들께 질문 드립니다. [4] | RichardWin | 226 | 09-13 |
70290 | 윈 도 우| UxTheme.dll 에러 창이 뜹니다 [1] | 꿀단지 | 244 | 09-13 |
70289 | 하드웨어| CPU 질문 드립니다. [6] | pig513 | 358 | 09-13 |
70288 | 윈 도 우| EFI 파티션을 윈도우탐색기에서 볼 수 있는 방법? [2] | 영욱 | 355 | 09-13 |
70287 | 윈 도 우| 윈도우10에서 파일 쓰기 권한 설정 관련해서 질문드립니다 [1] | 화이 | 450 | 09-13 |
70286 | 하드웨어| 그래픽카드가 성능발휘를 못합니다. [4] | ♡오르골 | 742 | 09-12 |
급조되었음. 다듬어 사용하세요^^
goto :_BEGIN_
:_REMOVE_
set "_KNIFE_=%~n1"
set "_KNIFE1=%_KNIFE_:~9%"&set "_KNIFE2=%_KNIFE_:~10%"
set /a "_NKNIFE=%_KNIFE1%" >Nul 2>&1||set /a "_NKNIFE=%_KNIFE2%"
if %_TOP_% EQU 0 set "_TOP_=%_NKNIFE%"
if %_NKNIFE% GEQ %_TOP_% (set "_TOP_=%_NKNIFE%") else ( del /f /q "%~1" )
goto :eof
:_FOLIST_
set "_FOLDER_=%~1"
set /a "_TOP_=0"
for /f %%a in ('dir /s /b /a-d /o-n "%_FOLDER_%\00-00-00-*.*"') do if exist "%%~a" call :_REMOVE_ "%%~a"
goto :eof
:_BEGIN_
for %%i in (
d:\Top-Folder\Folder1\Sub-Folder1
d:\Top-Folder\Folder1\Sub-Folder2
d:\Top-Folder\Folder1\Sub-Folder3
d:\Top-Folder\Folder2\Sub-Folder1
d:\Top-Folder\Folder2\Sub-Folder2
d:\Top-Folder\Folder2\Sub-Folder3
d:\Top-Folder\Folder3\Sub-Folder1
d:\Top-Folder\Folder3\Sub-Folder2
d:\Top-Folder\Folder3\Sub-Folder3
d:\Top-Folder\Folder10\Sub-Folder1
d:\Top-Folder\Folder10\Sub-Folder2
d:\Top-Folder\Folder10\Sub-Folder3
) do call :_FOLIST_ "%%~i"