기 타 for /f %%a in ('dir /b ') do (set /a i+=1 ~구문 문의 드립니다.
2023.05.31 13:24
1. 첫번째 질문
2. 두 번째 질문
:Recover
cls
echo ============================================================================
echo.
echo. ♣♣♣♣♣♣ 복 구 메 뉴 ♣♣♣♣♣♣
echo.
echo ============================================================================
echo.
echo. ① 시스템 드라이브 〔 %sysdrv%:\ 〕
echo. ② 백업용 드라이브 〔 %datadrv%:\ 〕
echo.
echo ----------------------------------------------------------------------------
echo. 번호 복구할 리스트 메뉴 (M) 종료 (X)
echo ----------------------------------------------------------------------------
for /f %%a in ('dir /b %datadrv%:\data') do (set /a j+=1& echo 〔 !j! 〕 %%a& Set restore!j!_=%%a)
echo ============================================================================
echo.
set /p input=". [▶ 복구할 리스트 선택 : "
IF /i %input%==m goto Main
IF /i %input%==x goto Exit ----------------->m, x는 메인메뉴로 이동하게 되어 있습니다.
for /f "tokens=2 delims==" %%a in ('Set restore!input!_') do (set restore=%%a)
IF EXIST %datadrv%:\data\%restore% ( goto RecoverA )
exit
:RecoverA
cls
echo ============================================================================
echo.
echo. ♣♣♣♣♣♣ 복 구 계 정 ♣♣♣♣♣♣
echo.
echo ============================================================================
echo.
wmic logicaldisk get deviceid, volumename, size, freespace, description
echo.
echo. ① 시스템 드라이브 〔 %sysdrv%:\ 〕
echo. ② 백업용 드라이브 〔 %datadrv%:\ 〕
echo.
echo ----------------------------------------------------------------------------
echo. 번호 계정 리스트 메뉴 (M) 종료 (X)
echo ----------------------------------------------------------------------------
for /f %%g in ('dir /b %sysdrv%:\Users') do (set /a k+=1& echo 〔 !k! 〕 %%g& Set userid!k!_=%%g)
echo ============================================================================
echo.
set /p input=". [▶ 복구할 계정 선택 : "
IF /i %input%==m goto Main
IF /i %input%==x goto Exit
for /f "tokens=2 delims==" %%g in ('Set userid!input!_') do (set userid=%%g)
IF %userid% == Public goto Recover -------------------------------->> 계정을 잘못 쳤을 경우 이동하게 되어 있음
set dr=%datadrv%:\data\%restore%
set db=%sysdrv%:\Users\%userid%
echo. [▶〔%restore%〕복구〔%db%〕합니다.
pause >nul
댓글 [21]
-
Sam4Amor 2023.05.31 13:33
-
세이퍼컴 2023.05.31 13:43
int i = 0
int j = 0
int k = 0
메인화면에 추가해도 안되네요
-
Sam4Amor 2023.05.31 13:46
-
세이퍼컴 2023.05.31 14:21
웬만한 건 다해 봤어요~~~
-
Sam4Amor 2023.05.31 15:15
각 부분에 (main, Recover 등) 변수 선언 전에 SETLOCAL 넣고 goto 문 전에 ENDLOCAL 을 넣으시면요?
근데 그러려면 SETLOCAL 전에 datadrv, sysdrv, userid 같은 변수는 미리 선언을 하셔야 되긴 하겠네요
-
세이퍼컴 2023.05.31 16:49
그럼 계정을 선택하지말고, 백업data도 선택하지 말고 하면 제가 만든게 뭔 소용있겠어요....
처음 실행(백업용drv)부터 전부 연계된 값을 이용하는 것인데..
그런 걸루 배치파일 왜 만들겠어요? 관심가져주시는건 정말 고맙지만 그냥 볼일 보시는게 더 도움될 듯합니다
-
Sam4Amor 2023.05.31 16:54
뭔가 좀 오해를 하시는거 같은데요, 지속적으로 사용할 변수를 사전에 선언해 놓고 초기화 되야 하는 변수가 있는 부분만 SETLOCAL 로 닫으라는 얘긴데 왜 짜증을 내시는지 모르겠네요
그런걸로 짜증 내실거면 아예 묻지를 마시고 혼자 알아서 처리하세요.
-
지후빠 2023.05.31 19:00
cls 위나 아래에 set i=0 추가해주시면 될 것 같습니다. 0으로 어차피 초기화할 것이면 혼동되지 않게 i,j,k 모두 i로 통일해서 사용하셔도 좋을 듯 싶습니다. 저 같으면 set i=0& set ii=& cls 처럼 사용할 것 같습니다. 전에 올려드린 data_backup_3.cmd에 있는 내용입니다.^^
-
지후빠 2023.05.31 19:12
두번째 문제는 다음을 참고해보십시오. ^^
data_backup_4.cmd -
지후빠 2023.05.31 20:47
추가 수정 data_backup_4.cmd
set i=0& set ii=& cls
-
세이퍼컴 2023.05.31 21:57
i j k 같이 하면 충돌납니다.
그리고 복구는
데이타 선택후->계정확인후-> 그계정으로 복사해야 하는데
알맹이빠진 껍데기폴더만.. C::\users\폴더에 계정없이 복사
1. 그래서 d:\data폴더 선택화면을 j로 맞추기
알맹이 복사는 됩니다만.-->여전히 c:\users에 폴더 왕창생성
여전히
계정userid을 못잡아올립니다.
Choice i ii 설정문제
-
지후빠 2023.05.31 22:20
계속 댓글이 사라지네요. 이런...ㅜㅜ
cls 근처에서 i를 초기화 할 것이라 i j k 같이 써도 괜찮을 것 같은데 전체 스크립트를 알지 못하여 단정하기 어렵네요.
스샷에 행 위치가 바뀌어 있네요. choice와 if 문 순서 확인해보시구요. 여기에서 %userid%는 전체 경로입니다.
for /d %%# in (%sysdrv%:\Users\*) do if not "%%~nx#"=="Public" (set /a i+=1& echo 〔 !i! 〕 %%~nx#& set "usr!i!_=%%#"& set ii=!ii!!i!)
echo ============================================================================&echo.
choice /c %ii%mx /m ". ▶ 복구할 계정 선택 : "
if %errorlevel% leq %i% (set "userid=!usr%errorlevel%_!") else if %errorlevel% equ %i% (goto Exit) else goto Main
set dr=%datadrv%:\data\%restore%
set db=%userid%
echo %db%
가능하시면 파일 암호걸어 압축파일로 올려주실 수 있을까요? 암호는 쪽지로...
-
세이퍼컴 2023.06.01 00:23
(%sysdrv%:\Users\*)
%%#가 c:\
c:\users\c:\user안에 복구됩니다
.
useid는 꼭
계정이름으로 부탁드립니다. 계정명을 사용해야합니다,
userid를 전체 경로로 하면 안됩니다. 복구와 백업이 같이 물려서 계정으로만..
백업은 %%#\data\날짜 = %datadrv%:\data\날짜
복구는 %%#\users\계정 = %sysdrv%:\users\계정
날짜폴더 계정폴더와 드라이브는 함수는 따로 구별지워 놓아야....
"무슨계정을 백업이나 복구했다"라는 문구가 꼭 필요(user_id=계정이름)
또한 전부다 새로 고쳐야 합니다. 나중에 수정하기도 힘들죠
1. 백 업 : 백업용드라이브-> 메인->#백업할 계정선택# -> 백업할 옵션설정 -> 백업시작
2. 복 구 : 메인 ->#날짜폴더선택# -> #복구할 계정설정# -> 복구시작
#표시된 것이 for 문장 쿼리선택이 필요한곳(백업옵션은 notepad)
이것은 코드가 좀 이상합니다
IF %errorlevel% leq %i% (set "userid=!usr%errorlevel%_!") 이하이면c:\users\(현재) -->>>같으면 계정(백업이나복구시작)
else if %errorlevel% equ %i% (goto Exit) 같으면 종료가 아니고 -->>>복구작업진행
else goto Main ----->>>아니면 메인 또는 이전메뉴로 이동
백업 또는 복구에 따라 계정설정화면 순서가 틀려짐.
적고보니 비판처럼 보이네요.. 죄송합니다~~ 기왕해주시는 것 잘봐주세요
거듭 부탁드립니다. 수고하세요
-
지후빠 2023.06.01 06:44
얼마전 수정 테스트 하던 것을 그대로 올렸더니 미처 고려하지 못한 것이 있었습니다. 번거롭게 해드려 죄송합니다.
for /d %%# in (%sysdrv%:\Users\*) do if not "%%~nx#"=="Public" (set /a i+=1& echo 〔 !i! 〕 %%~nx#& set "usr!i!_=%%~nx#"& set ii=!ii!!i!)
echo ============================================================================&echo.
choice /c %ii%mx /m ". ▶ 복구할 계정 선택 : "
if %errorlevel% leq %i% (set "userid=!usr%errorlevel%_!") else if %errorlevel% equ 3 (goto Main) else goto 복구
set dr=%datadrv%:\data\%restore%
set db=%sysdrv%:\Users\%userid%
echo %db%
올려주신 자료를 제 방식으로 정리해보겠습니다.
첨부 파일은 지우셔도 될 것 같습니다.
-
지후빠 2023.06.01 14:15
점심시간에 화면 표시부분만 일부 (절반 정도?) 수정해봤습니다. 보내주신 암호와 같습니다.
백업복구v8.1.7z -
세이퍼컴 2023.06.01 15:58
밤샘후 집에서 눈 붙이고
조금전에 매장에 와서 test했습니다.
훌륭합니다...
감사합니다.
-
지후빠 2023.06.01 23:46
백업복구 v8.2.7z기본적인 것은 정리한 것 같은데요. OptionList.ini 처리 로직을 정리할 필요가 있습니다.예를 들면, 배치파일과 같은 폴더에서 OptionList.ini 열어서 백업 후 백업폴더로 OptionList.ini 를 복사하여 다음에 복구시 활용할 수 있겠습니다. 늦어서 테스트를 제대로 못하여 테스트하시면서 오류 잡으시면 좋겠습니다. ^^
-
세이퍼컴 2023.06.02 14:40
if ~ else if ~ else ~ 구문
else if만 작동안합니다,
바로 else로 넘어가네요
-
지후빠 2023.06.02 20:50
짬짬히 수정하였습니다. 좀 하다보니 이제사 퇴근할 것 같습니다.^^
백업복구 v8.4.zip; 테스트가 충분치 않습니다. 충분히 테스트 후 사용하십시오.- 백업 폴더 이름을 [날짜]-[계정이름]-[번호] 로 설정하였습니다.
- OptionList.ini 를 백업 폴더에 이동합니다. 복원시 이 파일을 기준으로 선택한 계정에 복원합니다.
- 날짜는 wmic OS Get localdatetime 이용하였습니다. %date%는 각 PC 설정마다 달라집니다.
- 계정 10개 이상은 없을 것 같아서 10 이상은 처리 불가 메세지 출력 후 종료하도록하였습니다.
- 백업 리스트에서는 set /p 로 바꿨습니다... 나머지는 잘 살펴보십시오. 기억이...
-
지후빠 2023.06.02 22:46
mx 미처 확인 못하였습니다. 수정하였습니다.^^
-
세이퍼컴 2023.06.03 17:34
많이 피곤해서 집에서 쉬었다가
지금와서 test했습니다.
그동안 감사했습니다.위 에러 포함하여 소소한 에러들은 제가 다 잡았습니다.거듭 감사드립니다.말씀하신 인증서 부분도 수정했습니다.백업복구 v9.2.exe
간단하게 :main 이랑 :Recover, :RecoverA 바로 아래 라인에 각 변수들을 0으로 세팅하면 되지 않으실까요?