윈 도 우 배치파일 고수님들께 질문 드립니다.
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 | - | - |
35489 | 윈 도 우| 요즘 이증상 때문에 미치겠습니다. ㅜ ㅜ [2] | 플라즈마 | 651 | 09-25 |
35488 | 윈 도 우| 윈도우10에서 파워포인트 2003 사용 [2] | 오큰산 | 641 | 09-25 |
35487 | 윈 도 우| 윈도우pe문제입니다. 도와주세요. [7] | 카니발 | 470 | 09-25 |
35486 | 윈 도 우| 크롬에서 이 사이트 접속 안됩니다.. 도움좀 부탁드립니다ㅜㅜ [23] | 수퍼떨 | 1274 | 09-24 |
35485 | 윈 도 우| 윈도우10 키와 오피스2016 키와 정품인증에 관해서여쭈어봅... [5] | 알파궁상 | 1357 | 09-24 |
35484 | 윈 도 우| ssd와 sata hdd [6] | skRj | 584 | 09-24 |
35483 | 윈 도 우| 질문드립니다. [2] | 선녀와나후 | 205 | 09-24 |
35482 | 윈 도 우| 윈도우 이미지캡쳐 관련 질문입니다 [4] | 초원의신사 | 314 | 09-24 |
35481 | 윈 도 우| 윈도우10 시작화면에 고정 기능 질문 [1] | BigShit | 1194 | 09-23 |
35480 | 윈 도 우| 윈도우10 종료시 오류보고 하면서 재부팅됩니다 [4] | xcom | 1023 | 09-22 |
35479 | 윈 도 우| 오피스 2016 토큰 백업 및 복구 배치파일 [4] | 투덜이5 | 1415 | 09-22 |
35478 | 윈 도 우| 부팅대기화면 동그라미 뭐라고 호칭해야 할까요 [13] | 집앞의_큰 | 768 | 09-22 |
35477 | 윈 도 우| wimBoot 병합은 어떻게 하는지요? [5] | 진선인好 | 427 | 09-22 |
35476 | 윈 도 우| 윈도우 10 Home/pro 커스컴 설치 [2] | 카인어니스 | 605 | 09-22 |
35475 | 윈 도 우| 와우 xnote r470 윈도우10 rs2 1703 설치 성공했읍니다..오... | 알파궁상 | 570 | 09-22 |
35474 | 윈 도 우| 노트북에 윈도우10 rs2 1703 32비트설치하고나서 정품인증... [2] | 알파궁상 | 520 | 09-22 |
35473 | 윈 도 우| 윈도우10깔고 시스템종료했는데 본체는 종료가안되는현상 [2] | 빈팩트 | 1061 | 09-22 |
35472 | 윈 도 우| WinNTSetup 잘 아시는분께 도움요청합니다. [2] | 절제자 | 865 | 09-21 |
35471 | 윈 도 우| 하드디스크를 게속읽다가 재부팅 되네요 [2] | 해오름 | 250 | 09-21 |
35470 | 윈 도 우| 윈도10 앱들이 갑자기 느리게 로딩되는데 | CT | 169 | 09-21 |
급조되었음. 다듬어 사용하세요^^
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"