In base a ciò , !==!
è l'operatore di stringa non uguale. Provandolo, ottengo:
C:\> if "asdf" !==! "fdas" echo asdf
!==! was unexpected at this time.
Che cosa sto facendo di sbagliato?
Risposte:
Provare
if NOT "asdf" == "fdas" echo asdf
Usa invece NEQ.
if "asdf" NEQ "fdas" echo asdf
So che questo è abbastanza obsoleto, ma potrebbe ancora essere utile per chi arriva tardi alla festa. (EDIT: aggiornato poiché questo riceve ancora traffico e @Goozak ha sottolineato nei commenti che anche la mia analisi originale del campione era errata.)
Ho preso questo dal codice di esempio nel tuo link:
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==!
è semplicemente un uso idiomatico ==
per verificare che la cosa a sinistra, che contiene la tua variabile, sia diversa dalla cosa a destra, che non lo è. In !
questo caso è solo un segnaposto di carattere. Potrebbe essere qualsiasi cosa. Se %1
ha un contenuto, quindi l'uguaglianza sarà falso, se non ti basta essere confrontando !
per !
e sarà vero.
!==!
non è un operatore, quindi la scrittura "asdf" !==! "fdas"
è piuttosto priva di senso.
Il suggerimento da utilizzare if not "asdf" == "fdas"
è sicuramente la strada da percorrere.
!
sono usati qui in caso %1
è vuoto, risultando così nella prova !==!
, che è vero. Potresti usare %1.==.
invece (quasi tutti i personaggi andrebbero bene) - lo scopo è di assicurarti che entrambi i lati del test di uguaglianza abbiano qualcosa da testare. La !==!
notazione NON è sicuramente un segno di non uguale. Meglio restare con if not ...
.
Provare:
if not "asdf" == "fdas" echo asdf
Per me funziona su Windows XP (ricevo lo stesso errore che hai per il codice che hai pubblicato).
NEQ viene solitamente utilizzato per i numeri e == viene generalmente utilizzato per il confronto delle stringhe.
Non riesco a trovare alcuna documentazione che menzioni un operando di disuguaglianza specifico ed equivalente per il confronto di stringhe (al posto di NEQ). La soluzione che utilizza IF NOT == sembra l'approccio più valido. Non riesco a pensare immediatamente a una circostanza in cui la valutazione delle operazioni in un file batch causerebbe un problema o un comportamento imprevisto quando si applica il metodo di confronto IF NOT == alle stringhe.
Vorrei poter offrire informazioni su come le due funzioni si comportano in modo diverso a un livello inferiore: il disassemblaggio di file batch separati (che utilizzano NEQ e IF NOT ==) offrirebbe indizi in termini di quali chiamate API native (documentate in modo non ufficiale) conhost.exe sta utilizzando?