batch-file
Bugs i cmd.exe-processor
Sök…
Introduktion
Det här ämnet kommer att fokusera på fel orsakade av processorbuggarna. Här är de saker vi skulle fokusera på orsaken och lösningen på frågan.
Anmärkningar
I exemplet DEL Filtillägg , användar X. Liu upptäcker att detta fel kommer inte uppstår när filändelsen i DEL
kommandot är mindre än 3 tecken.
Parentheses förvirring
Från denna webbplats har OP märkt ett problem.
Orsak
Tänk på följande kodavsnitt.
if 1==1 (
set /a result = 2*(3+4)
)
Vid din första anblick kanske du tror att CMD.exe
skulle behandla det så:
- Villkoret är sant, kör kodblock
- Ställ in det variabla resultatet till
14
- Fortsätta
Emellertid bearbetar CMD.exe
så:
- Villkoret är sant, kör kodblock
- Beräkna
2*(3+4
,)
efter att 4 har bearbetats i slutet avif
kodblocket - En slumpmässig
)
har dykt upp!
Det andra steget returnerar fel i Unbalanced parentheses
.
Lösning
Enligt en tysk CMD.exe- set /?
, skulle vi behöva citera aritmetiska operationer. Här är ett exempel.
Tidigare | Resultat |
---|---|
set /a result=2+5*4 | set /a result="2+5*4" |
Förresten, enligt en engelsk CMD.exe- set /?
, anbud krävs om logiska eller moduloperatörer finns i uttrycket (även om detta inte är ett måste-göra- steg).
Felaktig Escape-karaktär
I denna Stack Overflow-fråga hittade användaren txtechhelp ett problem med ^
-tecknet som kan orsaka ett säkerhetsproblem.
Orsak
anyInvaildCommand ^
Obs: Se till att caret ( ^
) är det sista tecknet! Eventuella extra CR\LF
fungerar inte alls!
Caret letar efter nästa karaktär att fly. Men de är inte fler karaktärer tillgängliga att fly, så cmd
slingor oändligt, letar efter en karaktär att fly. I denna "loop" -process konsumerar cmd.exe
ditt datorminne. Och gradvis äter allt minne, vilket gör datorn till knäna.
Det här problemet kan leda till allvarligare säkerhetsproblem eftersom man bara kan ange koden i ens låsta dator.
lösningar
Använd kodkod UTF-16 kan lösa problemet. Endast UTF-8 eller ASCII orsakar felet.
Se till att det finns en extra
CR\LF
i filen, eller använd helt enkelt inte caret i slutet av filen.
Extra
Det här felet verkar vara löst i Windows 10.
DEL filändelse
Detta fel rapporterades av steve2916 från denna Microsoft Windows Forum-tråd.
Orsak
Överväg en mapp med sådana filer.
TestA.doc
TestB.doc
TestC.docx
TestD.docx
Om vi vill ta bort alla .doc
filer i den här katalogen gör vi vanligtvis:
del *.doc
Detta kommando tar dock också bort .docx
filerna. Detsamma sker på filändelser med detta mönster.
Fil A | Fil B |
---|---|
Något namn. ABC | Ett annat namn. abc d |
Som vi ser, så länge filändelsesträngen innehåller strängen som används i kommandot del
, kommer filen att raderas. Observera att detta fel bara inträffar när den tilläggsträng som används i kommandot del
har minst tre tecken. del *.do
inte A.doc
eller A.docx
.
Lösning
I tråden märkte användaren MicroCompsUnltd att användning av Powershell
skulle lösa problemet.