Расширение произвольной переменной на диск, путь и т. д.в пакете DOS

StackOverflow https://stackoverflow.com/questions/2238444

  •  19-09-2019
  •  | 
  •  

Вопрос

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

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

процесс.бат:

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

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

параметры.txt

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

Поэтому я изменил процесс.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 может мне помочь, но это выглядит громоздко.

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

Это было полезно?

Решение

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

@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» (часть имени test.pdf)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top