윈 도 우 CMD 배치문 ???
2017.07.24 05:40
안녕하세요...
CMD 배치문에 대해서 문의합니다...
하드디스크 드라이브의 각 볼륨명을 검색해서, 지정된 볼륨명(Windows7)과 정확히 일치하는(단, 대소문자 무시) 드라이브 명을 찾는 과정입니다..
Ghost 부속파일인 OMNIFS32.EXE 를 사용한 것은 히든파티션도 검색해 주기 때문입니다..
아래는 하드디스크 현황입니다...
omnifs32 info 출력 화면입니다. 여러 test 하느라 볼륨명 다른 사진이 첨부되었네요. (DATA_Windows7 ==> WIndows7_DATA)
사용된 명령어 입니다.. omnifs32 info | findstr /i "Windows7" > disk.txt 그리고 결과물...
원하는 건 첫 행 (검색어와 정확히 일치) 뿐인데.... 원치않는 두 번째 행 ( 검색어를 포함하는...) 까지 출력됩니다..
제가 어떤 옵션을 누락했거나,,,,, 잘 못된 명령어를 사용한 것 같습니다..
1. OMNIFS 와 FINDSTR (?)를 사용한 조건에 맞는 정확한 배치명령문을 알고 싶습니다..
2. 히든파티션이 없다는 전제하에 OMNIFS 가 아닌 윈도우 자체명령을 이용한 배치문을 알고 싶습니다...
3. 검색해서 해당 볼륨이 없거나 또는 동일한 볼륨명을 갖는 드라이브가 두 개 이상 존재할 경우 에러메세지를 출력하는 명령을 알고 싶습니다.
감사합니다..
--
댓글 [5]
-
이세라 2017.07.24 11:51 -
바람낙엽 2017.07.24 11:59
-
DarknessAngel 2017.07.24 17:08
매번 하는 애기지만, cmd/bar의 내장 문자열 처리기능은 사용하기 불편하고, 기능상 제약이 크므로 추천하지 않습니다
라이센스 문제가 아니라면 busybox등의 GNU계열의 바이너리를 추가해서 그쪽으로 문자열 처리를 하시길 추천합니다
-
차일드 2017.07.24 18:06 매번 쓰레기 같은 갖잖은 대답만 하시네
그리좋은 비지박스던 gnu계열이 좋으면 강좌라도 해보소
글번호 8544809에도 이딴식으로 올려 작상자/댓글자들 자괴감 빠지게
만드는 시덥지 않는 댓글 자제좀 하죠!
그냥 질문자에 대한 답글이 아니면 달지 밀아요
-
DarknessAngel 2017.07.25 04:24
굳이 썩어넘치는게 리눅스용 문자열 편집 예문인데, 중복 하나 더 작성해서 무슨 보템이 된다는건지? (차라리 그 시간에 다른 덜 흔한 주제로 작성하는게 효율적입니다)
busybox등을 쓰면 리눅스용 문자열 다루는 예문 거의 그대로 (bash문법 제외) 이용 가능합니다 (랄까 특별한일 없다면 7이상이라면 내장된 파워셀을 쓰는 ps1타입 스크립트로 작성하는게 더 현실적입니다) (PE등의 제한된 환경이 아닌 이상 굳이 구시대 유물같은 케케묵은 dos시절의 문법을 고집할 이유 어딧는지?)
장기적으로 보면 저걸로 익힐 시간에 차라리 파워셀 문법을 익혀두는게 더 보템이 됩니다 (RS3에서는 기본셀이 파워셀로 교체될정도로 마소도 밀고 있습니다) (아니면 리눅스 타입으로 익힌후 기능 추가제거를 통해 해당 기능 설치하면 굳이 수동으로 바이너리등을 복사 안 해도 잘 됩니다 (차후 윈도 이외의 OS다룰 일 있을때도 써먹을 수 있으니 배워두면 보템 됨) )
이대로 가면 RS5(가칭)쯤 되면 아에 셀자체가 사라질지도 모르는 구시대 유물 문법을 추천하고 싶진 않습니다
2번에 해당하는 배치 파일입니다.
아래 배치문에는 두가지가 예문이 포함되어 있으므로 길다고 혼동 하시지 마세요
아래 빨간 call: dual 이라는 구문 보일겁니다.
빨간 부분을 call: only로 바꾸면 완전 일치 볼륨만 찾습니다.
:only <- 완전 일치(대소문자 구분없이 완전 일치 볼륨)
:dual <- 1개 이상(즉, 찾는 문자가 들어 있는 모든 볼륨)
:end <- 찾으면 카운트 출력함
자세한 설명은 보시고 탐독 하세요~
@echo off
setlocal
:start
set label=%1
set /a cnt=0
for %%a in (C: D: E: F: G: H: I: J: K: L: M: N: O: P: Q: R: S: T: U: V: W: X: Y: Z:) do (
if exist %%a call :find %%a
)
goto END
:find
vol %1 | find /I "%label%" > chk.txt
if %ERRORLEVEL% EQU 0 (call :dual)
goto :EOF
:only
set /p name=<chk.txt
for /f "tokens=2 delims=:" %%b in ("%name%") do (set vol=%%b)
set vol=%vol:~1%
if /I "%vol%" == "%label%" set /a cnt+=1
goto :EOF
:dual
set /p name=<chk.txt
set /a cnt+=1
goto :EOF
:end
echo 찾음 = %cnt%
endlocal
---------------------------------------------------
call :dual 로 했을때
실행> check.cmd windows7
결과> 찾음 = 2
call :only 로 했을때
실행> check.cmd windows7
결과> 찾음 = 1