Szukaj…


Wprowadzenie

W tym temacie skoncentrujemy się na błędach spowodowanych błędami procesora. Oto rzeczy, na których chcielibyśmy skupić się na przyczynie i rozwiązaniu problemu.

Uwagi

W przykładowym rozszerzeniu pliku DEL użytkownik X. Liu zauważa, że ten błąd nie wystąpi, gdy rozszerzenie pliku w poleceniu DEL ma mniej niż 3 znaki.

Zamieszanie w nawiasach

Z tej strony internetowej PO zauważył problem.


Przyczyna

Rozważ następujący fragment kodu.

if 1==1 (
    set /a result = 2*(3+4)
)

Na pierwszy rzut oka możesz pomyśleć, że CMD.exe przetworzy to tak:

  • Warunek jest spełniony, wykonaj blok kodu
  • Ustaw wartość wyniku zmiennej na 14
  • Kontyntynuj

Jednak proces CMD.exe tak:

  • Warunek jest spełniony, wykonaj blok kodu
  • Oblicz 2*(3+4 , the ) po 4 jest przetwarzany na końcu bloku kodu if
  • Losowo ) pojawił się!

Drugi krok zwróci błąd Unbalanced parentheses .


Rozwiązanie

Według niemieckiego zestawu CMD.exe set /? , musielibyśmy zacytować operacje arytmetyczne. Oto przykład.

Poprzedni Wynik
set /a result=2+5*4 set /a result="2+5*4"

Nawiasem mówiąc, zgodnie z angielskim set /? CMD.exe set /? , cudzysłowy są wymagane, jeśli w wyrażeniu występują operatory logiczne lub modułowe (chociaż nie jest to krok konieczny).

Niewłaściwa postać ucieczki

W tym pytaniu dotyczącym przepełnienia stosu użytkownik txtechhelp znalazł problem ze znakiem ^ który może powodować problem z bezpieczeństwem.


Przyczyna

anyInvaildCommand ^

Uwaga: Upewnij się, że karetka ( ^ ) jest ostatnim znakiem! Wszelkie dodatkowe CR\LF ogóle nie będą działać!

Karetka szuka następnej postaci do ucieczki. Jednak nie ma już postaci do ucieczki, więc cmd zapętla się w nieskończoność, szukając postaci do ucieczki. W tym procesie „pętli” cmd.exe zużywa pamięć komputera. I stopniowo zjadając całą pamięć, sprowadzając komputer na kolana.

Ten problem może prowadzić do poważniejszych obaw związanych z bezpieczeństwem, ponieważ wystarczy wprowadzić kod do odblokowanego komputera.

Rozwiązania

  • Użyj strony kodowej UTF-16 może rozwiązać ten problem. Tylko UTF-8 lub ASCII spowodowałoby błąd.

  • Upewnij się, że w pliku jest dodatkowy CR\LF , lub po prostu nie używaj karetki na końcu pliku.

Dodatkowy

Ten błąd wydaje się być rozwiązany w systemie Windows 10.

Rozszerzenie pliku DEL

Ten błąd został zgłoszony przez steve2916 z tego wątku na forum Microsoft Windows.


Przyczyna

Rozważ folder z takimi plikami.

TestA.doc
TestB.doc
TestC.docx
TestD.docx

Jeśli chcemy usunąć cały plik .doc z tego katalogu, zwykle robimy:

del *.doc

Jednak to polecenie usuwa również pliki .docx . To samo dzieje się z rozszerzeniami plików z tym wzorcem.

Plik a Plik B
Jakiekolwiek imię. ABC Inne imię. abc d

Jak widać, tak długo, jak ciąg rozszerzenia pliku zawiera ciąg użyty w poleceniu del , plik zostanie usunięty. Zauważ, że ten błąd występuje tylko wtedy, gdy ciąg rozszerzenia użyty w poleceniu del ma co najmniej trzy znaki. Na przykład del *.do A.docx nie usuwa plików A.doc ani A.docx .

Rozwiązanie

W wątku użytkownik MicroCompsUnltd zauważył, że użycie Powershell rozwiązałoby problem.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow