배치 파일에서 매개 변수가 비어 있는지 테스트하는 올바른 방법은 무엇입니까?


213

변수가 설정되어 있는지 테스트해야합니다. 나는 몇 가지 기술을 시도했지만 그들은 때마다 실패하는 것 %1때와 같은 경우로 따옴표로 둘러싸여 %1있다 "c:\some path with spaces".

IF NOT %1 GOTO MyLabel // This is invalid syntax
IF "%1" == "" GOTO MyLabel // Works unless %1 has double quotes which fatally kills bat execution
IF %1 == GOTO MyLabel // Gives an unexpected GOTO error.

에 따르면 이 사이트 , 이것들은 지원되지 IF구문 유형. 그래서 나는 그것을 할 수있는 방법을 보지 못했습니다.

IF [NOT] ERRORLEVEL number command
IF [NOT] string1==string2 command
IF [NOT] EXIST filename command

1
내 시스템 (Windows 2003 및 Windows 7)에서 짝수 개의 큰 따옴표가있는 if "%1" == "" GOTO MyLabel한 스크립트 실행을 치명적으로 죽이지 않습니다 %1. 홀수의 큰 따옴표 %1가이 오류로 스크립트 실행을 죽이는 것을 알 수 있습니다. The syntax of the command is incorrect.대괄호를 사용하여 문제를 해결하는 아래 솔루션은 정답으로 표시되었지만 더 잘 수행되지 않는 것 같습니다. . %1홀수의 큰 따옴표 가있을 때도 같은 오류로 해당 솔루션이 실패 합니다.
Susam Pal

@SusamPal 재미있는. 그 아래에 괄호 버전을 시도하고 작동하는지 확인하십시오. 내가 더 테스트 한 것. 방금 며칠 전에 수락 된 답변을 업데이트했습니다.
blak3r

Dan Story의 답변 은 실제로 잘 작동하는 것 같습니다. 대괄호를 사용하여 버전을 사용했습니다.
Susam Pal

좋은 "모두 잡기"예 : stackoverflow.com/questions/830565/… 인수에서 파일 / 디렉토리 및 일반 문자열 / 번호 혼합을 모두 포함

따라서 좌절- IF DEFINED스크립트 변수 대신 환경 변수에서만 작업하는 것은 잠재적 인 낭비입니다!
kayleeFrye_onDeck

답변:


290

따옴표 대신 대괄호를 사용하십시오.

IF [%1] == [] GOTO MyLabel

괄호는 안전하지 않습니다 . 대괄호 만 사용하십시오.


11
괄호가 안전하지 않습니다! &에서 와 같은 내용 %1은 줄을 끊을 것입니다
jeb

14
인수에 공백이없는 한 if #%1#==##또는 같은 다른 문자를 사용하면 if [%1]==[]좋습니다. 그렇지 않으면 …was unexpected at this time오류가 발생합니다.
Synetech

12
"%~1"내 대답에서 언급했듯이 사용 은 실제로 더 나은 접근 방식입니다.
jamesdlin

8
여러분, @jamesdlin이 맞습니다. 변수 텍스트에 공백이 있거나이 경우이 방법은 작동하지 않습니다 ==. 대신 그의 대답을 사용하십시오.
James Ko

4
당신은 그것을 명확하게하지 않습니다 it DOES NOT work with spaces. @jamesdlin answer를 대신 사용하십시오.
JB. 모니카와 함께

153

당신이 사용할 수있는:

IF "%~1" == "" GOTO MyLabel

외부 따옴표 세트를 제거합니다. 일반적으로 대괄호를 사용하는 것보다 변수가 공백이 있어도 작동하므로보다 안정적인 방법입니다.


