Zgodnie z tym , !==!
jest nie równy operator ciąg. Próbując, otrzymuję:
C:\> if "asdf" !==! "fdas" echo asdf
!==! was unexpected at this time.
Co ja robię źle?
batch-file
operators
ripper234
źródło
źródło
Wiem, że to dość nieaktualne, ale może być przydatne dla osób spóźniających się na przyjęcie. (EDYCJA: zaktualizowana, ponieważ ruch nadal jest generowany, a @Goozak zauważył w komentarzach, że moja pierwotna analiza próbki również była nieprawidłowa).
Ściągnąłem to z przykładowego kodu w twoim linku:
!%1==!
to po prostu idiomatyczne użycie==
mające na celu sprawdzenie, czy rzecz po lewej stronie, która zawiera twoją zmienną, różni się od rzeczy po prawej, która tego nie robi. W!
tym przypadku jest to tylko symbol zastępczy znaku. To może być cokolwiek. Jeśli%1
ma treść, to równość będzie fałszywe, jeśli nie będziesz po prostu być porównanie!
do!
i będzie to prawda.!==!
nie jest operatorem, więc pisanie"asdf" !==! "fdas"
jest dość nonsensowne.Sugestia użycia
if not "asdf" == "fdas"
jest zdecydowanie najlepszym rozwiązaniem.źródło
!
Stosowane są tutaj w razie%1
jest pusta, co skutkuje w teście!==!
, który jest prawdziwy. Możesz użyć%1.==.
zamiast tego (zrobiłaby to prawie każda postać) - celem jest upewnienie się, że obie strony testu równości mają coś do przetestowania.!==!
Notacja jest zdecydowanie NIE nie-znak równości. Lepiej trzymaj sięif not ...
.Próbować:
Działa to dla mnie w systemie Windows XP (pojawia się taki sam błąd jak w przypadku opublikowanego kodu).
źródło
NEQ jest zwykle używane do liczb, a == jest zwykle używane do porównywania ciągów.
Nie mogę znaleźć żadnej dokumentacji, która wymienia konkretny i równoważny operand nierówności do porównywania ciągów (zamiast NEQ). Rozwiązanie wykorzystujące IF NOT == wydaje się najbardziej rozsądnym podejściem. Nie mogę natychmiast pomyśleć o okolicznościach, w których ocena operacji w pliku wsadowym spowodowałaby problem lub nieoczekiwane zachowanie podczas stosowania metody porównywania IF NOT == do ciągów.
Chciałbym móc zaoferować wgląd w to, jak te dwie funkcje zachowują się inaczej na niższym poziomie - dezasemblowanie oddzielnych plików wsadowych (które używają NEQ i JEŻELI NIE ==) oferuje wszelkie wskazówki, w odniesieniu do których (nieoficjalnie udokumentowane) natywne API wywołuje conhost.exe wykorzystuje?
źródło