기 타 cmd DeviceID추출 for /f "tokens=2 delims==" 문의 드립니다.
2023.05.26 10:23
질문)
1. 윗 그림의 2번 : 드라이브 문자를 넣을시 잘못 입력하면
더이상 작업진행이 안되고, 당연히 에러가 뜹니다.
2. deviceID를 추출비교하여,
다른 문자나 공백시
error 메세지 출력과 함께
goto :sel_Bdisk ; (드라이브 선택 메뉴로 다시 돌아가게 할 수 없을까요?
3. 값이 일치하면 main메뉴로 이동하는 것만 가능합니다...
하지만.. if문 -- for문 선후도 맞춰줘야 할것 같아서요...
물론 잘 입력하거나 다시 클릭하면 됩니다만
간혹 에러 띄우는 게, 눈에 가시네요
선생님들의 가르침 부탁드립니다.
cmd 내용====================
@echo off
mode con cols=76 lines=30
Color 1F
setlocal enabledelayedexpansion
echo 관리자권한 확인용 >%windir%\admin.confirm || @(
echo Set UAC = CreateObject^("Shell.Application"^) > "%tmp%\admin.vbs"
echo UAC.ShellExecute "%~0", "", "", "runas", 1 >> "%tmp%\admin.vbs"
"%tmp%\admin.vbs" & del "%tmp%\admin.vbs" & exit)
del %windir%\admin.confirm
cls
FOR %%t IN (C D E F G H I J K L M N O P Q R S T U V W) DO IF EXIST %%t:\data SET datadrv=%%t
FOR %%s IN (C D E F G H I J K L M N O P Q R S T U V W) DO IF EXIST %%s:\Windows\System32\sysprep SET sysdrv=%%s
IF EXIST %datadrv%:\data (GOTO Main) ELSE (
goto sel_Bdisk
)
:sel_Bdisk
echo ============================================================================
echo. ♣♣♣♣♣♣ 백업용드라이브 선택 ♣♣♣♣♣♣
echo ============================================================================
wmic logicaldisk get deviceid, volumename, size
echo. ① 시스템 드라이브 〔 %sysdrv%:\ 〕
echo. ② 백업용 드라이브 〔 %datadrv%:\ 〕
echo ============================================================================
echo.
:: 백업 드라이브 생성
set /p drvsel=". [▶ 백업용 드라이브 선택 (알파벳만 입력): "
set datadrv=%drvsel%
IF not exist "%drvsel%:\data" md "%drvsel%:\data" goto main
goto main
:Main
set dd=%date:~0,4%%date:~5,2%%date:~8,2%
cls
echo ----------------------------------------------------------------------------
echo. ♣♣♣♣♣♣ 메 인 메 뉴 ♣♣♣♣♣♣
echo ----------------------------------------------------------------------------
wmic logicaldisk get deviceid, volumename, size, description
echo. ① 시스템 드라이브 〔 %sysdrv%:\ 〕
echo. ② 백업용 드라이브 〔 %datadrv%:\ 〕
echo ----------------------------------------------------------------------------
echo. 【 1 】 백 업 【 M 】 메 뉴
echo. 【 2 】 복 구 【 X 】 종 료
echo ----------------------------------------------------------------------------
echo.
choice /c 12mx /M ". [▶ 작업할 번호선택 : "
if %errorlevel%==1 goto Backup
if %errorlevel%==2 goto Recover
if %errorlevel%==3 goto Main
if %errorlevel%==4 goto exit
goto exit
:recover
pause >null
:exit
endlocal
pause
exit
댓글 [24]
-
Sam4Amor 2023.05.26 10:34
-
세이퍼컴 2023.05.26 10:47
채워봤지만..
엉뚱한 값을 넣으면
에러라서.. 질문드리는 겁니다.
확률적으로 if문 속에 if을 ..계속 넣으려면.. 한달 넘어 걸릴 듯하네요..
알파벳24+한글자모+기호 ===기하학적인 확률이 잖습니까? 제 머리론 1년은 넘어걸릴 것 같네요
제가 이쪽으론 둔해서...
wmic logicaldisk 추출 비교하여, 값이 있으면 goto main 할 방법은 없을까요?
이런 방식이 다른 데도 필요해서..
-
Sam4Amor 2023.05.26 11:47
아까도 말씀 드렸지만 :sel_Bdisk 아래에 cls 는 추가하시구요
:: 백업 드라이브 생성
set /p drvsel=". [▶ 백업용 드라이브 선택 (알파벳만 입력): "
set datadrv=%drvsel%
for /f "tokens=2 delims==:" %%A in ('wmic nic get DeviceID /VALUE') do (set "_check=%%A")
if %_check%==%drvsel% goto main
cd %drvsel%:
if %errorlevel%==1 goto _Error
goto main
:_Error
set datadrv=Error
goto sel_Bdisk
-
Sam4Amor 2023.05.26 10:47
추가로 아래 부분은 다음변경하시는게 나을 것 같습니다. 어차피 관리자 모드로 실행시키시면 에러 메세지를 굳이 띄울 필요가 없죠
setlocal enabledelayedexpansion
echo 관리자권한 확인용 >%windir%\admin.confirm || @(
echo Set UAC = CreateObject^("Shell.Application"^) > "%tmp%\admin.vbs"
echo UAC.ShellExecute "%~0", "", "", "runas", 1 >> "%tmp%\admin.vbs"
"%tmp%\admin.vbs" & del "%tmp%\admin.vbs" & exit)
del %windir%\admin.confirm
cls
그리고,
mode con cols=76 lines=30
Color 1F
는 아래로 보내시구요
setlocal EnableExtensions
setlocal EnableDelayedExpansion
set "params=%*"
cd /d "%~dp0" && ( if exist "%temp%\getadmin.vbs" del "%temp%\getadmin.vbs" ) && fsutil dirty query %systemdrive% 1>nul 2>nul || ( echo Set UAC = CreateObject^("Shell.Application"^) : UAC.ShellExecute "cmd.exe", "/k cd ""%~sdp0"" && %~s0 %params%", "", "runas", 1 >> "%temp%\getadmin.vbs" && "%temp%\getadmin.vbs" && exit /B )
mode con cols=76 lines=30
Color 1F
-
왕초보 2023.05.26 11:29
좋은것을 만들고 계시네요..일단 저는 실행할때 main 폴더가 만들어지는것만 체크를 했습니다
1. 아래줄에 goto 가 있는데 data 만들기 이후에 또 있습니다
2. d를 선택하였습니다
3. 선택된것이 보입니다
4. data와 main 폴더가 만들어졌습니다..main은 만들지 않아야 하는것 같습니다
5. goto main을 삭제하였습니다
-
왕초보 2023.05.26 11:42
고객용 데이타 백업,복구를 어떻게 하는것인지는 cmd에 나와 있지 않고 방법도 잘 모르고 cmd를 윈도우에서 사용하는것인지
pe에서 사용하는것인지를 몰라서 아래 내용이 틀릴수 있습니다..감안을 하고 보아 주십시요
1. 윈도우에서 실행시 윈도우가 2개인 경우 나중에 검색되는것이 시스템으로 표시가 됩니다
2. 백업 파티션 드라이브를 입력시에 설정 가능한 드라이브(시스템 드라이브로 설정된 드라이브 문자 제외한 드라이브 문자)를
저장을 해서 이것과 입력한것과 비교를 해서 있는 경우에서 다음으로 넘어가는 방식을 원하시는것 같습니다
드라이브 문자를 cmd에 보여주는 아래 명령어를 for문에서 실행후 필요한 정보를 보여주면서 시스템 드라이브 문자, CD롬 문자를
제외한 드라이브 문자를 저장해서 이것과 입력한 드라이브 문자를 다시 비교를 해야 합니다.
글로는 설명이 되는데 cmd로는..저도 기억이 가물가물해서 일단 이런 식으로 구현을 되어야 할것 같습니다
지후빠님이 이분야의 대가 이셔서 지후빠님께서 도움을 주시면 해결이 될것 같습니다
wmic logicaldisk get deviceid, volumename, size, description
-
세이퍼컴 2023.05.26 12:09
이것 저것 계속 실험중이다보니 남아 있었네요..
system32\sysprep 폴더가 있으면 -> 시스템 drv
백업 drv:\data 폴더가 있으면 -> 백업용 drv
=====> 이런 경우는 바로 main 화면으로 가고
=====> data폴더가 없어서 자동검색이 안되면
드라이브를 위와 같이 선택하면
선택된 드라이브에 data폴더 만든 후(그럼 datadrv가 되겠죠)
=> main화면으로 입장하도록 되어 있습니다.
키보드 숫자판 몇번으로 바로 백업하게 만들었죠(pe에서도 사용가능)..
옵션은 모자님 옵션 변경적용
-
Sam4Amor 2023.05.26 12:12
원하시는 커맨드 위에 있는데요, 추가로 더 필요하신가요?
-
세이퍼컴 2023.05.26 12:16
옙...
쉽게사용하려니
좀 복잡합니다.
-
Sam4Amor 2023.05.26 12:20
올리신 커맨드가 전체가 아니여서.. 파일로 올려 주시면 필요하신 부분을 추가로 수정해 드릴 수가 있을텐데요
-
지후빠 2023.05.26 13:39
잘 이해했는지 모르겠습니다. 다음을 참고해보십시오. ^^
@echo off & setlocal enabledelayedexpansion
wmic logicaldisk where (drivetype=2 or drivetype=3 or drivetype=4) get deviceid
for /f "skip=1 tokens=1 delims=: " %%# in ('wmic logicaldisk where ^(drivetype^=2 or drivetype^=3 or drivetype^=4^) get deviceid') do set drvs=!drvs!%%#
echo %drvs%
choice /c %drvs% /m "드라이브 입력 : "
set /a drv=%errorlevel%-1
set drv=!drvs:~%drv%,1!
echo %drv%
pause
-
세이퍼컴 2023.05.26 14:01
감사합니다. 여기저기 적용할때가 많아서.. 연구해보겠습니다. 거듭감사합니다
-
지후빠 2023.05.26 16:15
for 문을 다음처럼 해도 좋을 것 같습니다. ^^
for /f "skip=1 tokens=1 delims=: " %%# in ('"wmic logicaldisk where (drivetype=2 or drivetype=3 or drivetype=4) get deviceid"') do set drvs=!drvs!%%#
-
세이퍼컴 2023.05.26 17:15
속도가 엄청 쳐지네요. -
지후빠 2023.05.26 18:55
그럴리가요 ^^
아래 두줄 중에 하나 골라서 사용해도 됩니다. drivetype=2,3,4 가 저장 가능...
for /f "tokens=*" %%# in ('"wmic logicaldisk get deviceid, volumename, size"') do (echo.%%#
for /f "tokens=*" %%# in ('"wmic logicaldisk where (drivetype=2 or drivetype=3 or drivetype=4) get deviceid,volumename,size"') do (echo.%%#
:sel_Bdisk
echo ============================================================================
echo. ♣♣♣♣♣♣ 백업용드라이브 선택 ♣♣♣♣♣♣
echo ============================================================================
::for /f "tokens=*" %%# in ('"wmic logicaldisk get deviceid, volumename, size"') do (echo.%%#
for /f "tokens=*" %%# in ('"wmic logicaldisk where (drivetype=2 or drivetype=3 or drivetype=4) get deviceid,volumename,size"') do (echo.%%#
set #=%%#& if "!#:~1,1!"==":" set drvs=!drvs!!#:~0,1!)
echo. ① 시스템 드라이브 〔 %sysdrv%:\ 〕
echo. ② 백업용 드라이브 〔 %datadrv%:\ 〕
echo ============================================================================
echo.
choice /c %drvs% /m ". [▶ 백업용 드라이브 선택 (알파벳만 입력): "
set /a drvsel=%errorlevel%-1
set drvsel=!drvs:~%drvsel%,1!
set datadrv=%drvsel%
IF not exist "%drvsel%:\data" md "%drvsel%:\data" goto main
goto main
-
왕초보 2023.05.26 21:21
지후빠님 감사합니다..
덕분에 좋은것을 배웠습니다
편안하신 시간이 되시길 바랍니다
-
지후빠 2023.05.26 23:19
좀 더 정리하다 멈췄습니다. ^^
data_backup_2.cmd -
세이퍼컴 2023.05.27 13:00
수고하십니다~~
실행해보니
c-->md H:\data
d-->md H:\data
g-->md H:\data
h-->md H:\data
모두 H드라이브에 만들어 집니다.
set /a datadrv=errorlevel-1
아래와 같이 바꿔야 되네요
set /a datadrv=%errorlevel%-1
감사합니다
-
지후빠 2023.05.27 14:32
넵 그렇군요 ^^ 수정하다 말았습니다. 확인 감사합니다.^^
data_backup_2.cmd ; 해당 부분만 수정하여 다시 올립니다.~
-
세이퍼컴 2023.05.28 01:34
이제 마무리 했습니다.
도움주셔서 감사합니다
제작한 파일 첨부합니다. 혹 test부탁드려도 될련지요
-
지후빠 2023.05.28 12:48
내일 출근해서 테스트 해보겠습니다. ^^
제 스타일로 위의 것 좀 더 수정해봤습니다. data_backup_3.cmd
-
세이퍼컴 2023.05.28 13:30
저 나름 한계적 완성작..배치파일 올려드립니다
-
지후빠 2023.05.28 20:41
감사합니다. ^^천천히 보겠습니다.~
-
세이퍼컴 2023.05.30 07:04
완성했습니다.
지후빠님 감사합니다
1. 백업할 드라이브에 data폴더가 없을 때 저음 뜨는 화면
2. data폴더가 있을 때 처음 뜨는 화면
3. 데이타 복구하기 (백업저장한 드라이브를 꽂은 후 실행)
- 2023-05-30_051138.png (60.3KB)(0)
- 2023-05-30_053227.png (48.5KB)(0)
- 2023-05-30_054328.png (36.7KB)(0)
- 2023-05-30_054902.png (51.9KB)(0)
- 2023-05-30_055505.png (64.8KB)(0)
- 2023-05-30_060307.png (36.2KB)(0)
- 2023-05-30_060509.png (41.8KB)(0)
- 2023-05-30_061231.png (59.3KB)(0)
- 2023-05-30_061740.png (50.3KB)(0)
- 2023-05-30_062028.png (38.5KB)(0)
- 2023-05-30_062322.png (56.4KB)(0)
- 2023-05-30_063040.png (39.8KB)(0)
- 2023-05-30_063545.png (65.7KB)(0)
- 2023-05-30_080002.png (100.7KB)(0)
:: 백업 드라이브 생성
set /p drvsel=". [▶ 백업용 드라이브 선택 (알파벳만 입력): "
set datadrv=%drvsel%
cd %drvsel%:
if %errorlevel%==1 goto ####### <=== 여기는 원하시는 걸로 알아서 채우시면...
IF not exist "%drvsel%:\data" md "%drvsel%:\data" goto main
goto main