
Criei um arquivo em lote genérico (ou comando do Windows) que me permite percorrer o conteúdo de um diretório e chamar um comando para cada item.
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"
)
Mas estou tentando determinar como garantir que chamo %_COMMAND%
o arquivo correto.
Tentei pré-pender a variável de diretório na frente, como %_COMMAND% %_DIR%\"%%f"
, mas isso deixa aspas no parâmetro que passo. Por exemplo, se eu chamar meu arquivo em lote exec_dir.bat
e chamá-lo com o seguinte echo_test.bat
, vejo que todos os arquivos têm aspas quando echo_test.bat
são executados.
echo %~dpn1.mp4
Esse script em lote produz:
> 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
Meu pensamento é que isso tem algo a ver com o \
personagem de escape, mas não consigo contornar isso.
Responder1
definirlocal if "%~1"=="" (definir dir=.) else (definir dir="%~1") if "%~2"=="" (definir comando=echo) else (definir comando=%~2) if "%~3"=="" (definir máscara=*) else (definir máscara=%~3) para /r %dir% %%f in (%mask%) faça %command% %%~dpnxf
Ou simplesmente:
C:\>para /r . %f em (*) do @echo %~dpnxf