Expandindo variável arbitrária de uma unidade, caminho etc., num lote DOS
-
19-09-2019 - |
Pergunta
Eu estou usando um dos lotes que processa arquivo usando parâmetro passado:
process.bat "D:\PROJECT\TEST FILES\test.pdf" 72
process.bat:
gswin32c -r%2 -sDEVICE=jpeg -sOutputFile="%~n1-%%d.jpg" -- "%~1"
Podemos ver que o parâmetro é expandido para o nome do arquivo no lote: %~n1
.
No entanto me pediram para reescrever o lote para ler os parâmetros a partir de um arquivo de texto:
params.txt
1 D:\PROJECT\TEST FILES\test.pdf
2 72
Então eu modifiquei o process.bat :
for /f "tokens=1,*" %%A in ('type ..\params.txt') do set P%%A=%%B
gswin32c -r%P1% -sDEVICE=jpeg -sOutputFile="%~nP2%-%%d.jpg" -- "%~1"
Mas% ~ np2% não funciona.
Eu descobri que for /f "tokens=*" %%A in (%P1%) do %%~dA
poderia me ajudar, mas parece complicado.
Então, há alguma outra maneira de expandir variável arbitrária a um nome, unidade, caminho etc.?
Solução
Sim, aqueles que só trabalham com os argumentos especiais baseados em números. Mas você pode transformar seu variável em uma passando-a para uma sub-rotina no arquivo de lote. Exemplo:
@echo off
set P1=D:\PROJECT\TEST FILES\test.pdf
call :Split %P1%
echo %FNAME%
exit /b 0
:Split
set FNAME=%~n1
exit /b 0
... impressões "TEST" (a parte do nome de test.pdf)