Como garantir o caminho completo no loop FOR do lote do Windows

Como garantir o caminho completo no loop FOR do lote do Windows

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.bate chamá-lo com o seguinte echo_test.bat, vejo que todos os arquivos têm aspas quando echo_test.batsã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

informação relacionada