소프트웨어 배치파일 작성시 도움이필요합니다
2018.10.03 11:11
위에 명령어를 사용하여 드라이버명을 입력받으려고합니다
그런데 사람들마다 c라고입력하는분도있고 c:라고라는분도있을거같아 입력받은 변수에 :이 있는지없는지 판별하거나 혹은 자동으로 붙일방법이없을까요?
댓글 [7]
-
suk 2018.10.03 11:44
-
sikey 2018.10.03 12:54
감사합니다! 집에가는대로해봐야겟네요 ㅎㅎ -
sikey 2018.10.03 16:07
감사합니다! 집에와서 이제확인해보았는데 정말잘되는군요 ㅎㅎ
-
DarknessAngel 2018.10.03 12:46
조금 무식한 방법이지만 입력받은 변수를 A~Z까지 다 일일히 조건문으로 처리하는 방법도 있습니다아니면 첫글자만 잘라내서 받는 방법도 있습니다 (A~Z가 아닌 오타(예 : 한영을 잊어버리거나, 오타로 특문등을 입력)를 방지하기 위해서 두가지 병합해서 첫글자 자른후 이게 A~Z에 일치하는지 비교하는 방식으로 입력받으시길 추천합니다)suk님이 수정하셨군요 (저런 시스템에 민감한 스크립트 (저런거 원하시면 주로 OS설치나 파티션 조작등이 대부분의 목적이라 추정됩니다) 작성시 입력 필터 제대로 안 해두면 어떤 문제 일으킬지 아무도 모릅니다)
-
sikey 2018.10.03 16:06
넵 신경써주셔서 감사합니다.
제가지금만드려고하는건 사용자에게 미리 백업을하도록 고지를 하고있지만
자주안하는 위치들을 자동으로 백업할수있는 보완대책입니다 ㅎㅎ
매번 일일히 하자니 손이많이가고 쉬는날 만들어볼까해서 검색하다가
도저히 제능력으론 안되서 도움을 청하게 되었습니다. ㅎㅎ
-
메리아 2018.10.03 17:42 -
-
DarknessAngel 2018.10.03 19:01
파워셀은 bash등을 본받아서 꽤 다양한 기능을 처리 가능하고, 개선되었고, vbs는 규격이 윈도 시대 넘어와서 나온거지만, cmd경우는 과거 dos시절에 쓰던 bat규격을 그대로 이어받은 노답스러운 사항을 자랑합니다
뭔가 조금만 복잡한거 다룰려면 머리 썩이게되고, 가장 골치아픈건 동일한걸 C&P한다음 변수 내용물만 바꾸어도 안 되거나하는 괴랄함을 보여줍니다 (여기까지 해버리면 문법등이 왜 있는지도 모르겠음)
:name
set /p name=
@if "%name%"=="" goto :name
@echo.%name% | find ":" >nul || set name=%name%:
@echo.name은 "%name%" 입니다
pause
이렇게 하시면 될 겁니다. : 이 없으면 자동으로 : 을 붙이는 방식입니다.
테스트 해보시고...마지막에 2줄 @echo.name은 "%name%" 입니다 와 pause는 삭제하시면 될 겁니다
그런데, 다음 방식이 더 완벽할 겁니다. d: 대신에 d; 처럼 오타를 쓸 수도 있는데요. 위에 방식은 이걸 걸러낼 수 없습니다
다음 방식은 처음 문자에 무조건 :을 붙여줍니다. 그래서 뒤에 오타를 쓴 경우도 오류가 생기지 않습니다. 저도 방금 생각한 것입니다
:name
set /p name=
@if "%name%"=="" goto :name
for /f "tokens=*" %%a in ('"echo %name:~0,1%"') do set name=%%a:
@echo.name은 "%name%" 입니다
pause
드라이브 명에 영어가 아닌 한글 입력하시는 분에게는 대책이 없습니다만...저도 사실 생각은 했지만 점점 복잡해져서 생략했습니다
예전에 제가 올린 bat 파일 보신 분들이 있을 지 모릅니다만, a부터 z까지 확인했습니다.
3탄, 한글 또는 이상한 문자 입력하시는 분들을 위하여...
:name
set /p name=
@if "%name%"=="" goto :name
@for /f "tokens=*" %%a in ('"echo %name:~0,1%"') do @set name=%%a:
@if /i not "%name%"=="A:" if /i not "%name%"=="B:" if /i not "%name%"=="C:" if /i not "%name%"=="D:" if /i not "%name%"=="E:" if /i not "%name%"=="F:" if /i not "%name%"=="G:" if /i not "%name%"=="H:" if /i not "%name%"=="I:" if /i not "%name%"=="J:" if /i not "%name%"=="K:" if /i not "%name%"=="L:" if /i not "%name%"=="M:" if /i not "%name%"=="N:" if /i not "%name%"=="O:" if /i not "%name%"=="P:" if /i not "%name%"=="Q:" if /i not "%name%"=="R:" if /i not "%name%"=="S:" if /i not "%name%"=="T:" if /i not "%name%"=="U:" if /i not "%name%"=="V:" if /i not "%name%"=="W:" if /i not "%name%"=="X:" if /i not "%name%"=="Y:" if /i not "%name%"=="Z:" goto :name
@echo.name은 "%name%" 입니다
pause
대/소문자는 관계없습니다. if /i not 에서 /i가 대/소문자 가리지 않는 옵션입니다.