HOWTO · Batch

Eliminar comillas dobles de una variable en un archivo Batch

Aprende cuándo usar %~1, la sustitución de variables o FOR /F para eliminar comillas dobles en archivos Batch.

En esta página

Usa %~1 cuando el texto sea un argumento del archivo Batch. Usa %variable:"=% cuando quieras eliminar todos los caracteres de comillas dobles de una variable de entorno. Si solo necesitas quitar un par exterior y conservar las comillas internas, usa FOR /F con %~A. Son operaciones distintas. Los ejemplos usan set "name=value" y cubren espacios, metacaracteres, valores vacíos, expansión retardada y el momento de expansión de %value%.

Eliminar comillas de un argumento Batch con %~1

Los parámetros %0 a %9 contienen el nombre del archivo y sus argumentos. Cuando un llamador encierra entre comillas una ruta con espacios, el modificador de tilde elimina esas comillas exteriores al expandir el parámetro.

@echo off
set "input=%~1"
echo Input without surrounding quotes: [%input%]
remove-quotes.cmd "Report 2026.txt"
Input without surrounding quotes: [Report 2026.txt]

%~1 solo modifica un parámetro Batch; no es una forma de limpiar una variable arbitraria. Usa %~2 o %~3 para los demás argumentos. Las comillas internas no se eliminan.

Eliminar todas las comillas dobles de una variable

La sustitución %variable:search=replacement% puede reemplazar cada aparición de un carácter. Al reemplazar las comillas por una cadena vacía, desaparecen todas, no solo las exteriores:

@echo off
set "value="Hello World""
set "withoutQuotes=%value:"=%"
echo Value: [%value%]
echo Without quotes: [%withoutQuotes%]
Value: ["Hello World"]
Without quotes: [Hello World]

No uses este método si las comillas internas tienen significado. La misma sintaxis puede sustituir texto:

@echo off
set "value=Hello World"
set "updated=%value:World=Batch%"
echo [%updated%]
[Hello Batch]

Los caracteres &, |, <, > y ^ requieren cuidado del intérprete. Una asignación con set "name=value" ayuda a conservar la asignación, pero no convierte texto no confiable en código seguro.

Eliminar solo las comillas exteriores con FOR /F

Para conservar el contenido interno, FOR /F puede leer una línea y %~A quitar sus comillas exteriores. En un archivo Batch la variable de la bucle se escribe %%A; en la consola se escribe %A.

@echo off
set "value="Hello World""
for /f "delims=" %%A in (%value%) do set "withoutOuter=%%~A"
echo Original: [%value%]
echo Without outer quotes: [%withoutOuter%]
Original: ["Hello World"]
Without outer quotes: [Hello World]

delims= evita dividir la línea en tokens separados por espacios. FOR /F sigue teniendo reglas propias para líneas vacías, delimitadores y caracteres especiales.

Protege explícitamente el caso vacío:

@echo off
set "value="
set "withoutOuter="
if defined value for /f "delims=" %%A in (%value%) do set "withoutOuter=%%~A"
if not defined withoutOuter echo The value is empty
The value is empty

Expansión dentro de bloques entre paréntesis

cmd expande las variables con porcentaje cuando analiza una línea o un bloque. Por eso %value% puede conservar el valor anterior aunque el bloque lo haya cambiado. La expansión retardada modifica el momento, pero introduce una consideración adicional para !:

@echo off
setlocal EnableExtensions EnableDelayedExpansion
set "value="Hello World""
set "withoutOuter="
for /f "delims=" %%A in (!value!) do set "withoutOuter=%%~A"
echo Without outer quotes: [!withoutOuter!]
endlocal
Without outer quotes: [Hello World]

Usa expansión retardada solo cuando sea necesaria; los signos de exclamación dentro de los datos pueden cambiarse.

Por qué quitar comillas no siempre arregla el problema

Las comillas pueden ser sintaxis del analizador o datos reales. Conviene normalizar un argumento al recibirlo:

@echo off
set "path=%~1"
if not defined path (
    echo A path argument is required.
    exit /b 1
)
echo Ready to process: [%path%]
Ready to process: [C:\Program Files\Tool]

Quitar comillas no valida una ruta ni protege una entrada no confiable. Comprueba el valor antes de usarlo con del, copy, move u otro comando.

Elegir el método

Elige el procedimiento según el origen del valor: %~1 para argumentos, %variable:"=% para cada comilla y FOR /F con %~A para un par exterior.

Límites y resolución de problemas

Usa %~1 para un parámetro, %variable:"=% para eliminar cada comilla y FOR /F con %~A para un único par exterior. Una comilla sin pareja es una entrada incorrecta; eliminarla puede ocultar el error. En un archivo Batch las variables de FOR usan %%A, mientras que en la consola usan %A. Si el valor cambia dentro de un bloque entre paréntesis, revisa el momento de expansión. El método más limitado que resuelve la entrada suele ser el más seguro.