run how generate example create commands code batch bat windows batch-file

windows - how - Parámetro del archivo por lotes con espacios, comillas dobles, tuberías



how to create a batch file windows 10 (2)

Tengo un archivo de proceso por lotes que necesita pasar un parámetro que incluirá tuberías y espacios. Debido a los espacios, se deben unir dos comillas al parámetro al pasarlo. Necesito quitar esas comillas dobles y repetir el parámetro. Normalmente, usar ~ me permitiría hacer esto, pero creo que algo sobre los parámetros específicos que estoy pasando causa un problema. Si hago esto:

[test1.bat]

call test2.bat "Account|Access Level|Description"

[test2.bat]

echo %1 echo %~1

Y ejecuta test1.bat, obtengo esta salida:

"Account|Access Level|Description" ''Access'' is not recognized as an internal or external command, operable program or batch file.

Entonces, ¿cómo elimino las comillas dobles y aún tengo una variable utilizable?


@echo off if "%~2"=="" ( call %0 "Account|Access Level|Description" dummy ) ELSE ( setlocal ENABLEEXTENSIONS for /F "tokens=*" %%A IN ("%~1") DO @echo.%%A )

No es exactamente bonito, pero funciona. Tratar con personajes especiales siempre es un dolor en los archivos por lotes ...


Podría usar la expansión retrasada, porque no le importan los caracteres especiales.
El único problema es obtener el contenido del parámetro en una variable, ya que solo se puede transferir mediante una expansión porcentual.
Pero en tu caso, esto debería funcionar.

@echo off setlocal DisableDelayedExpansion set "str=%~1" setlocal EnableDelayedExpansion echo !str!

Observa, desactivo primero la expansión demorada, ¡así que! y ^ no son modificados por la expansión de% 1

EDITAR: la expansión retrasada se puede inhabilitar o habilitar con

setlocal DisableDelayedExpansion setlocal EnableDelayedExpansion

Si está habilitado, agrega otra forma de extender las variables ( !variable! lugar de %variable% ), primaria para evitar el efecto de bloque de parntesis de las variables (descrito en set /? ).

Pero la expansión con !variable! también previene el contenido de cualquier análisis posterior, porque la expansión retrasada es la última fase del análisis de líneas discontinuas.
En detalle, se explica en cómo funciona el intérprete de comandos de Windows cmd exe parse scripts