-
Não é ruim, mas se os arquivos em lote externos forem simples, basta colocar o código deles no arquivo em lote principal como sub-rotinas e apenas chamar seus rótulos. Por exemplo:
These four files: ::main.bat: @echo off call compress.bat … call validate.bat … call delete.bat … ::compress.bat: @echo off 7z a -tzip -mx9 -blah -blah %1.zip ::validate.bat: @echo off 7z t %1.zip ::delete.bat: @echo off delete "%1" Become one: ::main.bat: @echo off :start call compress … call validate … call delete … goto :eof :compress 7z a -tzip -mx9 -blah -blah %1.zip goto :eof :validate 7z t %1.zip goto :eof :delete.bat delete "%1" goto :eof
-
Você precisa apenas de
enableextensions
e / ouenabledelayedexpansion
se você for usá-los. Eu não sei o que você tem nos seus arquivos de lote, mas se você não é, você pode deixá-los de fora. -
Você não tem para usá-los nos arquivos em lote externos, se você puder fazê-los a partir de outro que desative o echo, mas é um bom hábito incluí-lo como um cabeçalho padrão, particularmente para arquivos em lote que você poderia chamar sozinhos (por exemplo, chamando
compress.bat
do prompt de comando manualmente). Há pouquíssimos cenários em que você especificamente deseja / precisa não incluí-lo. -
Você pode usar
start /wait
, mas simplesmente chamar um arquivo externo automaticamente espera que ele retorne por padrão, portanto, não deve ser necessário. Você geralmente deseja usá-lo ao chamar um programa GUI de um arquivo em lotes. Além disso, chamarstart
complica a passagem de argumentos para o programa alvo mais do que simplesmentecall
ing os argumentos. -
Mais do que provável, sim. Os parâmetros do loop são locais para o loop
for
, então o outro arquivo em lote não os verá, a menos que eles possuam um loopfor
e, mesmo assim, apenas no próprio loop:C:\t>type baz.bat @for %%a in (1) do call foobar.bat %%a C:\t>type foobar.bat @echo off echo %1 echo %%a for %%a in (1) do echo %%a echo %%a C:\t>baz.bat C:\t>call foobar.bat 1 1 %a 1 %a C:\t>