Пакетный файл для выключения компьютера через удаленный рабочий стол в Windows XP

У меня есть рабочая станция с Windows Vista, которую я использую большую часть времени, но иногда мне нужно подключить удаленный рабочий стол к рабочей станции с Windows XP. Из-за различий в разрешении меню «Пуск» в моем сеансе удаленного рабочего стола не видно, пока я не развернусь в полноэкранный режим (чего я предпочитаю избегать, чтобы по-прежнему видеть меню «Пуск» и область уведомлений на рабочей станции Vista) или не прокрутил до снизу (но мне лень!).

Я решил создать пакетный файл для выключения компьютера с Windows XP при использовании удаленного рабочего стола. Важно, чтобы у него была какая-то подсказка на случай, если я каким-то образом случайно щелкну его с рабочего стола.

Вот источник командного файла:

pause

echo 1
shutdown /s /f
echo 2

Тем не менее, файл, кажется, зацикливается на команде выключения. Вот вывод из пакетного файла:

C:\Documents and Settings\Kiley\Desktop>pause
Press any key to continue . . .

C:\Documents and Settings\Kiley\Desktop>echo 1
1

C:\Documents and Settings\Kiley\Desktop>shutdown /s /f

C:\Documents and Settings\Kiley\Desktop>pause
Press any key to continue . . .

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

Я также попытался создать похожий, но другой пакетный файл, например...

@ECHO OFF

:choice
set /P c=SHUTDOWN[Y/N]?
if /I "%c%" EQU "Y" goto :do_shutdown
goto :choice


:somewhere

shutdown -s -f

Но как только я набираю «y» и нажимаю ввод, командный файл закрывается, и машина не выключается.

У кого-нибудь есть мысли, советы или предложения? Проблема незначительная, но сейчас мне просто интересно...

EDIT: было предложено попробовать использовать символ "-" для обозначения переключателя вместо "/". Это производит такое же поведение. Однако интересно то, что я могу запустить следующую команду в командной строке с рабочей станции XP, чтобы правильно начать завершение работы из командной строки:

shutdown -s

Я попытался использовать переключатель /m на своей рабочей станции Vista, и командная строка, которая появляется при двойном щелчке командного файла, закрывается, как только выдается команда выключения. Когда я пытаюсь запустить команду выключения с ключом /m из командной строки, я получаю следующий вывод:

C:\Windows\system32>shutdown /s /f /m \\WORKSTATION-V5
WORKSTATION-V5: Access is denied.(5)

person Kiley Naro    schedule 31.08.2011    source источник


Ответы (2)


В вашем первом фрагменте кода вы использовали / для переключателей вместо - . Поскольку вы удаленно подключены к машине, все, что вам нужно сделать, это указать код следующим образом:

shutdown -s -f

Если вам разрешено отправлять удаленные команды на компьютер, вместо использования удаленного рабочего стола для ручного доступа к машине вы можете ввести следующую команду в ВАШЕЙ командной строке, а не на удаленном компьютере:

shutdown -s -f -m \\computername

РЕДАКТИРОВАТЬ:

Чтобы создать приглашение DOS для завершения работы с помощью BATCH SCRIPT:

:START
SET /p sd=Would you like to shutdown? [ Y ] or [ N ]     :
IF "%sd%"=="Y" GOTO:SHUTDOWN
IF "%sd%"=="y" GOTO:SHUTDOWN
IF "%sd%"=="n" GOTO:EOF
IF "%sd%"=="N" GOTO:EOF
ECHO Incorrect Answer... Please Try Again
PAUSE
GOTO:START
:SHUTDOWN
shutdown -s
person Anthony Miller    schedule 31.08.2011
comment
Вы тестировали использование - вместо / для переключателей? Я пробовал это раньше и по вашему предложению решил попробовать еще раз в качестве проверки вменяемости; он выдает результат, идентичный исходной задаче. Для записи, текст справки при выключении -? или выключение /? показывает переключатели в виде косой черты. Я также попробовал ваше предложение использовать переключатель -m с \\COMPUTERNAME, что выглядело многообещающе... К сожалению, я получил сообщение об отказе в доступе, но в противном случае я думаю, что это, вероятно, сработало бы. Хорошая идея. - person Kiley Naro; 01.09.2011
comment
Для Windows XP это -. Насчет висты не уверен. Тем не менее, я отредактирую сообщение для запроса на выключение для вас. - person Anthony Miller; 01.09.2011
comment
Ваш скрипт сработал отлично! Это помогло мне понять, что у меня была опечатка в исходном сценарии, который я использовал. Я сделал несколько настроек (включая @ECHO OFF) и разместил полученный скрипт в своем ответе. Спасибо за помощь, ты молодец! - person Kiley Naro; 02.09.2011

Попробовав несколько разных вещей, вот решение, с которым я остановился:

Я создал ярлык выключения на компьютере с XP, щелкнув правой кнопкой мыши на рабочем столе и введя следующее в качестве нового пути для быстрого доступа:

shutdown -s

Как я уже упоминал в вопросе, мне нужна была отказоустойчивость на случай, если я случайно начну отключение. Поскольку ОС дает 30-секундный таймер после ввода команды выключения с помощью приведенного выше ярлыка, я решил создать ярлык прерывания:

shutdown -a

РЕДАКТИРОВАТЬ

Mechaflash предоставил рабочее решение. Изучив разницу между его сценарием и моей первоначальной подсказкой для сценария Y/N, я понял, что в моем сценарии была опечатка: переход к условию Y указывал на раздел, которого не существовало! Я внес небольшие изменения в его исходный код, поэтому сегодня использую следующее:

@ECHO OFF
:START
SET /p sd=Would you like to shutdown? [y to continue]     :
IF /I "%sd%"=="y" GOTO:SHUTDOWN
GOTO:EOF

:SHUTDOWN
shutdown -s
person Kiley Naro    schedule 31.08.2011
comment
Я нуб... совсем забыл про /я переключаюсь на IF blush - person Anthony Miller; 02.09.2011