¿Qué significa el signo de porcentaje (% y %%) en un argumento de archivo por lotes?

11

Creo que me estoy perdiendo algo porque parece que no puedo encontrar lo que esto significa.

Ejemplo:

for /D %%A in (*) do "\7za.exe" u -t7z -m9=LZMA2 "%%A.7z" "%%A"

Se suponía que esa línea debía usar una versión de línea de comandos 7zippara comprimir carpetas individuales, pero no sé qué %%Asignifica en este contexto.

Jim Kieger
fuente
1
Tengo la línea de comando y el archivo de baño confundidos. Cambió el letrero en la parte superior.
Jim Kieger el

Respuestas:

12

El forcomando necesita un marcador de posición para que pueda pasar variables para su uso más adelante en la consulta, le decimos que use el marcador de posición %A, la razón por la que el código que vio %%Ase debe a que dentro de un archivo por lotes (que supongo es donde encontró esto) el %tiene un significado especial, por lo que debe hacerlo dos veces %%para que se convierta en un solo %para pasar al forcomando

Para separar realmente lo que está haciendo el comando, el comando tiene dos partes:

 for /D %%A in (*) do .....

Lo que dice esta parte es que para cada carpeta en la carpeta actual ejecute el siguiente comando reemplazando %%Acon el nombre de la carpeta que se está procesando actualmente.

..... "\7za.exe" u -t7z -m9=LZMA2 "%%A.7z" "%%A"

Lo que dice esta parte es ejecutar el comando "\7za.exe" u -t7z -m9=LZMA2 "%%A.7z" "%%A"y reemplazar los dos %%Acon el registro actual que estamos procesando.

Scott Chamberlain
fuente
Solo para señalar: la / D en el bucle for limitará el comodín * a los directorios, no "cada archivo en esta carpeta y cada subcarpeta" (suponiendo que las extensiones de comando estén habilitadas).
ernie
@ernie tienes razón, estaba mirando el modificador / R en la página de ayuda, he corregido mi respuesta.
Scott Chamberlain el
Gracias por eso, muestra cuán novato parece esto, pero es algo bastante arcaico que tengo que buscar en un par de manuales en línea.
Jim Kieger el
0

Es una variable.

Ese ejemplo particular usa la opción de directorio de un bucle FOR , iterando a través de los directorios y asignándolos a %% A.

Tampoco es un ejemplo de línea de comandos, sino un ejemplo de archivo por lotes. En los archivos por lotes, debe usar %% A, mientras que en la línea de comandos, simplemente usaría% A.

ernie
fuente
0

En su escenario, el %% A es un marcador de posición para lo que el ciclo "for" está iterando (que / D indica directorios). Entonces, cada iteración del ciclo, %% A es uno de los directorios.

Verá %% en lugar de% en el código de lote. Verá% en lugar de %% usado en su símbolo del sistema.

Entonces, sepa que si copia un código de archivo por lotes en un símbolo del sistema y lo ejecuta con %% en uso, se producirá un error, y viceversa.

Mechaflash
fuente