Несколько команд в одной строке в пакетном файле Windows

В Unix мы можем поместить несколько команд в одну строку следующим образом:

$ date ; ls -l ; date

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

 > echo %TIME% ; dir ; echo %TIME

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

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

Ответ 1

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

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

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

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