É possível no arquivo em lotes do Windows chamar mais de um comando em um único FOR
loop? Digamos, por exemplo, que eu queira imprimir o nome do arquivo e depois excluí-lo:
@ECHO OFF
FOR /r %%X IN (*.txt) DO (ECHO %%X DEL %%X)
REM the line above is invalid syntax.
Eu sei que nesse caso eu poderia resolvê-lo fazendo dois loops FOR distintos: um para mostrar o nome e outro para excluir o arquivo, mas é possível fazê-lo apenas em um loop?
windows
batch-file
cmd
Marco Demaio
fonte
fonte
for %i in (1 2 3) do echo %i & echo foo
imprime o que eu esperaria: "1", "foo", "2", "foo", "3", "foo" (em linhas separadas).&&
melhor do que&
?&&
falhará se o primeiro comando falhar,&
executará o segundo comando independentemente.DO
cometer um erro de sintaxe, verifique se você tem um parênteses sem escape entre os parênteses. Você pode escapar deles acrescentando um^
a eles.Usar
&
é bom para comandos curtos, mas essa linha única pode demorar muito, muito rapidamente. Quando isso acontecer, mude para a sintaxe de várias linhas.Colocação
(
e)
assuntos. Os colchetes depoisDO
devem ser colocados na mesma linha, caso contrário, o arquivo em lotes estará incorreto.Veja
if /?|find /V ""
para detalhes.fonte
DO
NÃO deve ser colocado na próxima linha, caso contrário, ele freia o arquivo em lotes. No código, quando escrevo um loop for, geralmente coloco o colchete na{
próxima linha.SilverSkin e Anders estão corretos. Você pode usar parênteses para executar vários comandos. No entanto, você deve garantir que os próprios comandos (e seus parâmetros) não contenham parênteses.
cmd
avidamente procura o primeiro parêntese de fechamento, em vez de manipular conjuntos aninhados de parênteses normalmente. Isso pode fazer com que o restante da linha de comando falhe na análise, ou pode fazer com que alguns dos parênteses sejam passados para os comandos (por exemploDEL myfile.txt)
).Uma solução alternativa para isso é dividir o corpo do loop em uma função separada. Observe que você provavelmente precisará pular o corpo da função para evitar "cair" nele.
fonte
C:\Program Files (x86)
.