기 타 배치파일 해설 좀 부탁드립니다.
2021.06.29 23:05
안녕하세요?
각 폴더별로 압축할 일이 있어 찾던 중 7-zip으로 아래와 같은 스크립트를 발견하고 압축할 폴더들이 모여 있는 곳에서
관리자권한으로 실행했더니 system32 폴더안의 각 폴더들이 압축이 됩니다.
......이해가 안가는..........system32는 왜 건드리는지??
그런데 관리자권한이 아니면 잘 작동합니다.......... 왜 그렇지요??
for /d %%X in (*) do (for /d %%a in (%%X) do ( "C:\Program Files\7-Zip\7z.exe" a -tzip "%%X.zip" ".\%%X\" ))
왜 이럴까요?
참고로 혹시 필요하신 분 계실까봐............아래의 스크립트는 정상적으로 잘 작동합니다.
for /d %%X in (*) do "c:\Program Files\7-Zip\7z.exe" a "%%X.zip" "%%X\" |
댓글 [4]
-
DarknessAngel 2021.06.30 08:25
-
밤이슬216 2021.07.01 14:22
답급 감사합니다.
-
메리아 2021.06.30 10:45
원래 관리자 권한의 기본위치가 system32/syswow64 등이기 때문입니다.
방법 1. 맨처음에 CD /D "%~dp0" 실행하면 해결됨.
방법 2. 1번 방법은 경로문제를 다른쪽에서 일으킬 수 있음.
만에하나 다른쪽에서 문제가 될 경우를 대비하면(경로 변경 때문에 다른 배치파일이나 프로그램이 문제될 수 있음.)
<맨처음>
SETLOCAL ENABLEDELAYEDEXPANSION
pushd "%CD%"
CD /D "%~dp0"
...
<종료직전> - 맨 끝이 아님에 주의. 중간에 종료시키는 경우도 있기에.
popd
~종료코드
(사실 그냥 방법 1 한줄이면 대개 문제없는데, 간혹 여러가지 섞어쓰다보면 이상해지는 경우가 있어서 되도록 방법 2로 하는걸 추천.)
(pushd popd는 스택입니다. 즉, 시작할때 스택에 현재경로 밀어넣고 경로 바꾸고 작업한 뒤에, 현재 경로를 마지막에 복구 시키는 방식입니다.)
아래에 현재 경로를 확인하는 간단한 배치파일입니다.
복붙하시고, 각각 일반 실행과 관리자 실행을 해보세요.
어떻게 변하는지 잘 보시면, 어떻게 활용해야할지 알 수 있습니다.
----------------------------------------------------------------
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
echo.
echo.
echo 실행경로
echo %~dp0
echo 실행드라이브
echo %~d0
echo.
echo.
echo.
echo.
echo 최초 상태
echo 현재경로
echo %CD%
echo.
echo.
echo cmd 실행위치로 이동
pushd "%CD%"
CD /D "%~dp0"
echo 현재경로
echo %CD%
echo.
echo.
echo popd 후
popd
echo 현재경로
echo %CD%
echo.
echo.
pause
-
밤이슬216 2021.07.01 14:24
엄청난 답변에 너무 감사드립니다. 잘 공부해보겠습니다. 고맙습니다.
%dp%에서 현제 경로값 가져와서 이동하게 해주면 될듯합니다