윈 도 우 배치파일 고수님들께 질문 드립니다.
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 | - | - |
70438 | 서버 / IT| 사내 네트워크 트래픽 모니터링 프로그램 좋은게 있을까요 ? [3] | 촌꼬마 | 755 | 09-25 |
70437 | 윈 도 우| 윈도우pe문제입니다. 도와주세요. [7] | 카니발 | 493 | 09-25 |
70436 | 소프트웨어| Window Media Player 오류 | obs | 234 | 09-25 |
70435 | 윈 도 우| 크롬에서 이 사이트 접속 안됩니다.. 도움좀 부탁드립니다ㅜㅜ [23] | 수퍼떨 | 1312 | 09-24 |
70434 | 기 타| 도움을 얻고자 XP 오디오 바로가기 관해서 질문있습니다. | 리드유 | 204 | 09-24 |
70433 | 기 타| 외장하드 관련 질문 [4] | bull4joe | 478 | 09-24 |
70432 | 윈 도 우| 윈도우10 키와 오피스2016 키와 정품인증에 관해서여쭈어봅... [5] | 알파궁상 | 1370 | 09-24 |
70431 | 소프트웨어| Easycrypt 실행문제 [2] | rmsfh10 | 714 | 09-24 |
70430 | 윈 도 우| ssd와 sata hdd [6] | skRj | 606 | 09-24 |
70429 | 기 타| Snagit 13.1.4 Build 8008 한글패치 [6] | 무명거사 | 543 | 09-24 |
70428 | 기 타| 남은 시간 [9] | 삽자루 | 483 | 09-24 |
70427 | 소프트웨어| 화상키보드로... [3] | 샘골박이 | 312 | 09-24 |
70426 | 윈 도 우| 질문드립니다. [2] | 선녀와나후 | 225 | 09-24 |
70425 | 윈 도 우| 윈도우 이미지캡쳐 관련 질문입니다 [4] | 초원의신사 | 330 | 09-24 |
70424 | 윈 도 우| 윈도우10 시작화면에 고정 기능 질문 [1] | BigShit | 1210 | 09-23 |
70423 | 하드웨어| 모니터가 불규칙적으로 흰색 가로줄이 깜박입니다 | mongU | 540 | 09-23 |
70422 | 모 바 일| 아이폰 홈 화면의 상단에 표시된 모양은 무엇을 의미하는가요? [2] | rose2 | 610 | 09-23 |
70421 | 하드웨어| 랜툴작업 관련 질문있습니다. [1] | 우주선 | 274 | 09-23 |
70420 | 기 타| 저작권법 위반으로 경찰서에서... [11] | 무니모니 | 1735 | 09-23 |
70419 | 하드웨어| 노트북에서 소리가 안납니다. [3] | SSUNN | 345 | 09-23 |
급조되었음. 다듬어 사용하세요^^
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"