LINUX.ORG.RU

common substitutes in cmd windows

 , ,


0

2

Всем доброго дня. У меня вопрос по офтопику. Решил спросить здесь.

Есть такая конструкция:

gswin64c.exe -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile=merged.pdf `dir /b *.pdf`

Она работает в неродном командном интерпретаторе в среде Windows (nyagos - потому что он использует приёмы bash-scripting). В родном cmd - не работает. Это скрипт, сшивающий все pdf в дирректории в один файл при помощи GhostScript. Мне нужно скормить gswin список файлов. Выглядит это примерно так:

gs -dNOPAUSE -sDEVICE=pdfwrite -sOUTPUTFILE=combine.pdf -dBATCH 1.pdf 2.pdf 

Я пытался передать вывод

 dir /b *.pdf
в переменную разными способами, перенаправлением потока и через цикл for. Но ничего не получилось. Посоветуйте форум, где можно проконсультироваться, пожалуйста.

Спасибо.

★★★
Ответ на: комментарий от vbcnthfkmnth123

Я там не был. А он работает? Надо будет зарегистрироваться.

Оказалось надо писать @ и дальше можно имя файла со списком файлов. Дальше дело техники.

@echo off
chcp 65001
set "fname=P111-ПП-АР"
dir /b *.pdf > fnames.lst
c:\gs\bin\gswin64c.exe -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile=%fname%.pdf @fnames.lst
del fnames.lst

Нужно было правильно гуглить: https://stackoverflow.com/questions/12550826/ghostscript-how-to-merge-pdfs-with-wild-card-on-windows

baaba ★★★
() автор топика
Ответ на: комментарий от dmitry237

dmitry237

Спасибо огромное! Стало лучше:

@echo off
chcp 65001
setlocal enabledelayedexpansion
set "fname=P111-ПП-АР"

for /f %%i in ('dir /b *.pdf') do set string=!string! %%i

c:\gs\bin\gswin64c.exe -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile=%fname%.pdf %string%

PS зачем pushd и popd - не понял. Убрал их, вроде работает и без них. Почитаю что это и зачем.

baaba ★★★
() автор топика