Пакетный подстановочный знак в имени файла / пути не работает - PullRequest
0 голосов
/ 04 августа 2020

Я больше похож на парня из bash, чем за пакет, и я изо всех сил пытаюсь понять, почему этот подстановочный знак не работает. У меня есть пакетный файл для печати документов, но я хочу использовать подстановочный знак для номера версии.

Например: Это работает:

@ECHO OFF
CLS

ECHO PRINTING HR PACKAGE
PAUSE

SET PDF_DS_P=call "Print_PDF_Double_Sided.cmd"
SET PWD=\Orientation Package\HR\
SET F1="%PWD%HR Docs\HR Welcome (rev02.00).pdf"
%PDF_DS_P% %F1%

Double_Sided.CMD

%PRINTCMD% "%~1" "\\%SERVER%\%SHARE%"

Но если я сделаю следующее, скрипт сломается:

SET F1="%PWD%HR Docs\HR Welcome (rev*).pdf"

Ответы [ 2 ]

2 голосов
/ 06 августа 2020

В bash подстановочный знак автоматически расширяется до серии файлов и выполняет команду с каждым файлом. В партии нет. В пакетном режиме вы должны явно развернуть подстановочный знак с помощью команды FOR, а затем выполнить нужную команду с параметром FOR:

@ECHO OFF
CLS

ECHO PRINTING HR PACKAGE
PAUSE

SET PDF_DS_P=call "Print_PDF_Double_Sided.cmd"
SET PWD=\Orientation Package\HR\

for %%f in (rev*.pdf) do (
   %PDF_DS_P% "%PWD%HR Docs\HR Welcome (%%~Nf).pdf"
)
0 голосов
/ 12 августа 2020

Превратил ответ Аачини в функцию, но сразу заметил оговорку (которую я не отлаживал, так как могу жить). , что при наличии нескольких файлов было бы наихудшим вариантом, я бы хотел получить последний буквенно-цифровой результат. Не стесняйтесь добавлять лучший ответ для голосования за!

@ECHO OFF
setlocal enabledelayedexpansion
CLS

SET PWD="C:\tmp
set  RevFile=%PWD%\Rev*.pdf"
ECHO %RevFile%
CALL :FINDFILEWILDCARD %RevFile% RevFile

:FINDFILEWILDCARD
for %%f in (%~1) do (
 SET %2="%%~f"
 EXIT /B
)

ECHO %RevFile%
PAUSE
...