Команда сна в командном файле?

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

Контекст:

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 на локальном компьютере, чем удаленно, и время имеет существенное значение.

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


person jayjyli    schedule 31.10.2011    source источник
comment
Возможный дубликат сна в пакетном файле   -  person Peter Mortensen    schedule 23.07.2013
comment
stackoverflow.com/a/7958678/206730 более полезен, может быть отмечен как ответ   -  person Kiquenet    schedule 28.01.2014


Ответы (4)


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

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

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

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

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

РЕДАКТИРОВАТЬ (2) ::

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

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

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

person septical    schedule 31.10.2011

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

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 для 2003 года содержит спящий режим. exe.

Если вы не знаете версию для Windows, просто воспользуйтесь функцией ping, так как она будет доступна.

person softmllx    schedule 31.10.2011
comment
Я бы сказал, что большинство людей, пришедших сюда из Google, найдут этот ответ (не принятый) наиболее полезным. - person SSH This; 11.07.2013
comment
Поскольку TCP / IP теперь является повсеместным, использование ping обычно работает, но только если используется TCP / IP (клиентская машина Windows может вместо этого использовать NetBEUI или IPX / SPX). Ссылка: techrepublic.com/article/ - person Peter Mortensen; 24.07.2013
comment
Подтверждено, что в Windows 10 Enterprise доступна указанная выше команда сна. - person Dale Moore; 22.08.2018

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

timeout /T 10
person manojlds    schedule 31.10.2011

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

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

person Rob Greene    schedule 31.10.2011