Pregunta

Estoy intentando extraer por lotes algunos archivos rar que están en algún zip en algunos directorios. Larga historia corta, este es mi bucle a través de los archivos rar:

for %%r in (*.rar) do (

unrar x %%r
)

El problema es que %% r obtiene el valor incorrecto. Si el nombre de los archivos es " nombre de archivo.rar " entonces %% r obtiene el valor " archivo " - se detiene en el primer espacio en el nombre del archivo.

¿Cómo consigo que este bucle funcione con archivos con espacios en los nombres?

Gracias

¿Fue útil?

Solución

Prueba esto:

for /f "usebackq delims==" %i in (`dir /b *.rar`) do unrar x "%i"

Si lo está utilizando en un archivo por lotes, recuerde que deberá duplicar los signos de porcentaje para escapar de ellos.

Otros consejos

%% r contendrá el nombre completo del archivo, incluidos los espacios. Es su llamada a unrar que tiene el problema. Si el nombre del archivo contiene espacios, debe incluirlo entre comillas, de lo contrario, unrar no podrá ver que los dos parámetros (separados por espacios) archivo y < code> name.rar son en realidad un único nombre de archivo con un espacio.

Así funcionará lo siguiente:

for %%r in (*.rar) do unrar "%%r"

Además, si tiene curiosidad por saber dónde está el problema, a veces es muy útil simplemente reemplazar la llamada del programa con eco:

for %%r in (*.rar) do @echo %%r

donde verá que %% r incluye los espacios en los nombres de los archivos y no los corta.

El problema es que 'for' usa el espacio como delimitado por defecto. Puedes configurarlo usando los delims = xxx. busque aquí para ver la sintaxis. O puede usar ForFiles .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top