
Creé un archivo por lotes genérico (o comando de Windows) que me permite recorrer el contenido de un directorio y llamar a un comando para cada elemento.
IF a%1==a ( set _DIR="%CD%") ELSE ( set _DIR="%~1")
IF a%2==a ( set _COMMAND=rem) ELSE ( set _COMMAND=%2)
IF a%3==a ( set _FILTER=*.*) ELSE ( set _FILTER=%3)
set _OPTS=%4
FOR /F "delims=" %%f IN ('dir %_DIR%\%_FILTER% %_OPTS% /b') DO (
%_COMMAND% "%%f"
)
Pero estoy tratando de determinar cómo asegurarme de llamar %_COMMAND%
al archivo correcto.
Intenté anteponer la variable de directorio al frente, como %_COMMAND% %_DIR%\"%%f"
, pero esto deja una comilla en el parámetro que paso. Por ejemplo, si llamo a mi archivo por lotes exec_dir.bat
y lo llamo con lo siguiente echo_test.bat
, veo que todos los archivos tienen comillas cuando echo_test.bat
se ejecutan.
echo %~dpn1.mp4
Ese script por lotes produce:
> exec_dir.bat "C:\Users\User\Desktop\Test Folder" echo_test.bat *.txt
C:\Users\User\Desktop\Test Folder\"Test File.txt
C:\Users\User\Desktop\Test Folder\"Test2.txt
Mi pensamiento es que tiene algo que ver con el \
personaje de escape, pero parece que no puedo solucionarlo.
Respuesta1
establecer local si "%~1"=="" (establecer dir=.) más (establecer dir="%~1") if "%~2"=="" (establecer comando=echo) else (establecer comando=%~2) if "%~3"=="" (establecer máscara=*) else (establecer máscara=%~3) para /r %dir% %%f en (%mask%) hacer %command% %%~dpnxf
O simplemente:
C:\>para /r . %f en (*) hacer @echo %~dpnxf