batch-file
Bug nel processore cmd.exe
Ricerca…
introduzione
Questo argomento si concentrerà sugli errori causati dai bug del processore. Ecco le cose che ci concentreremmo sulla causa e sulla soluzione del problema.
Osservazioni
Nell'esempio DEL File Extension , utente X. Liu nota che questo errore non si verifica quando l'estensione del file nel comando DEL
è inferiore a 3 caratteri.
Confusione tra parentesi
Da questo sito web, l'OP ha notato un problema.
Causa
Considera il seguente frammento di codice.
if 1==1 (
set /a result = 2*(3+4)
)
A prima vista, potresti pensare che CMD.exe
lo elaborerebbe in questo modo:
- La condizione è vera, esegue il blocco di codice
- Imposta il valore del risultato variabile su
14
- Continua
Tuttavia, CMD.exe
questo modo:
- La condizione è vera, esegue il blocco di codice
- Calcola
2*(3+4
, il)
dopo che 4 viene elaborato alla fine del blocco di codiceif
- A random
)
è apparso!
Il secondo passaggio restituirà l'errore di Unbalanced parentheses
.
Soluzione
Secondo un set /?
di CMD.exe tedesco set /?
, dovremmo citare le operazioni aritmetiche. Ecco un esempio.
Precedente | Risultato |
---|---|
set /a result=2+5*4 | set /a result="2+5*4" |
A proposito, secondo un set /?
CMD.exe inglese set /?
, le virgolette sono obbligatorie se gli operatori logici o di modulo sono presenti nell'espressione (anche se questo non è un passaggio obbligato ).
Carattere di fuga improprio
In questa domanda di overflow dello stack , txtechhelp utente ha riscontrato un problema con il carattere ^
che potrebbe causare un problema di sicurezza.
Causa
anyInvaildCommand ^
Nota: assicurati che il segno di omissione ( ^
) sia l'ultimo carattere! Qualsiasi CR\LF
più non funzionerà affatto!
Il caret cerca il prossimo personaggio di fuggire. Tuttavia, non ci sono più personaggi disponibili per scappare, quindi cmd
loop infinitamente, cercando un personaggio da scappare. In questo processo "loop", cmd.exe
consumerà la memoria del tuo computer. E gradualmente mangiando tutta la memoria, mettendo il computer in ginocchio.
Questo problema può portare a problemi di sicurezza più seri in quanto uno potrebbe semplicemente inserire il codice nel proprio computer sbloccato.
soluzioni
Utilizzare la codepage UTF-16 potrebbe risolvere questo problema. Solo l' UTF-8 o l' ASCII causerebbero l'errore.
Assicurati che ci sia un
CR\LF
in più nel file, o semplicemente non usi il caret alla fine del file.
Extra
Questo bug sembra essere risolto in Windows 10.
Estensione del file DEL
Questo bug è stato segnalato da steve2916 da questa discussione sul forum di Microsoft Windows.
Causa
Considera una cartella con tali file.
TestA.doc
TestB.doc
TestC.docx
TestD.docx
Se vogliamo rimuovere tutto il file .doc
in questa directory, di solito faremmo:
del *.doc
Tuttavia, questo comando rimuove anche i file .docx
. Lo stesso accade sulle estensioni di file con questo modello.
File A | File B |
---|---|
Qualche nome. abc | Un altro nome. abc d |
Come possiamo vedere, finché la stringa di estensione del file contiene la stringa utilizzata nel comando del
, il file verrà eliminato. Si noti che questo errore si verifica solo quando la stringa di estensione utilizzata nel comando del
ha almeno tre caratteri. Ad esempio, del *.do
non elimina A.doc
o A.docx
.
Soluzione
Nel thread, l'utente MicroCompsUnltd ha notato che l'utilizzo di Powershell
avrebbe risolto il problema.