Vários comandos em uma única linha em um arquivo de lote do Windows


Respostas:


181

Usar:

echo %time% & dir & echo %time%

Isso é, de memória, equivalente ao separador de ponto e vírgula em bashe outros shells UNIXy.

Há também &&(or ||) que só executa o segundo comando se o primeiro for bem-sucedido (ou falhar), mas o único e comercial &é o que você está procurando aqui.


Provavelmente, você terá o mesmo tempo, pois as variáveis ​​de ambiente tendem a ser avaliadas na leitura, em vez de na execução.

Você pode contornar isso ativando a expansão atrasada:

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

Isso é necessário na linha de comando. Se estiver fazendo isso dentro de um script, você pode apenas usar setlocal:

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

Obrigado pela resposta. O problema é que funciona parcialmente. o primeiro e o último% time% imprime ao mesmo tempo, mesmo quando o comando (no meio) leva pelo menos 40 segundos para ser concluído. (Eu executo meu script em vez do comando dir)
Raghuram

1
Isso ocorre porque as variáveis ​​de ambiente são avaliadas quando o comando é lido e não executado. Vou atualizar a resposta.
paxdiablo

Ainda assim, o problema persiste. O script está saindo com o código 1. Mas ainda assim o segundo eco é impresso ao mesmo tempo Veja isto op 12: 57: 56.93 Um encadeamento saiu enquanto 3 encadeamentos estavam em execução. 12: 57: 56.93
Raghuram

3
Eu tendia a usar time /t(ou echo.|time) em vez de echo %time%contornar o problema.
Joey

1
Alguma ideia de como fazer com que% errorlevel% esteja correto nas chamadas seguintes?
BradLaney,
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.