윈 도 우 소소한 배치파일 팁 2가지(start 명령, %time%)
2022.05.26 14:49
최근 배치파일 작성하다 문제가 생긴거 있어서 팁으로 남겨봅니다.
1. start 명령
cmd창,배치파일에서 쓰는 start명령이 있는데요.
기본 사용법은
start "창제목" "실행파일명"
start /wait "창제목" "실행파일명"
보통
start "" "notepad.exe"
이런식으로 많이 씁니다.
보통 "새창"으로 실행할때 좋아서 많이 쓰죠.
옵션 설명
/wait : 이거 없으면 멀티로 따로 실행하고 배치파일 프로세스 즉시 진행. 있으면 새로 열린 창을 닫을때까지 배치실행이 여기서 멈춤.
"창제목" : 보통 그냥 비워둬도 됨. <- 제 경우 문제가 된 부분이 이거. 후술하겠음.
"실행파일명" : 같은경로나 공통경로에 있는건 당연히 파일명만, 아니면 fullpath로 입력.
ㄴ exe등 실행파일
ㄴ txt jpg등 일반파일은 연결된 파일로 실행됨(즉 탐색기 더블클릭이랑 같음)
ㄴ 폴더경로가 있으면 새 탐색기 열어서 바로 열어줌. 즉 이거 이용하면 자동으로 여러 경로 여는 배치파일 작성 가능.
ㄴ cmd bat 등 새창으로 cmd창 열어서 따로 실행하는 것도 가능 <- 이것도 문제가 된 부분. 후술함.
/min : 위의 예시에는 없으나, 최소화 실행하는 옵션. 안먹히거나 보안설정에 막히는 경우도 있음. 탐색기를 최소화 상태로 여는데 유리.
start 명령 쓰다가 제가 문제가 생긴 부분은
start "" "실행.cmd" 이런 방식입니다.
엔간한건 다 "창제목"을 비워도 되는데, cmd bat만큼은 "창제목"에 뭐라도 넣어야합니다.
안넣고 실행하면
"메모리 리소스가 부족하여 이 명령을 처리할 수 없습니다."
라는 오류를 끝에 뿜어냅니다.(실제 메인 실행에 문제가 되진 않습니다.)
그러므로 배치파일을 start 명령으로 돌릴땐 창 제목을 임의로 넣어주세요. 나머지는 보통 비우고 써도 됩니다.(오히려 비워야만 하는경우가 많음)
참고로 새창 안열고 같은 창에서 배치파일 열때는 대개 call 명령을 씁니다.
2. %time% 문제
제가 얼마전에 일부백업 하는 문제로 문의도 하고 해법을 배워가고 제 해법도 올리고 그랬습니다.
그런데 쓰다보니 문제가 되는 부분이 있더군요.
예를들어 시각 정보가 필요한데,
배치파일상에서 현재의 yyyy-mm-dd와 hh:mm:ss의 시각정보를
yyyymmddhhmmss 형태로 얻어야합니다.
그래서
set "start_yyyymmddhhmmss=%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%"
라는 명령을 썼더랬습니다.
그런데 이게 오류가 생기더군요.
배치파일에서
%date%와 %time%의 값을 배치파일에서 얻을때
2022-05-26 14:43:11.27
이런 형태로 얻게 됩니다.
문제는 14시가 아니라 04시인 경우에는
2022-05-26 14:43:11.27
2022-05-26 4:43:11.27
이런식으로 0 패딩 없이 값이 나옵니다.
즉 yyyymmddhhmmss를 뽑으면
20220526 44311
로 나와서 제대로 사용이 어려워집니다.
이걸 해결하는 방법은 여러가지가 있겠으나, 배치파일은 기본적으로 연산같은게 불편하기 때문에
저는 아래와 같이 씁니다.
if "%start_yyyymmddhhmmss:~8,1%" == " " (
set "start_yyyymmddhhmmss=%start_yyyymmddhhmmss:~0,8%0%start_yyyymmddhhmmss:~9%"
)
그냥 간단하게 0 자리가 비어 있으면 0 채우는 구문입니다.
연산으로 하는게 더 분명하겠지만, 저렇게 편법을 좀 써봤습니다.
20220526 44311
->
20220526044311
이렇게 바뀝니다.
아무튼 %time%은 제로패딩 없이 값이 나오니까 주의 바랍니다. ^^
댓글 [7]
-
컨피그 2022.05.26 19:03
-
메리아 2022.05.26 20:06
오~ 훨씬 좋은 방법이 있었군요.
배워갑니다 ^^
-
컨피그 2022.05.27 01:51
시간을 저렇게 쓸일이 없어서 몰랐는데
확인해보니 진짜 날짜나 분, 초에서는 안그런데 시간 부분만 공백이 발생하네요
set tm=%time: =0%
echo %tm:~0,2%%tm:~3,2%%tm:~6,2%
-
지후빠 2022.05.26 22:58
다음처럼 실행하면 문제가 될까요?
> start 실행.cmd
> start "배치파일 실행.cmd"
날짜와 시간 포맷이 위에서 처럼 일정하다면, (굳이) 한줄로 만들면 다음처럼도 가능할 것 같습니다. ^^;
> set _t=%time:~0,8%&call set _t=%_t: =0%&call set _dt=%date:-=%%_t::=%
> echo %_dt%
-
한아름 2022.05.30 09:16
오 좋은 강좌 감사합니다
정규 코너 함 만들어도 좋을듯합니다 초보다 보니,,,ㅎㅎ
감사합니다
-
메고길 2022.06.12 13:22 감사합니다. 잘 배워습니다.
-
슈머슈마 2022.07.09 08:58
감사합니다.
번호 | 제목 | 글쓴이 | 조회 | 추천 | 등록일 |
---|---|---|---|---|---|
[공지] | 강좌 작성간 참고해주세요 | gooddew | - | - | - |
4400 | 윈 도 우| [실사] VHD 교차부팅 수동&자동 등록 [18] | 무월 | 1973 | 32 | 10-07 |
4399 | 소프트웨어| EDGE 브라우저 창 크기 "최대화" 고정 하기 [1] | 미스라 | 1478 | 6 | 10-03 |
4398 | 윈 도 우| [갱신] 윈도우 11 로컬 계정 암호 변경 [14] | 무월 | 2243 | 18 | 09-27 |
4397 | 소프트웨어| 테라카피(Teracopy) 3.12 설치팁 [7] | 메리아 | 2315 | 17 | 09-27 |
4396 | 소프트웨어| PDF-XChange Editor 기본글꼴 바꾸기 [1] | 코리아선비 | 890 | 3 | 09-25 |
4395 | 윈 도 우| Windows 11에서 광고 팝업을 끄는 방법 [5] | VᴇɴᴜꜱGɪ | 3097 | 8 | 09-22 |
4394 | 소프트웨어| [포토샵] 인물 누끼따기 외곽선 정리 [12] | 무월 | 2555 | 37 | 09-20 |
4393 | 윈 도 우| 윈도우 11 로컬 계정 암호 재설정 [15] | 무월 | 1777 | 29 | 09-18 |
4392 | 윈 도 우| 윈도우11 에서 창 깜박거림이나 입력글자가 사라지는 경우 [5] | Named | 1554 | 2 | 09-14 |
4391 | 소프트웨어| PE 동영상 썸네일 표시 [3] | 히이이잌 | 673 | 16 | 09-14 |
4390 | 모 바 일| [팁] 카톡 '전화번호로 친구 추가 허용' 기능 추가 [2] | asklee | 1595 | 4 | 09-13 |
4389 | 윈 도 우| Microsoft는 최근 Windows 11 WinRE 업데이트가 실패한 이... [2] | VᴇɴᴜꜱGɪ | 1493 | 4 | 09-10 |
4388 | 윈 도 우| 바로가기 아이콘을 만들어 원 클릭으로 디펜더 온 오프 메... [8] | heykevin | 1298 | 20 | 09-09 |
4387 | 소프트웨어| 64bit 프로그램 한글화 강좌 [4] | 夕影 | 1756 | 7 | 09-09 |
4386 | 소프트웨어| [엑셀] 선택된 셀, 행, 열 강조 하기! [13] | 무월 | 2552 | 28 | 08-31 |
4385 | 소프트웨어| Microsoft Edge를 사용하여 YouTube 스크린샷을 찍는 방법 [3] | Security_Z | 1346 | 5 | 08-30 |
4384 | 윈 도 우| [실사] 윈도우 11 VHD 교차부팅(자동) 설정 - VHDMan [16] | 무월 | 1952 | 35 | 08-26 |
4383 | 소프트웨어| Microsoft Edge IE모드 구성하기 [10] | 무월 | 1835 | 22 | 08-26 |
4382 | 윈 도 우| [3탄] PE빌드를 위한 누적 업데이트 통합 (Winre.wim + ins... [14] | 무월 | 1275 | 26 | 08-25 |
4381 | 윈 도 우| 텍스트 파일 하위 폴더 파일 포함 병합하기! [11] | 무월 | 820 | 27 | 08-23 |
time 에서 저렇게 if문을 써서 하시는 거 보다
%aaa: =0%
이런식으로 aaa 변수의 모든 공백을 0으로 고치는 방법을 활용하면 어떨까 싶네요