기 타 압축백업에서 7일안에 해당되는 자료를 백업하려고 하는데
2022.08.03 18:39
Rar압축백업에서 7일안에 해당되는 자료를 백업하려고 하는데
이상하게 아래와 같이 하면 rarDate가
9일 이상일때는 백업이 잘 되었는데
9일 이하일때는 잘안되네요
오늘 다시 보니
오늘날짜를 기준으로
7일 전이면 2022.7.27인데
20211224
가 나오네요 뭐가 잘못된거죠..
그리고 파일명이 a-2022-07-29.rar이 8월부터
갑자기 a-2022년.rar으로 나오고 정말 헷갈리네요..
@echo off
title 타이틀
::echo %date%
set yyyy=%date:~0,4%
::echo %yyyy%
set mm=%date:~5,2%
::echo %mm%
set dd=%date:~8,2%
::echo %dd%
if %dd%==08 (
set dd=8 ) else (
if %dd%==09 (
set dd=9 ) )
if %mm%==08 (
set mm=8 ) else (
if %mm%==09 (
set mm=9 ) )
set /A dd=%dd% - 7
set /A mm=%mm% + 0
if /I %dd% GTR 0 goto DONE
set /A mm=%mm% - 1
if /I %mm% GTR 0 goto ADJUSTDAY
set /A mm=12
set /A yyyy=%yyyy% - 1
:ADJUSTDAY
if %mm%==1 goto SET31
if %mm%==2 goto LEAPCHK
if %mm%==3 goto SET31
if %mm%==4 goto SET30
if %mm%==5 goto SET31
if %mm%==6 goto SET30
if %mm%==7 goto SET31
if %mm%==8 goto SET31
if %mm%==9 goto SET30
if %mm%==10 goto SET31
if %mm%==11 goto SET30
if %mm%==12 goto SET31
goto ERROR
:SET31
set /A dd=31 + %dd%
goto DONE
:SET30
set /A dd=30 + %dd%
goto DONE
:LEAPCHK
set /A tt=%yyyy% %% 4
if not %tt%==0 goto SET28
set /A tt=%yyyy% %% 100
if not %tt%==0 goto SET29
set /A tt=%yyyy% %% 400
if %tt%==0 goto SET29
:SET28
set /A dd=28 + %dd%
goto DONE
:SET29
set /A dd=29 + %dd%
:DONE
if /i %dd% LSS 10 set dd=0%dd%
if /I %mm% LSS 10 set mm=0%mm%
set rarDate=%yyyy%%mm%%dd%
echo %rarDate%
댓글 [8]
-
메리아 2022.08.03 20:15
-
열심히하자 2022.08.04 06:13
답변 감사드립니다.^^
-
메리아 2022.08.03 20:35
그리고 압축옵션에 -ta%yyy~% 이런걸 쓰시는거 같은데
그냥 -tn7d 이거 쓰시는게 좋습니다.
그리고 가만 질문을 보아하니
yyyy-mm-dd 랑
yyyymmdd 둘 다 얻고 싶으신가요?
그럼 이러시면 되겠네요.
for /f %%a in ('powershell ^(Get-Date^).AddDays^(-7^).ToString^(^'yyyy-MM-dd^'^)') do set "prevDate=%%a"
echo %prevDate%
set prevYYYYMMDD=%prevDate:~0,4%%prevDate:~5,2%%prevDate:~8,2%
echo %prevYYYYMMDD%
참고로 vbs로 하면 다음과 같습니다echo wscript.echo (Date-7) > "%temp%\tmpDate.vbs"for /f "tokens=*" %%a in ('CSCRIPT "%temp%\tmpDate.vbs"') do set "prevDate=%%a"echo %prevDate%set prevYYYYMMDD=%prevDate:~0,4%%prevDate:~5,2%%prevDate:~8,2%echo %prevYYYYMMDD% -
열심히하자 2022.08.04 06:14
답변 감사드립니다.^^
아래는 로보카피로 작업하는거 해결보았고 지금은
배치자체가 왜 정확한 날짜가 안나오는지 궁금한것입니다.
다시 보내주신대로 작업해 보겠습니다.
-
메리아 2022.08.04 10:47
저도 로보카피랑 rar 압축을 하면서 관리중인데
첩첩 산중이더군요. ㅠㅠ
기간 문제야 별로 어려운거 아니니까 해결을 보실텐데, 어쩌면 문제가 더 생길지 모릅니다.
처음에 작성 다 해놓고 완료됐다 싶었는데
생각지 못한 문제들이 좀 발생하더군요.
같은 문제 겪으실지 모르니 써두겠습니다.
1. rar압축) 워킹디렉토리 : 잘못하면 폴더수정기록이나 압축 잔여물이 다시 백업되는 현상 발생
그러므로 옵션에서 -w"원하는압축tmp경로"를 지정해서 압축 진행중의 파일이 저장될 경로 지정
2. rar압축) 다운 발생시 파일깨짐 : 저는 자주 다운 되는 컴이 있어 일단 당장 해결못보고 작업물을 짧은 주기로 압축하는데, 압축중간에 다운되는 현상이 발생함. 당연히 한번 깨지면 그 이후로 업데이트 되는건 줄줄이 G랄남. rar을 동일한 파일명으로 업데이트하는 경우 주의. 백업의 백업까지 필요함.
3. rar압축) 빈폴더 트러블 : 기본적으로 파일과 폴더 수정날짜 기준으로 처리하는데, 폴더수정날짜가 빈번하게 변경되는 상황인 경우
빈폴더를 압축에 포함시킬지 여부를 잘 생각해야함. 빈폴더 제외는 아마 -ed 옵션일겁니다.
4. rar+robo) "생성기준" 복사 : 이건 저도 답이 안나와서 vbs 처리하긴 했는데, 설명과 해결이 좀 어렵습니다.
예를들어 어떤 폴더에, 기존 폴더나 파일들을 다른데서 가져와서 단순 복사했다고 치죠.
기본적으로 이거는 백업이 안됩니다. 그나마 폴더는 날짜가 강제로 변경되거나 하긴 하는데(안변하기도 함), 파일은 답이 없습니다.
로보카피는 /MAXLAD 라는 옵션으로 액세스 기준 복사도 있는걸 방금 알았는데, 실험은 해본적이 없어서 모르겠으나 아무튼 생성 날짜 기준은 없습니다.
결국 제가 해결한 해법은 vbs에서 전체 경로를 센타까서 폴더나 파일 생성날짜가 기준일 이후인지도 체크하게 해놨습니다.
빈폴더는 만들고, 일반파일은 압축하죠. 참고로 압축할때 필요한 옵션은 -ap옵션입니다. 이게 경로 맞춰주더군요.
당연히 -ta나 -tn 옵션은 쓰면 안됩니다. 이게 안걸린 파일을 압축하는거라서요.
아마 지금은 이해를 못할겁니다. 문제가 터지면 이게 그 얘기구나 싶을겁니다.(지금 이해하시면 다행이구요)
그래서 생성기준은 포기하시거나 vbs로 작성하시는 수밖에는 도리가 없을겁니다. 파워셸도 이거 구분은 못할겁니다.
일일이 생성날짜 싹 훑어야했거든요.
일부는 님 상황에 별 상관없는 내용일지 모르나, 저랑 같은식을 하시겠다면 주의하셔야 할겁니다.
-
지후빠 2022.08.03 23:40
게시물이 새로 올라왔네요. 아래 댓글 단 것 여기에도 올려봅니다.^^
if 문에서 /i 옵션은 문자를 비교할 때 사용합니다. 숫자 비교이므로 빼셔야 할 것 같습니다.
본문은 참고하여 제 스타일로 수정해봤습니다. ^^ date-7_test.cmd
- 윤달 참고; https://blog.naver.com/hanlaonline/222004576341
@echo off & title 타이틀 & setlocal enabledelayedexpansion
set "yyyy=%date:~0,4%"
if %date:~5,1%==0 (set mm=%date:~6,1%) else (set mm=%date:~5,2%)
if %date:~8,1%==0 (set dd=%date:~9,1%) else (set dd=%date:~8,2%)
set /a dd-=7
if %dd% gtr 0 (goto DONE) else set /a mm-=1
if %mm% equ 0 (set /a mm=12 & set /a yyyy-=1)
if %mm% equ 2 (set /a dd+=28
set /a _y=yyyy%%4 & if !_y!==0 set /a dd+=1
set /a _y=yyyy%%100 & if !_y!==0 set /a dd-=1
set /a _y=yyyy%%400 & if !_y!==0 set /a dd+=1
) else (set "m31= 1 3 5 7 8 10 12 "
if not "!m31: %mm% =!"=="!m31!" (set /a dd+=31) else (set /a dd+=30)
)
:DONE
set "mm=0%mm%" & set "dd=0%dd%" & set rarDate=%yyyy%!mm:~-2!!dd:~-2!
echo %rarDate%
endlocal & pause & exit/b
-
열심히하자 2022.08.04 06:14
답변 감사드립니다.^^
아래는 로보카피로 작업하는거 해결보았고 지금은
배치자체가 왜 정확한 날짜가 안나오는지 궁금한것입니다.
다시 보내주신대로 작업해 보겠습니다.
-
지후빠 2022.08.04 10:00
보통은 그냥 처리 될 것 같은데 설정에 따라서 오류가 나는 모양이네요.
if %dd%==08 (
set dd=8 ) else (
if %dd%==09 (
set dd=9 ) )
부분에서 set dd=8 , set dd=9 다음에 공백없이 괄호 닫기를 해야합니다.
set dd=8) set dd=9) 아니면 /a 옵션을 붙여서 set /a dd=8 ), set /a dd=9 ) 아니면 set "dd=8" ) set "dd=9" )
if %mm%==08 (
set mm=8 ) else (
if %mm%==09 (
set mm=9 ) )
부분도 마찮가지 입니다.
set /A dd=%dd% - 7 에서 %dd% 값에 문제가 있습니다. 08,09 일 일때만 8,9로 바꿔지고 3일 일때는 그대로 03으로 넘어 옵니다. 숫자 연산시 0으로 시작해서 연산 오류가 나고 dd 에 -7만 담기는 것 같습니다.
if /I %dd% GTR 0 goto DONE 에서 %dd%가 -7 이니 다음줄로 넘어가고
set /A mm=%mm% - 1 에서 %mm% 가 비어 있어서 mm 이 -1 이 되고
if /I %mm% GTR 0 goto ADJUSTDAY 에서 if가 false 라서 다음 줄로 넘어가고
set /A mm=12, set /A yyyy=%yyyy% - 1 가 적용되는 것 같습니다.
번호 | 제목 | 글쓴이 | 조회 | 등록일 |
---|---|---|---|---|
[공지] | 질문과 답변 게시판 이용간 유의사항 | gooddew | - | - |
94293 | 윈 도 우| WIN11 22H2 이상 한컴오피스 실행문제.... [6] | 윈도우스타 | 768 | 08-05 |
94292 | 기 타| everything 다중 검색 관련 문의 드립니다 [4] | solis | 289 | 08-05 |
94291 | 윈 도 우| getmac /v 파일 저장 문의 [1] | 터푸캣 | 183 | 08-05 |
94290 | 윈 도 우| 잠금화면 유지하기 [2] | 갠지스의잔 | 330 | 08-05 |
94289 | 기 타| 엘리스타입 키보드 자세히 아시는 분 좀 봐주세요 | nadaeri | 172 | 08-05 |
94288 | 윈 도 우| SATA/NVME → RAID ON [3] | jinhna | 455 | 08-05 |
94287 | 윈 도 우| 윈도우11 디펜더 설정불가 [1] | 워랍돈 | 391 | 08-05 |
94286 | 소프트웨어| 혹시 이미지편집 잘하시는분계실까요? [4] | 도전정신 | 538 | 08-04 |
94285 | 하드웨어| 메모리 속도 보는 법 [9] | billy | 568 | 08-04 |
94284 | 기 타| 삭제 하는것 도와주세요. [5] | 深泉[三神 | 513 | 08-04 |
94283 | 소프트웨어| VirtualBox 에러 [4] | 하늘색꿈 | 252 | 08-04 |
94282 | 기 타| 기계식 키보드 호환되는 KVM이 있을까요? [1] | 최강미뉴 | 276 | 08-04 |
94281 | 소프트웨어| rufus windows user experience 창은 언제 뜨는거죠? [4] | ksire | 372 | 08-04 |
94280 | 윈 도 우| WinNTSetup 으로 윈도우 설치할 때 파티션 방법 [4] | melusina | 538 | 08-04 |
94279 | 기 타| x86 해킨토시 활동하시는분 계신가요? [2] | 도우너2 | 348 | 08-04 |
94278 | 윈 도 우| 윈도우 로그온이 2개가 생겼습니다 하나만 남겨두고 싶습니... [1] | 프리티맨 | 448 | 08-04 |
94277 | 하드웨어| 스크롤캡춰 사용하시는분?? [6] | 한스 | 520 | 08-03 |
94276 | 윈 도 우| 윈도우11에서의 프린터 자가증식??? [6] | 뽀로로 | 629 | 08-03 |
» | 기 타| 압축백업에서 7일안에 해당되는 자료를 백업하려고 하는데 [8] | 열심히하자 | 296 | 08-03 |
94274 | 윈 도 우| 현재 윈도우11 22622.450 사용중입니다만 [2] | QOR | 469 | 08-03 |
날짜얻는거 그냥 지난답변 참고하시면 될텐데요.
저는 저거 그대로 복붙해서 돌리면
20220727 이라고 나옵니다.
앞에서도 설명했지만
08 09를 숫자로 파싱하면 10진수가 아니라 8진수로 시도하는 언어들이 있습니다.
배치파일도 그런게 있어서 본문에 08 09를 따로 처리한 모양이구요.
7월까진 괜찮았는데 8월부터 괜찮지 않다면
그 처리가 잘못돼서 그럴겁니다.
딱 "08"이잖아요.
지금 본문에 해놓은거
정말 불필요하게 복잡한 처리입니다.
파워셸이 되는 이상 파워쉘로 딱 한줄로 처리하면 끝납니다.
(윤년이나 월별처리 같은거 다 기본적으로 처리해줍니다)
vbscript로도 가능합니다만
제가 해보니 파워셸보다는 좀 더 길고 복잡하더군요.
(다만 vbscript를 이용할경우 XP는 물론 아마 윈98급에서도 통할겁니다. 파워셸이 윈7부터인가 지원됐을테니 그건 안되겠죠.)
(파워쉘이 XP도 되긴 될겁니다만 구버전에 기본지원은 아닌걸로 압니다.)
아무튼 먼저 번 답글에서 지후빠님이 알려주신
for /f %A in ('powershell ^(Get-Date^).AddDays^(-7^).ToString^(^'yyyyMMdd^'^)') do echo %A
이걸 쓰시는걸 권장드립니다.
본문에 맞게 고치면
for /f %%a in ('powershell ^(Get-Date^).AddDays^(-7^).ToString^(^'yyyyMMdd^'^)') do set rarDate=%%a
이러면 되겠죠.
이걸 못 쓸 이유라도 있으신가요? 지금 해보니 잘 되는데요.
그리고 9일문제는 10과의 자릿수 문제가 아닐까 짐작은 됩니다만
본문만봐서는 별 문제 없어보이는데 모르겠네요.
애초에 저는 본문에서 20220727이 잘 나오거든요.
그런데 님이 실제로 사용하시는건 뭔가 빼먹은게 있는거 아닐까요?