Возьмите мучительно простой пакетный файл:
echo hi
pause
Сохраните это как test.bat. Теперь создайте ярлык для test.bat. Ярлык запускает командный файл, который печатает «привет» и затем ожидает нажатия клавиши, как и ожидалось. Теперь добавьте некоторый аргумент в цель ярлыка. Теперь у вас есть ярлык для:
%path%\test.bat some args
Ярлык запускает пакетный файл, как и раньше.
Теперь запустите ярлык от имени администратора. (Между прочим, это в Windows 7.) Вы можете использовать либо правый клик -> Запуск от имени администратора, либо перейти к свойствам ярлыка и установить флажок в расширенном разделе. Скажите UAC, что все в порядке, и снова ярлык запускает пакетный файл, как и ожидалось.
Теперь измените аргументы в целевом ярлыке, добавив двойные кавычки:
%path%\test.bat "some args"
Теперь попробуйте ярлык от имени администратора. Это не работает на этот раз! Окно командной строки появляется и исчезает слишком быстро, чтобы увидеть любую ошибку. Я попытался добавить> test.log 2> & 1 в ярлык, но в этом случае журнал не создается.
Попробуйте запустить тот же ярлык (с двойными кавычками), но не с правами администратора. Он прекрасно запускает пакетный файл. Таким образом, похоже, что поведение не из-за параметров в двойных кавычках, и это не потому, что он запускается от имени администратора. Это какая-то странная комбинация двух.
Я также попытался запустить ту же команду из окна командной строки администратора. Это запустило пакетный файл, как и ожидалось, без ошибок. Запуск ярлыка из командного окна породил новое командное окно, которое вспыхнуло и исчезло. Таким образом, очевидно, что проблема вызвана комбинацией администратора, ярлыка и двойных кавычек.
Я в полном замешательстве, кто-нибудь знает, что происходит? Я также хотел бы обходной путь.