2017-05-08 3 views
0

CMD를 복제했지만 더 맞춤화 된 배치 파일을 작성했습니다. 내가 시도한 것은 %input%을 스캔하여 서로 다른 여러 결과가 서로 다른 동작을하도록합니다. 하기 위해 내가이 일을 시도, 무슨 뜻인지 상상 : 그냥 배치 파일을 실행 CMD 창을 충돌IF를 사용하여 일괄 적으로 여러 결과 필터링

set /p input="%cd%>" 

if "%input%" == "cls" (

     GOTO reset 

) else (

if "%input%" == freespace (

     GOTO freespace 

) else (
title %input% 

%input% 

GOTO A 

합니다. IF 문을 사용하여이 두 가지 응답 (또는 그 이상의 가능성)을 정렬 할 수 있습니까? 나는 이것이 "여러개의 if 문을 일괄 적으로 사용하는 것"이라고하는 다른 질문과 비슷하지만 IF 문을 넣으려는 동일한 형식이 아님을 알고 있습니다.

+2

당신이 "충돌"윈도우 무엇을 의미합니까? –

+1

비교 후에 점프하기 때문에 IF를 하나씩 넣을 수 있습니다. 일괄 처리 및 elseif가없는 단 하나의 else 절만 있습니다 (그러나 IF 내부에서 IF를 사용할 수 있음). 평등을 비교할 때 ** 양쪽 모두 따옴표를 써야합니다. 따라서 "freespace"를 사용하십시오. – LotPings

+1

@Sherpaorc - 내가 배울 수 있도록이 배치 파일의 목적을 알려주십시오. 나의 첫 번째 인상은 사용자가 그것이'cmd.exe '라고 생각하게하기 위해 사악하게 사용될 수 있지만,'DIR'을 입력하면 배치 파일이 다른 것을 실행할 수 있다는 것이다. 사용자가'DIR'을 입력하면 디스크를 포맷하는 명령이 실행됩니까? – lit

답변

0

클릭하여 배치를 실행하는 것처럼 보입니다 이는 오류 메시지가 표시되지 않음을 의미합니다. 메시지가 표시되고 지속되도록 명령 프롬프트에서 배치를 실행하는 것이 좋습니다.

제시된 코드에 적어도 두 가지 문제가 있습니다.

첫 번째 점은 else 절에 대한 괄호를 닫지 않았으므로 배치 끝에 보류중인 닫는 괄호가 두 개인다는 것입니다.

형식 :

if x=y (dothis 
) else (
if p==q (dosomethingelse 
) else (
    dosomethingelseentirely 
) 
) 

두 번째 문제는 if 문자열 경기에 매우 문자 그대로의 것입니다. 그것은 문자열-에이 --일치에 따옴표를 포함, 그래서

if "%input%" == freespace (

input 인용하지만 freespace가 아닌대로 사실 일 수 없다 BTW

(첫 번째 if에서 cls 달리) - if /i ... 것이다 대소 문자를 구분하지 않는 비교를 수행하십시오.

0

이 특정 문제에서 여러 결과를 필터링하려면 복수 if 명령이 필요하지 않습니다. 레이블이 다음 해당 코드 실행 존재하는 경우, 그래서이 방법

@echo off 
setlocal 

:A 
echo/ 
set "input=" 
set /p "input=%cd%>" 
call :%input% 2> NUL 
if errorlevel 1 echo "%input%" is not recognized as a command... 
goto A 

:cls 
echo Reset command, parameters: "%*" 
exit /B 0 

:freespace 
echo FreeSpace command, parameters: "%*" 
exit /B 0 

call :%input% 명령을 직접 실행; 이것은 내가 이것을하는 방법이다 그렇지 않은 경우 call :nolabel 명령은 ERRORLEVEL을 2로 반환합니다.

각 서브 루틴은 exit /B 0 명령으로 끝나므로이 경우 ERRORLEVEL은 0입니다.

특정 명령에 대한 의심이있는 경우, 내가 당신에게 리뷰의 command /? 도움말 화면을 장려하거나 더 광범위한 설명을 찾는 웹을 검색 ...

+0

이것은 매우 흥미롭고 확실히 편리합니다. 정확히 무엇을 목표로하고 있습니까? 귀하의 경우, 일치하는 레이블을 찾으면 명령을 실행하고 종료합니다. 그러나 내가 준 특정 레이블로 수행하려고하는 것은 다른 환경을 사용하는 것입니다. 나는 혼란 스럽다. 나는 무엇을 의미 하는가? ': A'는 명령을 실행하는 환경이 매우 흥미 롭지 만,': freespace'는'title'이나'color'와 같은 설정 변수가 없습니다. ': reset'은 컨텍스트 내에서 사용될 수 있습니다. 왜냐하면 그것은 본질적으로 윈도우를 지우고': A'로 다시 되돌려주기 때문입니다. – Sherpaorc