¿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.



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.


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.


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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.