Ответ 1
Мысли
Причина этого (из моего понимания) объясняется интерпретатором cmd, который ищет символа, которого нужно избежать, поскольку ^
является символом escape партии. Вместо того, чтобы правильно идентифицировать конец файла eof
в этом сценарии, cmd просто продолжает цикл и инициализирует что-то во время поиска символа.
Воспроизводится на Windows 8 Pro (64) с помощью cc^^^
(Несколько карат, используемых для ускорения утечки).
Испытания
cc^
бесконечный цикл и течет очень медленно.
cc^^
сбой при нормальной ошибке.
cc^^^
бесконечный цикл и течет быстрее.
cc ^
бесконечный цикл и утечки очень медленно.
cc ^^
сбой при нормальной ошибке.
cc ^^^
бесконечный цикл и утечка быстрее.
cc"^
сбой при нормальной ошибке.
cc"^^
сбой при нормальной ошибке.
cc"^^^
сбой при нормальной ошибке.
Примечания
- Только бесконечные петли и утечки, когда караты
^
используются буквально (вне цитат). Когда в цитате добавлено сообщение об ошибке script со стандартной недопустимой командной ошибкой. - Только бесконечный цикл и утечки, когда командный файл кодируется как UTF-8 или ASCII. Когда UTF-16, script выходит из строя со стандартной недопустимой командой.
- Должно быть нечетное количество каратов, чтобы не покинуть последний карат.
Меры предосторожности
- Убедитесь, что пакетные скрипты не заканчиваются карат
^
(0x5E) или, по крайней мере, нечетное количество каратов. - Или закодировать их в UTF-16.