Команда сна в командном файле? - PullRequest
6 голосов
/ 31 октября 2011

Когда я пишу пакетный файл для автоматического запуска, как мне записать его так, чтобы при запуске пакетного файла он мог приостановиться на пару секунд между командами?

Контекст:

psexec \\server -u user -p pass cmd
[there needs to be a pause here for psexec to establish a connection]
dir /s >output.txt \\server\shared

* Примечание: причина, по которой я запускаю команду dir на стороне сервера с использованием psexec, а не локально, заключается в том, что намного быстрее запускать dir на локальном компьютере, чем удаленно, и время имеет большое значение.

Когда я делаю это вручную, это очевидно просто, я просто жду. Но запуск пакетного файла заставляет его запускать все команды на почти мгновенных скоростях рядом друг с другом, независимо от состояния завершения последней команды. Как поставить паузу?

Ответы [ 4 ]

26 голосов
/ 31 октября 2011

В Windows Vista / Windows 7 вы можете использовать команду timeout:

timeout /T [delay in seconds] /NOBREAK > NUL

В предыдущих версиях Windows вы можете использовать команду ping (команда ping имеет задержку 1000 мс между каждой итерацией):

ping -n [delay in seconds + 1] 127.0.0.1 > NUL

В некоторых версиях Windows (например, Windows Server 2003 ) есть исполняемый файл sleep.exe:

sleep [delay in seconds]

Примечание: Windows Resource Kit для 2003 содержит команду sleep.exe .

Если вы не знаете версию Windows, просто воспользуйтесь пинг-хаком, поскольку он будет доступен.

7 голосов
/ 31 октября 2011

В более поздней версии Windows есть команда timeout:

timeout /T 10
3 голосов
/ 31 октября 2011

Windows Resource Kit для 2003 будет установлен на Windows XP. Он содержит SLEEP.EXE, который можно использовать из командного файла.

скачать можно здесь http://www.microsoft.com/download/en/details.aspx?id=17657

2 голосов
/ 31 октября 2011

Я думаю, что информация здесь: http://malektips.com/xp_dos_0002.html объяснила бы это лучше, чем я.

Тем не менее, все еще существует случай обработки ошибок (что делать, если удаленная машина не работает?).cmd.exe совершенно бесполезен для выполнения каких-либо удаленных действий по большей части, использование powershell позволило бы намного больше.

EDIT ::

Фактически, вы можете выполнить программу, хранящуюся локально сpsexec (он копируется и выполняется локально на стороне сервера) - будет ли это более жизнеспособной альтернативой?

Не зная, какие команды вы собираетесь запускать, трудно продвинуться дальше.

EDIT (2) ::

Если вы выполняете только одну команду, просто сохраните ее в выделенном файле, например 'remote_dir_listing.cmd', а затем используйте psexec с:

psexec \\server -u <user> -p <pass> -c -f remote_dir_listing.cmd

Это будет принудительно копировать локальный файл на удаленную сторону при каждом его выполнении (на случай, если вы захотите его развернуть).Таким образом, вы вообще обойдете необходимость в паузе - только когда psexec откроет открытые каналы, он запустится, а после завершения закроет себя беззвучно.

...