Espansione variabile arbitraria in un'unità, ecc percorso in un batch DOS
-
19-09-2019 - |
Domanda
Sto usando un batch DOS che elabora il file utilizzando il parametro passato:
process.bat "D:\PROJECT\TEST FILES\test.pdf" 72
process.bat:
gswin32c -r%2 -sDEVICE=jpeg -sOutputFile="%~n1-%%d.jpg" -- "%~1"
Possiamo vedere che il parametro è espanso al nome del file in batch: %~n1
.
Tuttavia mi è stato chiesto di riscrivere il lotto di leggere i parametri da un file di testo:
params.txt
1 D:\PROJECT\TEST FILES\test.pdf
2 72
Ho modificato il 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"
Ma% ~ NP2% non funziona.
Ho trovato che for /f "tokens=*" %%A in (%P1%) do %%~dA
mi potrebbe aiutare ma sembra ingombrante.
Quindi non v'è altro modo per espandere variabile arbitraria a un nome, unità, percorso, ecc.?
Soluzione
Si, quelli funzionano solo con gli argomenti speciali numero-based. Ma si può trasformare il vostro variabile in uno a passarlo a una subroutine nel file batch. Esempio:
@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
... stampe "TEST" (la parte del nome di test.pdf)