Como garantir o caminho completo no loop FOR do Windows batch

2

Eu criei um arquivo batch (ou Windows Command) genérico 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 eu chame %_COMMAND% no arquivo correto.

Eu tentei pré-pendurar a variável de diretório na frente, como %_COMMAND% %_DIR%\"%%f" , mas isso deixa uma aspa no parâmetro que eu passo. Por exemplo, se eu chamar meu arquivo de 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 é executado.

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 \ como um caractere de escape, mas parece que não consigo contornar isso.

    
por palswim 16.12.2010 / 23:57

1 resposta

0

setlocal
if "%~1"=="" (set dir=.) else (set dir="%~1")
if "%~2"=="" (set command=echo) else (set command=%~2)
if "%~3"=="" (set mask=*) else (set mask=%~3)
for /r %dir% %%f in (%mask%) do %command% %%~dpnxf

Ou simplesmente:

C:\>for /r . %f in (*) do @echo %~dpnxf
    
por 17.12.2010 / 00:07

Tags