Поиск…


Вступление

В этом разделе будут рассмотрены ошибки, вызванные ошибками процессора. Здесь мы сосредоточим внимание на причине и решении проблемы.

замечания

В примере расширения файла DEL , пользователь X. Liu отмечает, что эта ошибка не будет возникать, если расширение файла в команде DEL меньше 3 символов.

Скорбь в скобках

На этом веб-сайте ОП заметила проблему.


причина

Рассмотрим следующий фрагмент кода.

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

На первый взгляд вы можете подумать, что CMD.exe обрабатывает его так:

  • Условие истинно, выполнить блок кода
  • Задайте значение переменной результата равным 14
  • Продолжить

Однако процесс CMD.exe так:

  • Условие истинно, выполнить блок кода
  • Вычислить 2*(3+4 , то ) после того, как 4 обрабатывается в конце , if блок кода
  • Случайный ) появился!

На втором этапе будет возвращена ошибка « Unbalanced parentheses .


Решение

Согласно немецкому набору CMD.exe set /? , нам нужно будет указать арифметические операции. Вот пример.

предыдущий Результат
set /a result=2+5*4 set /a result="2+5*4"

Кстати, согласно английскому набору CMD.exe set /? , кавычки требуются, если в выражении присутствуют логические или модулирующие операторы (хотя это не обязательный шаг).

Неправильный символ побега

В этом вопросе переполнения стека пользователь txtechhelp обнаружил проблему с символом ^ который может вызвать проблему безопасности.


причина

anyInvaildCommand ^

Примечание. Убедитесь, что карет ( ^ ) является последним символом! Любые дополнительные CR\LF не будут работать вообще!

Каретт ищет следующего персонажа, чтобы убежать. Тем не менее, больше нет персонажа, доступного для побега, поэтому cmd петли бесконечно, ища персонажа, чтобы убежать. В этом «цикле» процесс cmd.exe будет потреблять память вашего компьютера. И постепенно съедает всю память, доведя компьютер до колен.

Эта проблема может привести к более серьезным проблемам безопасности, так как можно просто ввести код в незаблокированный компьютер.

Решения

  • Использование кодовой страницы UTF-16 может решить эту проблему. Ошибка UTF-8 или ASCII приведет к ошибке.

  • Убедитесь, что в файле есть дополнительный CR\LF , или просто не используйте каретки в конце файла.

дополнительный

Эта ошибка, похоже, решена в Windows 10.

Расширение файла DEL

Об этой ошибке сообщал steve2916 из этой темы форума Microsoft Windows.


причина

Рассмотрим папку с такими файлами.

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

Если мы хотим удалить весь файл .doc в этом каталоге, мы обычно будем делать:

del *.doc

Однако эта команда также удаляет файлы .docx . То же самое происходит и с расширениями файлов с этим шаблоном.

Файл A Файл B
Любое имя. азбука Другое имя. abc d

Как мы видим, до тех пор, пока строка расширения файла содержит строку, используемую в команде del , файл будет удален. Обратите внимание, что эта ошибка возникает только тогда, когда строка расширения, используемая в команде del имеет не менее трех символов. Например, del *.do не удаляет A.doc или A.docx .

Решение

В потоке пользователь MicroCompsUnltd заметил, что использование Powershell решит проблему.



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow