Расширение произвольной переменной на диск, путь и т. д.в пакете DOS
-
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)
Не связан с StackOverflow