배치가 같지 않은 (비 균등) 연산자


263

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

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

내가 뭘 잘못하고 있죠?

답변:



105

대신 NEQ를 사용하십시오.

if "asdf" NEQ "fdas" echo asdf

37
이를 위해서는 명령 확장 기능이 켜져 있어야합니다 (2000+에서는 기본적으로 설정되어 있지만 시스템 전체 또는 cmd.exe에 대한 매개 변수로 해제 될 수 있습니다). 그냥 "만약 그렇지 않다"를 사용하면, 그것은 좋은 DOS 시절로 거슬러 올라갑니다
Anders

29

나는 이것이 오래된 정보라는 것을 알고 있지만, 파티에 늦게 오는 사람들에게는 여전히 유용 할 수 있습니다. (편집 : 여전히 트래픽이 발생하고 @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"은 분명히 갈 길입니다.


감사 jatrim .. 질문을 다시 묻는 대신 답변을 검색하는 사람들에게 가장 도움이됩니다. 질문이 오래되어 StackExchange가 답변 / 댓글 작성 기능을 잠그는 것과 같지 않으므로 완전히 수용 가능하다고 생각하십시오.
user66001 2016 년

4
!경우 %1비어 있는 경우에 사용 되므로 test !==!가 발생합니다. 당신이 사용할 수있는 %1.==.(거의 모든 캐릭터가 할 것) 대신에 - 목적은 반드시 평등 테스트의 양쪽이 있는지 확인하는 것 뭔가 테스트를합니다. !==!표기는 확실히 NOT A-동일하지 기호. 더 나은 스틱 if not ....
Goozak

22

시험:

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

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


4

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

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

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.