9
이것은 실제로 그것을하는 좋은 방법입니다. 을 사용 ~하면 외부 따옴표가 있으면 제거하고 수동으로 다시 추가하십시오 (한 세트 만 보장). 또한, 당신은 인수에 공백이 포함 된 경우 따옴표를 사용하는 (나는이를 사용하여 내 이전 버전 어렵게 배운 #또는 대괄호 대신 따옴표가 던져 공백으로 인수를 발생하는 …was unexpected at this time오류입니다.)
Synetech

4
이것은 % 1과 같은 인수가 아닌 % MYVAR %와 같은 일반 변수에도 적용 가능합니까?
simpleuser

4
@simpleuser 죄송합니다. 일반적인 환경 변수에서는 작동하지 않습니다.
jamesdlin

1
이중 ' "'를 이스케이프 시퀀스로 사용하는 문자열을주의하십시오. 비교를 시도 할 때 스크립트가 충돌합니다. 예를 들어 ""this string will crash the comparison""Double '"'은 올바른 이스케이프 시퀀스이며 이중 ' "'에 대한 대체는 실패합니다. 끈이 비어 있습니다.
Tydaeus

1
@Amalgovinus 아마도 서브 루틴에 변수로 변수를 전달하여 서브 루틴을 사용할 수 있습니다 "%~1".
jamesdlin

38

가장 좋은 반 솔루션 중 하나는 %1변수 에 복사 한 다음 delayedExp와 같이 지연 확장을 사용하는 것입니다. 콘텐츠에 대해 항상 안전합니다.

set "param1=%~1"
setlocal EnableDelayedExpansion
if "!param1!"=="" ( echo it is empty )
rem ... or use the DEFINED keyword now
if defined param1 echo There is something

이것의 장점은 param1을 다루는 것이 절대적으로 안전하다는 것입니다.

param1의 설정은 다음과 같은 많은 경우에 작동합니다.

test.bat hello"this is"a"test
test.bat you^&me

그러나 여전히 이상한 내용으로 실패합니다.

test.bat ^&"&

존재에 대한 100 % 정답을 얻을 수 있도록

%1비어 있는지 감지 하지만 일부 콘텐츠의 경우 콘텐츠를 가져올 수 없습니다.
이것은 또한 빈을 구분하는 것이 유용 할 수 있습니다 %1및 하나 "". 배치 파일을 중단하지 않고 명령
의 기능을 사용하여 CALL실패합니다.

@echo off
setlocal EnableDelayedExpansion
set "arg1="
call set "arg1=%%1"

if defined arg1 goto :arg_exists

set "arg1=#"
call set "arg1=%%1"
if "!arg1!" EQU "#" (
    echo arg1 exists, but can't assigned to a variable
    REM Try to fetch it a second time without quotes
    (call set arg1=%%1)
    goto :arg_exists
)

echo arg1 is missing
exit /b

:arg_exists
echo arg1 exists, perhaps the content is '!arg1!'

내용을 가져 오기 위해 100 % 방탄을 원한다면 가장 이상한 명령 줄 매개 변수를받는 방법도 읽을 수 있습니다 .


18

IF /?에서 :

명령 확장이 활성화 된 경우 IF는 다음과 같이 변경됩니다.

IF [/I] string1 compare-op string2 command
IF CMDEXTVERSION number command
IF DEFINED variable command

......

DEFINED 조건은 환경 변수 이름을 사용하고 환경 변수가 정의 된 경우 true를 리턴한다는 점을 제외하고 EXISTS와 동일하게 작동합니다.


1
예, 실제로이 접근법을 시도했으며 ENVIRONMENT 변수에서만 작동한다는 것을 알 수있었습니다. 따라서 % 1 또는 배치 파일 내부에 정의 된 변수로는 작동하지 않았습니다.
blak3r

2
그것은 단지 %1좋아하는 것입니다. "배치 파일 내에 정의 된 변수는"실제로 있는 배치 파일이 실행되는 동안 환경 변수 및 사용할 수있는 IF DEFINED그들.
zb226

8

불행히도 나는 내 자신의 글을 써야했던 현재의 답변에 대해 의견을 표하거나 투표 할만한 명성을 얻지 못했습니다.

원래 OP의 질문은 "매개 변수"가 아닌 "변수"라고 말했는데, 이는 매우 혼란 스러웠습니다. 특히 빈 변수를 테스트하는 방법을 검색하는 Google의 가장 큰 링크였습니다. 내 원래 답변 이후 Stephan은 올바른 용어를 사용하도록 원래 질문을 편집했지만 내 답변을 삭제하기보다는 혼란을 없애기 위해 남겨두기로 결정했습니다. 특히 Google이 여전히 사람들을 여기에 변수로 보내고있는 경우에는 특히 그렇습니다.

% 1은 (는) 가치가 없습니다! 명령 줄 매개 변수입니다.

매우 중요한 차이점. 변수가 아닌 명령 행 매개 변수를 참조한 후 숫자가있는 단일 퍼센트 부호.

변수는 set 명령을 사용하여 설정되며 2 % 부호를 사용하여 (이전과 후) 호출됩니다. 예를 들어 % myvar %

빈 변수를 테스트하려면 "정의되지 않은 경우"구문을 사용하십시오 (변수에 대한 명시 적 명령에는 퍼센트 부호가 필요하지 않음).

set myvar1=foo  
if not defined myvar1 echo You won't see this because %myvar1% is defined.  
if not defined myvar2 echo You will see this because %myvar2% isn't defined.

(명령 줄 매개 변수를 테스트하려면 jamesdlin의 답변을 참조하는 것이 좋습니다.)


1
네 말이 맞아 그러나 올바른 방법은 제목을에서 if variable is empty까지 수정하는 것 if parameter is empty입니다. 방금 했어요 (일부 매개 변수 대신 변수를 확인했기 때문에 일부 답변을 무효화 할 위험이 있으므로 질문에 대답하지 않았으므로 무효입니다)
Stephan

1
스테판 감사합니다, 당신이 그렇게 할 수 있다는 것을 몰랐습니다. 업데이트를 반영하기 위해 답변을 편집했습니다.
AutoMattTick

6

배치 파일에서 변수를 테스트하려면 "IF DEFINED 변수 명령"을 사용하십시오.

그러나 배치 매개 변수를 테스트하려면 까다로운 입력을 피하기 위해 아래 코드를 시도하십시오 (예 : "1 2"또는 ab ^> cd)

set tmp="%1"
if "%tmp:"=.%"==".." (
    echo empty
) else (
    echo not empty
)

