Ответ 1
Как уже отмечает Игнасио Васкес-Абрамс, в Windows оболочка не выполняет подстановочные расширения. Это до приложения. Таким образом, вы ничего не можете сделать с оболочкой, чтобы остановить ее от выполнения чего-то, чего она не делает в первую очередь.
> echoargs.exe *
arg 1: *
Итак, если аргументы в вашем приложении каким-то образом повреждены, то это определенно не ошибка оболочки.
EDIT: Очевидно, что Java "помогает" копирует поведение Unix и расширяет для вас все подстановочные знаки. Выше echoargs
было написано на С#, поэтому проблема не была показана.
Хорошо, дальнейшее копание показывает этот отчет об ошибках с 2004 года. Это связано с тем, что Java была связана с другой версией setargv
, как описано здесь, в MSDN и, таким образом, расширяет подстановочные знаки в аргументах командной строки. Это происходит до того, как Java даже увидит аргументы, потому что это код запуска C.
Кроме того, это не документировано нигде, насколько я мог найти, ошибка 5036373, связанная выше, даже отмечает, что она должна быть документирована. По-видимому, нет никаких оснований для этого. Несмотря на то, что это делает невозможным передачу буквенного шаблона Java-программам. По-видимому, Windows действительно является лишь второстепенной целью для Java, и им все равно (или она сломает слишком много программ, но я не уверен, что многие из них явно полагаются на это поведение).