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.?

Foi útil?

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)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top