5

아래 코드로 테스트하면 괜찮습니다.

@echo off

set varEmpty=
if not "%varEmpty%"=="" (
    echo varEmpty is not empty
) else (
    echo varEmpty is empty
)
set varNotEmpty=hasValue
if not "%varNotEmpty%"=="" (
    echo varNotEmpty is not empty
) else (
    echo varNotEmpty is empty
)

변수에 따옴표가 포함되어 있으면 솔루션이 실패합니다. Btw IF DEFINED var는 이유에 대한 구문이 있습니다
jeb

4

나는 보통 이것을 사용합니다 :

IF "%1."=="." GOTO MyLabel

% 1이 비어 있으면 IF는 "."을 비교합니다. "." 이것은 참으로 평가됩니다.


4
이것은 올바르지 않습니다. IF "% 1"== ""이 게시물의 이유는 % 1 자체에 따옴표가 있으면 실패합니다.
blak3r

% 1이 비어 있는지 또는 따옴표가 있는지 테스트하려고합니까? 문제는 불분명합니다. % 1의 명령 줄에 아무것도 지정되어 있지 않으면 내 대답이 작동합니다.
aphoria

> % 1이 비어 있는지 또는 따옴표가 있는지 테스트하려고합니까? @ aphoria, 둘 다 처리 할 수 ​​있어야합니다.
Synetech

% 1 %가 설정되어 있으면 잘 작동했습니다. 고마워, 좋은 대답!
Charlie A

4

유효한 스크립트가 많으므로 여기에 대한 답변을 기반 으로이 작은 배치 스크립트를 만들었습니다. 동일한 형식을 따르는 한 자유롭게 추가하십시오.

REM Parameter-testing

Setlocal EnableDelayedExpansion EnableExtensions

IF NOT "%~1"=="" (echo Percent Tilde 1 failed with quotes) ELSE (echo SUCCESS)
IF NOT [%~1]==[] (echo Percent Tilde 1 failed with brackets) ELSE (echo SUCCESS)
IF NOT  "%1"=="" (echo Quotes one failed) ELSE (echo SUCCESS)
IF NOT [%1]==[] (echo Brackets one failed) ELSE (echo SUCCESS)
IF NOT "%1."=="." (echo Appended dot quotes one failed) ELSE (echo SUCCESS)
IF NOT [%1.]==[.] (echo Appended dot brackets one failed) ELSE (echo SUCCESS)

pause

4

빈 문자열은 double-quotes/ 쌍이며 ""길이를 테스트 할 수 있습니다.

set ARG=%1
if not defined ARG goto nomore

set CHAR=%ARG:~2,1%
if defined CHAR goto goon

그런 다음 2 문자인지 테스트하십시오 double-quotes.

if ^%ARG:~1,1% == ^" if ^%ARG:~0,1% == ^" goto blank
::else
goto goon

사용할 수있는 배치 스크립트는 다음과 같습니다. 빈 문자열을 올바르게 잡는 것 같습니다.

이것은 단지 예일뿐입니다. 스크립트에 따라 위의 2 (또는 3?) 단계를 사용자 정의하면됩니다.

@echo off
if not "%OS%"=="Windows_NT" goto EOF
:: I guess we need enableExtensions, CMIIW
setLocal enableExtensions
set i=0
set script=%0

:LOOP
set /a i=%i%+1

set A1=%1
if not defined A1 goto nomore

:: Assumption:
:: Empty string is (exactly) a pair of double-quotes ("")

:: Step out if str length is more than 2
set C3=%A1:~2,1%
if defined C3 goto goon

:: Check the first and second char for double-quotes
:: Any characters will do fine since we test it *literally*
if ^%A1:~1,1% == ^" if ^%A1:~0,1% == ^" goto blank
goto goon

:goon
echo.args[%i%]: [%1]
shift
goto LOOP

:blank
echo.args[%i%]: [%1] is empty string
shift
goto LOOP

:nomore
echo.
echo.command line:
echo.%script% %*

:EOF

이 고문 테스트 결과 :

.test.bat :: ""  ">"""bl" " "< "">"  (")(") "" :: ""-"  " "( )"">\>" ""
args[1]: [::]
args[2]: [""] is empty string
args[3]: [">"""bl" "]
args[4]: ["< "">"]
args[5]: [(")(")]
args[6]: [""] is empty string
args[7]: [::]
args[8]: [""-"  "]
args[9]: ["( )"">\>"]
args[10]: [""] is empty string

command line:
.test.bat :: ""  ">"""bl" " "< "">"  (")(") "" :: ""-"  " "( )"">\>" ""

빈 문자열은 두 개의 큰 따옴표가있는 문자열이 아니며 ""빈 문자열은 빈 문자열입니다 .`` 배치에서 빈 변수는 정의되지 않은 변수입니다. 인수의 경우 외부 인용 부호가 제거되지만 문자열은 여전히 ​​0의 길이로 비어 있습니다.
jeb

이 컨텍스트 (win cmd 인수)에서는 유닉스 셸에서 똑같이 비어있는 큰 따옴표로도, 다른 방법으로 빈 문자열을 나타낼 수 없습니다.
user6801759

예, ""빈 문자열에도 사용되지만 %~1외부 따옴표를 제거하는 것은 매우 쉽습니다 . 이러한 복잡한 솔루션을 사용할 필요가 없습니다
jeb

당신은 맞습니다. 나는 빈 문자열뿐만 아니라 인수를 열거하는 안전한 방법을 잘못 언급했을 수도 있습니다. 다른 "%~1"==""인수와 같은 다른 방법 은 인수와 함께 실패 "Long File Name".txt하며 유효한 인수입니다. 편집 : 그리고 당신이 말한 것처럼 확실히 복잡하지 않습니다. 테스트를 위해 위의 2 단계 만, 나머지는 자세한 예입니다.
user6801759

"ARG가 정의되지 않은 경우"가 완벽하게 작동하는 것 같습니다 (내 변수가 명령 행에서 나오지 않음)
GrayFace


3

스크립트 1 :

입력 ( "Quotes.cmd 제거" "테스트입니다")

@ECHO OFF

REM Set "string" variable to "first" command line parameter
SET STRING=%1

REM Remove Quotes [Only Remove Quotes if NOT Null]
IF DEFINED STRING SET STRING=%STRING:"=%

REM IF %1 [or String] is NULL GOTO MyLabel
IF NOT DEFINED STRING GOTO MyLabel


REM   OR   IF "." equals "." GOTO MyLabel
IF "%STRING%." == "." GOTO MyLabel

REM GOTO End of File
GOTO :EOF

:MyLabel
ECHO Welcome!

PAUSE

출력 (없음, % 1은 (는) 비어 있지 않거나 비어 있거나 NULL 임) :


위의 스크립트로 매개 변수없이 실행 ( "Quotes.cmd 제거") 1

출력 (% 1이 비어 있거나 비어 있거나 NULL 임) :

Welcome!

Press any key to continue . . .

참고 : 내부에 변수를 설정하면 IF ( ) ELSE ( ) 명령문 "IF"문을 종료 할 때까지 "DEFINED 변수 확장"을 사용하지 않는 한 DEFINED에서 사용할 수 없습니다. 일단 활성화되면 "!"대신 느낌표 "!"를 사용하십시오. 퍼센트 "%"기호}.

예를 들면 다음과 같습니다.

스크립트 2 :

입력 ( "Quotes.cmd 제거" "테스트입니다")

@ECHO OFF

SETLOCAL EnableDelayedExpansion

SET STRING=%0
IF 1==1 (
  SET STRING=%1
  ECHO String in IF Statement='%STRING%'
  ECHO String in IF Statement [delayed expansion]='!STRING!'
) 

ECHO String out of IF Statement='%STRING%'

REM Remove Quotes [Only Remove Quotes if NOT Null]
IF DEFINED STRING SET STRING=%STRING:"=%

ECHO String without Quotes=%STRING% 

REM IF %1 is NULL GOTO MyLabel
IF NOT DEFINED STRING GOTO MyLabel

REM GOTO End of File
GOTO :EOF

:MyLabel
ECHO Welcome!

ENDLOCAL
PAUSE

산출:

C:\Users\Test>"C:\Users\Test\Documents\Batch Files\Remove Quotes.cmd" "This is a Test"  
String in IF Statement='"C:\Users\Test\Documents\Batch Files\Remove Quotes.cmd"'  
String in IF Statement [delayed expansion]='"This is a Test"'  
String out of IF Statement='"This is a Test"'  
String without Quotes=This is a Test  

C:\Users\Test>  

참고 : 문자열 내부에서 따옴표도 제거합니다.

예 (스크립트 1 또는 2 사용) : C : \ Users \ Test \ Documents \ Batch Files> "Quotes.cmd 제거" ""a "테스트"

출력 (스크립트 2) :

String in IF Statement='"C:\Users\Test\Documents\Batch Files\Remove Quotes.cmd"'  
String in IF Statement [delayed expansion]='"This is "a" Test"'  
String out of IF Statement='"This is "a" Test"'  
String without Quotes=This is a Test  

스크립트 2의 매개 변수없이 ( "Quotes.cmd 제거")를 실행하십시오.

산출:

Welcome!

Press any key to continue . . .

3

요약하면 다음과 같습니다.

set str=%~1
if not defined str ( echo Empty string )

이 코드는 % 1이 ""또는 "이거나 비어있는 경우"빈 문자열 "을 출력합니다. 현재 잘못된 응답에 추가했습니다.


0

인터넷에 많은 답변이있는 많은 문제가있었습니다. 대부분의 경우 대부분 작동하지만 각 경우를 구분하는 코너 케이스가 항상 있습니다.
따옴표가 있으면 작동하지 않을 수도 있고 따옴표가 없으면 중단되거나 var에 공백이 있으면 구문 오류가 발생하고 일부는 매개 변수 (환경 변수가 아닌)에서만 작동하며 다른 기술은 빈을 허용합니다. '정의 된'것으로 전달할 따옴표 세트, 더 까다로운 따옴표는else 나중에 .

여기 내가 만족하는 해결책이 있습니다. 효과가없는 코너 케이스를 찾으면 알려주십시오.

:ifSet
if "%~1"=="" (Exit /B 1) else (Exit /B 0)

스크립트 나 자체 스크립트에서 해당 서브 루틴을 사용하는 것이 .bat좋습니다.
따라서 (의사로) 작성하려면 다음을 수행하십시오.

if (var)
then something
else somethingElse

당신은 쓸 수 있습니다:

(Call :ifSet %var% && (
    Echo something
)) || (
    Echo something else
)

그것은 모든 테스트에서 효과가있었습니다.

(Call :ifSet && ECHO y) || ECHO n
(Call :ifSet a && ECHO y) || ECHO n
(Call :ifSet "" && ECHO y) || ECHO n
(Call :ifSet "a" && ECHO y) || ECHO n
(Call :ifSet "a a" && ECHO y) || ECHO n

Echo'd n, y, n, y,y


더 많은 예 :

  • 그냥 확인하고 싶어 if?Call :ifSet %var% && Echo set
  • 그렇지 않은 경우 (다른 사람 만)? Call :ifSet %var% || Echo set
  • 전달 된 인수 확인 잘 작동합니다.Call :ifSet %1 && Echo set
  • 스크립트 / dupe 코드를 방해하지 않기 위해 자체 스크립트에 넣었 ifSet.bat습니까? 문제 없어요:((Call ifSet.bat %var%) && Echo set) || (Echo not set)

사건을 찾았습니다. 당신이 다른 구문 경우 시도하고, 그 다음 블록의 마지막 명령이 실패하면 다른 사람이 실행됩니다 (Call ifSet.bat YES && (Echo true & Echo x | findstr y)) || Echo, 에코 true false
Hashbrown

실제로, 이것이 문제이고 추가 회선을 처리 할 수있는 경우, 직접 전화 ifSet를 걸어 다음을 사용하여 이를 완화 할 수 있습니다.If %errorlevel% EQU 0 (x) Else (y)
Hashbrown

허용되는 답변 (대괄호 사용)이 작동하지 않는 경우는 무엇입니까? 출구 / B
가하는

어떤 이유로 테스트 할 때 set변수를 사용할 때 (와 같은 [%bob%]인수 만 작동) 파산 [%2]했지만 이제 다시 확인하면 작동합니다. 내 생각 []은 빈 따옴표를 전달하는 것 뿐이지 만 , 그렇지 않을 것입니다 (그래서 실제로는 유스 케이스에 달려 있습니다)
Hashbrown

/B플래그는 서브 루틴 또는 종료, 종료에서 전체 배치를 중지 call'D 일괄. 전체 명령 이 무엇인지 묻지 않는 한 ; 호출 스크립트가 서브 루틴 ( 0통과, 1실패) 의 결과를 알 수 있도록 오류 코드를 반환합니다 . 응답에서 부울 논리를 통해 또는 %errorlevel%위의 주석을 통해 사용 가능
Hashbrown

