Расширение произвольной переменной до диска, пути и т. Д. В пакете DOS - PullRequest
1 голос
/ 10 февраля 2010

Я использую пакет dos, который обрабатывает файл, используя переданный параметр:

process.bat "D:\PROJECT\TEST FILES\test.pdf" 72

process.bat:

gswin32c -r%2 -sDEVICE=jpeg -sOutputFile="%~n1-%%d.jpg" -- "%~1"

Мы видим, что параметр расширяется до имени файла в пакете: %~n1. Однако меня попросили переписать пакет для чтения параметров из текстового файла:

params.txt

1 D:\PROJECT\TEST FILES\test.pdf
2 72

Итак, я изменил 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"

Но% ~ nP2% не работает.

Я обнаружил, что for /f "tokens=*" %%A in (%P1%) do %%~dA может помочь мне, но это выглядит громоздко.

Так есть ли другой способ расширить произвольную переменную до имени, диска, пути и т. Д .?

1 Ответ

2 голосов
/ 10 февраля 2010

Да, они работают только со специальными аргументами, основанными на числах.Но вы можете превратить вашу переменную в одну, передав ее подпрограмме в пакетном файле.Пример:

@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

... печатает "ТЕСТ" (часть имени test.pdf)

...