Имя: Пароль:
1C
1C 7.7
v7: Какой путь использовать в WshShell.Run("7z.exe ...") ?
🠗 (Волшебник 08.07.2024 09:42)
,
0 zelenprog
 
06.07.24
21:25
Добрый день!

Понадобилось из 1С архивировать файлы для обмена с оператором ЭДО.
Есть "главная" папка на сервере, в этой папке много подпапок. В каждой подпапке лежит несколько файлов, которые должны быть заархивированы в один архив, этот архив должен быть создан в этой же подпапке.

Для архивации в обработке пользуюсь командой
WshShell.Run("7za.exe ...")

Командная строка (в упрощенном виде) выглядит вот так:
"7za.exe a -tzip test.zip file1.xml file2.xml ..."

Возник вопрос по путям (каталогам, папкам).

Понятное дело, что для надежности лучше указывать имена файлов с полными путями.
Типа: "7za.exe a -tzip \\server1c\obmen_edo\doc1231\doc1231.zip  \\server1c\obmen_edo\doc1231\file1.xml \\server1c\obmen_edo\doc1231\file2.xml ...".

Но с полными путями командная строка получается очень длинной.
Наверно есть какое-то ограничение на длину командной строки. Наверно чисто теоретически возможна такая ситуация, когда операционка не сможет "переварить" слишком длинную командную строку.

Один способ "укоротить" команду - это записать все архивируемые файлы в текстовый файл и сделать командную строку чуть короче:
"7za.exe a -tzip \\server1c\obmen_edo\doc1231\doc1231.zip  @\\server1c\obmen_edo\doc1231\fileslist.txt".

Но все равно командная строка получается длинная.

В общем есть желание писать в командной строке только короткие имена файлов без путей.
Но тогда возникает вопрос: а найдет ли архиватор эти файлы?
Как и где 7z ищет файлы, если их имена указаны без путей? Или с относительными путями?

Можно ли сделать командную строку короче, но чтобы это не помешало надежности?
Как лучше сделать?
1 vde69
 
06.07.24
21:24
\\server1c\obmen_edo\doc1231\ - подмапить как сетевой диск
2 Волшебник
 
06.07.24
21:24
Вариант с fileslist.txt уже нормальный
3 zelenprog
 
06.07.24
21:29
(2) Не вполне.
На самом деле путь к обрабатываемой папке на сервере очень длинный. Кроме того, в командной строке нужно еще указать путь к 7za.exe...

В общем все равно получается длинная строка.
И остается какое-то беспокойство, что в какой-то ситуации это может не сработать.
4 zelenprog
 
06.07.24
21:32
(1) >> ... подмапить как сетевой диск

Получается, что на тех компах, где подключен сетевой диск - - все будет работать.
А на тех, где нету сетевого диска - обработка будет валиться с ошибками?
5 vde69
 
06.07.24
21:36
(4) подмапь програмно прямо перед выполненем архивирования и потом отключи
6 vde69
 
06.07.24
21:43
типа

net use K: \\server1c\obmen_edo\doc1231\
7za.exe a .....
net use K: /delete
7 Salimbek
 
07.07.24
12:54
(0) В 1C++ есть BynaryData в которой можно создавать архивы. Но люди ловили нестабильность работы, поэтому даже классы написаны, которые работу с архивами на себя берут. Например: https://www.1cpp.ru/forum/YaBB.pl?num=1175158780/8#10
8 Aleksey
 
07.07.24
13:48
Я DialMail использую, там и FTP там и ZIP

А насчет ограничения - 8191 символов, т.е. 150-200 файлов в качестве параметров винда должна пережевать

"Максимальная длина строки, которую можно использовать в командной строке, составляет 8191 символ.
Это ограничение применяется к:
командная строка
отдельные переменные среды, наследуемые другими процессами, такими как переменная PATH
все расширения переменных среды
Если для выполнения пакетных файлов используется командная строка, это ограничение также применяется к пакетной обработке файлов."
(с) https://learn.microsoft.com/ru-ru/troubleshoot/windows-client/shell-experience/command-line-string-limitation
9 zelenprog
 
