2012-01-19 3 views
96

В Unix, мы можем поместить несколько команд в одной строке, как это:несколько команд в одной строке в пакетном файле Windows,

$ date ; ls -l ; date 

Я попробовал подобную вещь в Windows:

> echo %TIME% ; dir ; echo %TIME 

Но оно напечатало время и не выполнило команду dir.

Как я могу это достичь?

+3

Возможный дубликат [Как запустить две команды в одной строке в Windows, CMD] (http://stackoverflow.com/questions/ 8055371/how-to-run-two-commands-in-one-line-in-windows-cmd) – IvanRF

ответ

155

Использование:

echo %time% & dir & echo %time% 

Это, из памяти, что эквивалентно сепараторе полу-ободочной кишки в bash и других оболочек UNIXy.

Там также && (или ||), который выполняет только вторую команду, если первая преуспела (или не удалось), но единственный амперсанд & является то, что вы ищете здесь.


Это, скорее всего, даст вам то же самое время, поскольку переменные окружения, как правило, оцениваются как чтение, а не выполнение.

Вы можете обойти это путем поворота на замедленное расширение:

pax> cmd /v:on /c "echo !time! & ping 127.0.0.1 >nul: & echo !time!" 
15:23:36.77 
15:23:39.85 

, что нужно из командной строки. Если вы делаете это в сценарии, вы можете просто использовать setlocal:

@setlocal enableextensions enabledelayedexpansion 
@echo off 
echo !time! & ping 127.0.0.1 >nul: & echo !time! 
endlocal 
+0

Спасибо за ответ. Проблема заключается в том, что она работает частично. первый и последний% времени% печатает одно и то же время, даже когда команда (в середине) занимает не более 40 секунд. (Я запускаю свой скрипт вместо команды dir) – Raghuram

+1

Это потому, что переменные среды оцениваются, когда команда _read_ чем выполнен. Я обновлю ответ. – paxdiablo

+0

Все еще проблема сохраняется. Сценарий выходит с кодом 1. Но все же второе эхо-выдает то же время. См. Это op 12: 57: 56.93 Поток, выходящий при запуске 3 потоков. 12: 57: 56.93 – Raghuram

Смежные вопросы