Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - CMD/BAT Пакетное подписание word документов

Ответить
Настройки темы
CMD/BAT - CMD/BAT Пакетное подписание word документов

Новый участник


Сообщения: 3
Благодарности: 0

Профиль | Отправить PM | Цитировать


Здравствуйте. Прошу вашей помощи с доработкой скрипта. Нужно сохранить большое количество word документов в формат pdf и подписать их электронной подписью с сохранением структуры каталогов.
Мой скрипт пересохраняет и подписывает файлы, но слаживает все подписанные файлы в один каталог, а нужно сохранить структуру каталогов
Код: Выделить весь код
@chcp 1251
rem @echo off
set "proga=c:\Program Files\PDF24\pdf24-DocTool.exe"
set "dir_in=d:\input"
set "dir_out=d:\out"
 
if not exist "%dir_out%" md "%dir_out%"
for /f "delims=" %%a in ('dir /a-d/b/s "%dir_in%\*.docx"') do "%proga%" -applyProfile -profile "default/good" -outputDir "%dir_in%" -convertToPDF "%%a"
for /f "delims=" %%a in ('dir /a-d/b/s "%dir_in%\*.doc"') do "%proga%" -applyProfile -profile "default/good" -outputDir "%dir_in%" -convertToPDF "%%a"
for /f "delims=" %%a in ('dir /a-d/b/s "%dir_in%\*.xlsx"') do "%proga%" -applyProfile -profile "default/good" -outputDir "%dir_in%" -convertToPDF "%%a"
for /f "delims=" %%a in ('dir /a-d/b/s "%dir_in%\*.pdf"') do (
"%proga%" -profile "default/good" -outputDir "%dir_out%" -join "%%a" "f:\distributives\пакетное подписание файлов\Подпись.pdf"
move /y "%dir_out%\*.*" "%%a"
if exist "%dir_out%\input.pdf" del /f /q "%dir_out%\input.pdf"
)
"c:\Program Files (x86)\Crypto Pro\PDF\cppdfutil.exe" sign -i "%dir_in%" -o "%dir_out%" -c "f:\distributives\пакетное подписание файлов\Сертификат.cer"
rem rd /s /q "%dir_in%"
rem md "%dir_in%"
copy "f:\distributives\пакетное подписание файлов\bat.bat.lnk" "%dir_in%\bat.bat.lnk"
ПС: в конце кода строчки это я не могу решить вопрос с очисткой входного каталога от файлов из прошлого задания

Отправлено: 19:22, 31-05-2024

 

Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 6545
Благодарности: 1493

Профиль | Отправить PM | Цитировать


Можно так попробовать (Powershell). Не проверял, поэтому могут быть ошибки.
Также, я не знаю, умеет ли cppdfutil.exe обрабатывать каталог рекурсивно, поэтому предположил, что нет.

Код: Выделить весь код
$dir_in = "d:\input"
$dir_out = "d:\out"
$proga = "c:\Program Files\PDF24\pdf24-DocTool.exe"
$cppdfutil = "c:\Program Files (x86)\Crypto Pro\PDF\cppdfutil.exe"
$sign = "f:\distributives\пакетное подписание файлов\Подпись.pdf"
$cert = "f:\distributives\пакетное подписание файлов\Сертификат.cer"


$files = dir $dir_in -Recurse -Include "*.doc*","*.xls*"

# Создание структуры каталогов в конечном и временных каталогах
$dir_in_regex = $dir_in -replace '\\','\\'
$dir_pdfs = "$env:TEMP\pdf_converted"
$dir_joined = "$env:TEMP\pdf_joined"
$subdirs = ($files.DirectoryName |sort -Unique) -replace "$dir_in_regex"
$subdirs |% {
    "$dir_out$_","$dir_pdfs$_","$dir_joined$_" |% {
        mkdir $_ -Force -ErrorAction SilentlyContinue > $null
    }
}

