programing tip

느낌표를 어떻게 피할 수 있습니까!

itbloger 2020. 11. 4. 07:44
반응형

느낌표를 어떻게 피할 수 있습니까! cmd 스크립트에서?


내가 한 때 setlocal ENABLEDELAYEDEXPANSIONcmd를 스크립트에 설정된 난을 피할 수있는 방법이있다! 명령에 대한 매개 변수로 사용하고 싶습니까?

@echo off
setlocal ENABLEDELAYEDEXPANSION
echo I want to go out with a bang!
echo I still want to go out with a bang^!

그게 제가 찾은 것입니다 (^^)

@echo off
setlocal ENABLEDELAYEDEXPANSION
echo I want to go out with a bang^^!

FrVaBe답변대한 추가 설명 .

일반적으로 ^^!작동하지만 따옴표 안에는 ^!대신 필요 합니다.

echo I want to go out with a bang^^!
echo He said "Bang^!"

이는 배치 파서의 이스케이프 메커니즘의 결과입니다.

먼저 파서는 한 줄을 구문 분석하고 캐럿은 다음 문자를 이스케이프합니다.이 경우 &|<>()"<linefeed>따옴표 안에는 모든 문자가 "보통"이고 캐럿 자체는 효과가 없기 때문에 따옴표 밖에는 영향을주지 않습니다.

지연된 확장을 사용하면 추가 구문 분석 단계가 뒤 따르고, 캐럿도 다음 문자에 대한 이스케이프 문자이지만 !에만 영향을 ^미치며이 구문 분석 단계에서는 따옴표가 무시됩니다. 이 추가 단계는 !에 적어도 하나가있는 경우에만 실행됩니다 .

setlocal DisableDelayedExpansion
echo DisableDelayedExpansion
echo one caret^^
echo one caret^^  bang! "boom^!"

echo(
setlocal EnableDelayedExpansion
echo EnableDelayedExpansion
echo one caret^^
echo none caret^^  bang^^! "boom^!"

---- 출력 ------

DisableDelayedExpansion
one caret^
one caret^  bang! "boom^!"

EnableDelayedExpansion
one caret^
none caret  bang! "boom!"


편집하다

다음은 컨텍스트에 따라 필요한 다양한 이스케이프 순열을 더 잘 보여주는 약간 수정 된 예입니다. 비정상적인 이스케이프가 필요한 유일한 경우는 지연된 확장이 켜져 있고 !라인 에 적어도 하나가있을 때의 마지막 예 입니다.

@echo off
setlocal DisableDelayedExpansion
echo DisableDelayedExpansion
echo caret^^       "caret^"
echo caret^^ bang! "caret^ bang!"

echo(
setlocal EnableDelayedExpansion
echo EnableDelayedExpansion
echo caret^^       "caret^"
echo caret^^^^ bang^^! "caret^^ bang^!"

-출력-

DisableDelayedExpansion
caret^       "caret^"
caret^ bang! "caret^ bang!"

EnableDelayedExpansion
caret^       "caret^"
caret^ bang! "caret^ bang!"

DISABLEDELAYEDEXPANSIONENABLEDELAYEDEXPANSION 상태 에서 느낌표 변수를 사용하는 방법은 아래 예제를 참조하십시오 .

@echo off
setlocal DISABLEDELAYEDEXPANSION
set DB_password=encrypt!Pws
echo %DB_password%
SETLOCAL ENABLEDELAYEDEXPANSION
echo !DB_password!

Thanks. To add to this valuable point, if one's script contains a variable whose value contains an "!", then the following approach will render that value as-is:

@echo off
SETLOCAL EnableDelayedExpansion
set /P omg=Enter a value that contains an exclamation-point:
echo Traditional: %omg%
echo Alternative: !omg!
pause

참고URL : https://stackoverflow.com/questions/3288552/how-can-i-escape-an-exclamation-mark-in-cmd-scripts

반응형