¿Es posible en el archivo por lotes de Windows llamar a más de un comando en un solo FOR
bucle? Digamos, por ejemplo, que quiero imprimir el nombre del archivo y después de eliminarlo:
@ECHO OFF
FOR /r %%X IN (*.txt) DO (ECHO %%X DEL %%X)
REM the line above is invalid syntax.
Sé que en este caso podría resolverlo haciendo dos bucles FOR distintos: uno para mostrar el nombre y otro para eliminar el archivo, pero ¿es posible hacerlo solo en un bucle?
windows
batch-file
cmd
Marco Demaio
fuente
fuente
for %i in (1 2 3) do echo %i & echo foo
imprime lo que esperaría: "1", "foo", "2", "foo", "3", "foo" (en líneas separadas).&&
lugar de&
?&&
fallará si falla el primer comando,&
ejecutará el segundo comando independientemente.DO
pares. Puede escapar de ellos agregando un^
a ellos.El uso
&
está bien para comandos cortos, pero esa sola línea puede ser muy larga y muy rápida. Cuando eso suceda, cambie a la sintaxis de varias líneas.Colocación
(
y)
materias. Los corchetes posterioresDO
deben colocarse en la misma línea; de lo contrario, el archivo por lotes será incorrecto.Ver
if /?|find /V ""
para más detalles.fuente
DO
NO debe colocarse en la siguiente línea, de lo contrario, frena el archivo por lotes. En el código cuando escribo un bucle for, generalmente coloco el corchete en la{
siguiente línea.SilverSkin y Anders son correctos. Puede usar paréntesis para ejecutar múltiples comandos. Sin embargo, debe asegurarse de que los comandos en sí (y sus parámetros) no contengan paréntesis.
cmd
busca con avidez el primer paréntesis de cierre, en lugar de manejar conjuntos anidados de paréntesis con gracia. Esto puede hacer que el resto de la línea de comandos no se pueda analizar, o puede hacer que algunos paréntesis pasen a los comandos (por ejemploDEL myfile.txt)
).Una solución alternativa para esto es dividir el cuerpo del bucle en una función separada. Tenga en cuenta que probablemente necesite saltar alrededor del cuerpo de la función para evitar "caer" en él.
fuente
C:\Program Files (x86)
.