-
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
enableextensionse / ouenabledelayedexpansionse 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.batdo 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, chamarstartcomplica a passagem de argumentos para o programa alvo mais do que simplesmentecalling 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 loopfore, 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>