[batch-file] 배치가 같지 않은 (비 균등) 연산자

따르면 , !==!하지 않은 동일한 문자열 연산자이다. 그것을 시도하면, 나는 얻는다 :

C:\> if "asdf" !==! "fdas" echo asdf
!==! was unexpected at this time.

내가 뭘 잘못하고 있죠?



답변

시험

if NOT "asdf" == "fdas" echo asdf


답변

대신 NEQ를 사용하십시오.

if "asdf" NEQ "fdas" echo asdf


답변

나는 이것이 오래된 정보라는 것을 알고 있지만, 파티에 늦게 오는 사람들에게는 여전히 유용 할 수 있습니다. (편집 : 여전히 트래픽이 발생하고 @Goozak은 샘플의 원래 분석이 잘못되었다는 의견에서 지적 했으므로 업데이트되었습니다.)

귀하의 링크에있는 예제 코드에서 이것을 뽑았습니다.

IF !%1==! GOTO VIEWDATA
REM  IF NO COMMAND-LINE ARG...
FIND "%1" C:\BOZO\BOOKLIST.TXT
GOTO EXIT0
REM  PRINT LINE WITH STRING MATCH, THEN EXIT.

:VIEWDATA
TYPE C:\BOZO\BOOKLIST.TXT | MORE
REM  SHOW ENTIRE FILE, 1 PAGE AT A TIME.

:EXIT0

!%1==!==변수를 포함하는 왼쪽에있는 것과 오른쪽에있는 것이 아닌지 확인하기위한 관용적 사용입니다 . !이 경우에는 그냥 문자 자리 표시 자입니다. 무엇이든 될 수 있습니다. 경우 %1내용이 그때는 그냥 비교됩니다하지 않는 경우 평등은 잘못된 것 !!그것은 사실이 될 것입니다.

!==!연산자가 아니기 때문에 글쓰기 "asdf" !==! "fdas"는 무의미합니다.

사용 제안 if not "asdf" == "fdas"은 분명히 갈 길입니다.


답변

시험:

if not "asdf" == "fdas" echo asdf

그것은 Windows XP에서 저에게 효과적입니다 (귀하가 게시 한 코드와 동일한 오류가 발생합니다).


답변

NEQ는 일반적으로 숫자에 사용되고 ==는 일반적으로 문자열 비교에 사용됩니다.

문자열 비교 (NEQ 대신)에 대해 동일하고 동등한 부등식 피연산자가 언급 된 문서를 찾을 수 없습니다. IF NOT ==을 사용하는 솔루션이 가장 건전한 방법으로 보입니다. IF NOT == 비교 방법을 문자열에 적용 할 때 배치 파일의 작업 평가로 인해 문제가 발생하거나 예기치 않은 동작이 발생하는 상황을 즉시 생각할 수 없습니다.

두 함수가 하위 수준에서 다르게 작동하는 방식에 대한 통찰력을 제공 할 수 있기를 바랍니다 .NEW 및 IF NOT ==를 사용하는 별도의 배치 파일을 분해하면 (공식적으로 문서화되지 않은) 네이티브 API 호출 conhost.exe의 관점에서 단서가 제공됩니다. 활용하고 있습니까?


답변