0

사용! 빈 문자열 검사의 경우 "대신

@echo off
SET a=
SET b=Hello
IF !%a%! == !! echo String a is empty
IF !%b%! == !! echo String b is empty

1
팁은 정말 나쁩니다. 따옴표는 공백과 특수 문자를 처리 할 수 ​​있지만 느낌표는 사용할 수 없습니다. 지연된 확장이 활성화되면 느낌표가 정말 불쾌합니다.
jeb

0

나는 한 달도 안 된 나이에 들어갔습니다 (8 년 전 요청되었지만). 지금까지 배치 파일을 넘어서기를 희망합니다. ;-) 나는 이것을 항상했다. 그러나 궁극적 인 목표가 무엇인지 잘 모르겠습니다. 나처럼 게으 르면 내 go.bat가 그와 같은 것들을 위해 작동합니다. (아래 참조) 그러나 1을 입력으로 명령을 직접 사용하는 경우 OP의 명령이 유효하지 않을 수 있습니다. 즉,

"C:/Users/Me"

유효하지 않은 명령입니다 (또는 다른 드라이브에있는 경우 사용). 두 부분으로 나누어야합니다.

C:
cd /Users/Me

그리고 2, '정의 된'또는 '정의되지 않은'은 무엇을 의미합니까? GIGO. 오류를 잡기 위해 기본값을 사용합니다. 입력이 잡히지 않으면 도움 (또는 기본 명령)을 위해 떨어집니다. 따라서 입력이 오류가 아닙니다. 입력으로 cd하여 오류가있는 경우 오류를 잡을 수 있습니다. (좋아요, go "다운로드 (한 개의 paren)를 사용하면 DOS에 잡 힙니다. (Harsh!))

cd "%1"
if %errorlevel% neq 0 goto :error

그리고 3, 따옴표는 명령이 아닌 경로 주위에만 필요합니다. 즉,

"cd C:\Users" 

다른 드라이브에 있지 않은 한 나빴습니다 (또는 옛날에는 익숙했습니다).

cd "\Users" 

기능적입니다.

cd "\Users\Dr Whos infinite storage space"

경로에 공백이 있으면 작동합니다.

@REM go.bat
@REM The @ sigh prevents echo on the current command
@REM The echo on/off turns on/off the echo command. Turn on for debugging
@REM You can't see this.
@echo off
if "help" == "%1" goto :help

if "c" == "%1" C:
if "c" == "%1" goto :done

if "d" == "%1" D:
if "d" == "%1" goto :done

if "home"=="%1" %homedrive%
if "home"=="%1" cd %homepath%
if "home"=="%1" if %errorlevel% neq 0 goto :error
if "home"=="%1" goto :done

if "docs" == "%1" goto :docs

@REM goto :help
echo Default command
cd %1
if %errorlevel% neq 0 goto :error
goto :done

:help
echo "Type go and a code for a location/directory
echo For example
echo go D
echo will change disks (D:)
echo go home
echo will change directories to the users home directory (%homepath%)
echo go pictures
echo will change directories to %homepath%\pictures
echo Notes
echo @ sigh prevents echo on the current command
echo The echo on/off turns on/off the echo command. Turn on for debugging
echo Paths (only) with folder names with spaces need to be inclosed in         quotes (not the ommand)
goto :done

:docs
echo executing "%homedrive%%homepath%\Documents"
%homedrive%
cd "%homepath%\Documents"\test error\
if %errorlevel% neq 0 goto :error
goto :done

:error
echo Error: Input (%1 %2 %3 %4 %5 %6 %7 %8 %9) or command is invalid
echo go help for help
goto :done

:done

cd/d전환 이유는 다음과 같습니다 : cd /d "C:\Users\Me" (and the proper path delimeter for Windows is `, not /).
Stephan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.