![Компьютерный форум OSzone.net](images/oszone.net.print.gif) |
|
CMD/BAT Пакетное подписание word документов
Здравствуйте. Прошу вашей помощи с доработкой скрипта. Нужно сохранить большое количество 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"
ПС: в конце кода строчки это я не могу решить вопрос с очисткой входного каталога от файлов из прошлого задания
|
DJ Mogarych |
02-06-2024 07:14 3027798 |
Можно так попробовать (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 не складывает в ту же папку, нужен ещё один временный каталог.
|
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 пустая
|
DJ Mogarych |
02-06-2024 09:21 3027800 |
Понятно, я думал, что pdf24-DocTool.exe в ту же папку кладёт.
Пробуйте, выше исправленный код.
|
Вложений: 1
останавливается с ошибкой
|
DJ Mogarych |
03-06-2024 09:05 3027824 |
Похоже, что у вас файл скрипта в неправильной кодировке сохранён.
Откройте Powershell ISE, вставьте туда код и сохраните скрипт.
|
Время: 15:58.
© OSzone.net 2001-