# Конвертация в PDF (во временный каталог 1)
$files |% {
    $dir_out_file = $_.DirectoryName -replace "$dir_in_regex","$dir_pdfs"
    & $proga -applyProfile -profile "default/good" -outputDir $dir_out_file -convertToPDF $_.FullName
}

# Подпись.pdf (во временный каталог 2)
$pdfs = dir $dir_pdfs -Recurse
$dir_in_regex = $dir_pdfs -replace '\\','\\'
$pdfs |% {
    $dir_out_file = $_.DirectoryName -replace "$dir_in_regex","$dir_joined"
    & $proga -profile "default/good" -outputDir $dir_out_file -join $_.FullName $sign
}

# Цифровая подпись (в конечный каталог)
$subdirs |% {
    & $cppdfutil sign -i "$dir_joined$_" -o "$dir_out$_" -c $cert
}

# Удаление временных каталогов
del $dir_pdfs,$dir_joined -Recurse -Force -Confirm:$false
v2: pdf24-DocTool.exe не складывает в ту же папку, нужен ещё один временный каталог.

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)


Последний раз редактировалось DJ Mogarych, 02-06-2024 в 09:22.

Это сообщение посчитали полезным следующие участники:

Отправлено: 07:14, 02-06-2024 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 3
Благодарности: 0

Профиль | Отправить PM | Цитировать


DJ Mogarych,
Спасибо за помощь! Скрипт выдает:
del : Не удается найти путь "C:\Users\Пользователь\AppData\Local\Temp\pdf_joined", так как он не существует.
F:\distributives\пакетное подписание файлов\bat1.ps1:35 знак:1
+ del $dir_joined -Recurse -Force -Confirm:$false
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (C:\Users\Пользо...Temp\pdf_joined:String) [Remove-Item], ItemNotFoundException
+ FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.RemoveItemCommand
сохраняет конвертированные в PDF файлы в каталоге input(неподписанные цифровой подписью), файлы без структуры каталогов, одним списком. Папка out пустая

Отправлено: 07:49, 02-06-2024 | #3


Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 6545
Благодарности: 1493

Профиль | Отправить PM | Цитировать


Понятно, я думал, что pdf24-DocTool.exe в ту же папку кладёт.
Пробуйте, выше исправленный код.

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)


Отправлено: 09:21, 02-06-2024 | #4


Новый участник


Сообщения: 3
Благодарности: 0

Профиль | Отправить PM | Цитировать


Изображения
Тип файла: jpg 03-06-2024 02-16-34.jpg
(249.3 Kb, 11 просмотров)

останавливается с ошибкой

Отправлено: 20:17, 02-06-2024 | #5


Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 6545
Благодарности: 1493

Профиль | Отправить PM | Цитировать


Похоже, что у вас файл скрипта в неправильной кодировке сохранён.
Откройте Powershell ISE, вставьте туда код и сохраните скрипт.

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)


Отправлено: 09:05, 03-06-2024 | #6



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - CMD/BAT Пакетное подписание word документов

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Привилегии bat/cmd файла запущенного из другого cmd/bat файла leospb Скриптовые языки администрирования Windows 2 03-09-2023 12:57
CMD/BAT - Пакетное переименование файлов(.jpg) в разных папках (BAT) Zharkyn Скриптовые языки администрирования Windows 4 10-08-2020 11:43
CMD/BAT - CMD/BAT Поиск по каталогам файлов bat и конвертирование их в JPEG freerider1989 Скриптовые языки администрирования Windows 1 18-04-2016 08:37
CMD/BAT - [решено] CMD/BAT - С помощью bat-ника найти и удалить текст в файле InVariable Скриптовые языки администрирования Windows 4 22-05-2015 20:06
CMD/BAT - [решено] Пакетное преобразование данных с помощью cmd Tosyk Скриптовые языки администрирования Windows 22 26-11-2010 14:13




 
Переход