07.07.24
14:30
(7) >> В 1C++ есть BynaryData в которой можно создавать архивы. Но ... нестабильность работы ...

Про нестабильность BynaryData я читал, поэтому начал делать через 7zip.

>> ...  классы написаны, которые работу с архивами на себя берут

Про классы не знал - спасибо, посмотрю.
10 zelenprog
 
07.07.24
14:34
(8) >> Я DialMail использую, там и FTP там и ZIP

Пробовал DialMail.
Библиотека вроде подключается, но при попытке создать объект 1С просто молча вываливается.
Может быть попалась версия недоработанная? Я нашел в интернете версию 2.7.6b.

>> А насчет ограничения - 8191 символов, т.е. 150-200 файлов в качестве параметров винда должна пережевать

Это радует.
Может быть я зря "кипишую"?
11 Злопчинский
 
07.07.24
17:57
Так же ж можно встроенным виндявым зипом зазипить
12 NorthWind
 
07.07.24
21:06
(0) я им архивировал файлы ЭУПД, причем указывал в строке два файла - xml и sig (bin), а позже еще и файл-описатель МЧД. Можете себе представить длину строки... Тоже через run запускал, правда, из среды vbs. Все отлично работало.
13 NorthWind
 
07.07.24
21:07
(11) пробовал, не понравилось. Какие-то нюансы нехорошие были, уже не помню точно, но, кажется, как раз с длинными строками что-то не срасталось. 7z лучше, работает как часы.
14 NorthWind
 
07.07.24
21:05
Вот строка из лога

7z a "C:\Documents and Settings\Signer\Мои документы\DOC_OUT\4670025609999\ON_NSCHFDOPPR_2BM-7703270067-2013012406531229784200000000000_2LDA6665F40-EC20-4463-A0DA-8B74A6CA00AA_20240201_aeea0f0c-87ca-4d94-a6d8-77e851665412.zip" "C:\Documents and Settings\Signer\Мои документы\DOC_OUT\4670025609999\ON_NSCHFDOPPR_2BM-7703270067-2013012406531229784200000000000_2LDA6665F40-EC20-4463-A0DA-8B74A6CA00AA_20240201_aeea0f0c-87ca-4d94-a6d8-77e851665412.xml" "C:\Documents and Settings\Signer\Мои документы\DOC_OUT\4670025609999\6_ON_NSCHFDOPPR_2BM-7703270067-2013012406531229784200000000000_2LDA6665F40-EC20-4463-A0DA-8B74A6CA00AA_20240201_aeea0f0c-87ca-4d94-a6d8-77e851665412.bin" "C:\Documents and Settings\Signer\Мои документы\DOC_OUT\4670025609999\DESCRIPTION_2BM-7703270067-2013012406531229784200000000000_2LDA6665F40-EC20-4463-A0DA-8B74A6CA00AA_20240201_aeea0f0c-87ca-4d94-a6d8-77e851665412.xml" -tzip -sdel

эту строку он за милую душу прожевывает...
15 Garykom
 
гуру
07.07.24
21:16
(0) Из 1С создаешь скрипт bat/cmd и запускаешь его на исполнение
Удобно отлаживать скрипт, нет проблем с длинами
Может работать независимо от 1С
16 MarySue
 
08.07.24
04:02
мы опять решаем проблему, которой не существует?
да что ж такое...
17 DrZombi
 
гуру
08.07.24
08:07
18 zelenprog
 
08.07.24
11:06
(14) Вот-вот. И у меня примерно такая же строка.

(15) >> Из 1С создаешь скрипт bat/cmd ... нет проблем с длинами

А почему при использовании скрипта пропадают проблемы с длинами?
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой