Имя: Пароль:
IT
 
WSH архивация данных
, , ,
0 men47
 
06.06.14
16:21
Народ, выручайте, киданите код скрипта в WSH, пожалуйста, как создать zip-архив и поместить файл в него.

Google помог с VB, но я не понял, как создавать в WSH. Т.к. я в этом языке новичок. =(
1 shuhard
 
06.06.14
16:23
(0)  ну да
вечер пятницы на форуме 1С-ников лучшее время для поиска скриптов
2 Jump
 
06.06.14
16:27
wsh.Run ("строка запуска консольного архиватора с парметрами")
3 men47
 
06.06.14
18:25
вот пытаюсь сделать

WScript.Run("'C:\Program Files\7-Zip\7z.exe' a 'D:\TMP\\' 'D:\test.7z'");

не получается, подскажите, где не правильно
4 men47
 
06.06.14
18:27
(2) при wsh так же выдает Объект не поддерживает это свойство или метод
5 Jump
 
06.06.14
18:47
(4)Полный код скрипта приведи.
6 men47
 
06.06.14
18:48
Немного кривовато, но вот так=)))


function findFile(){

    var dateFile=new Date(file.DateLastModified);
    var delta=d-dateFile;
    if(delta<=days*86400000)
    {

        objDoc .Content.InsertAfter("Дата:"+d+" "+"Имя файла:"+file.Name+" "+"Место расположение:"+f.Path+" "+"Дата создания:"+dateFile);
        objDoc .Content.InsertAfter("\n");
        objFSO.CopyFile(file.Path, OutTmp);
    }


}


function findFiles(cFolder, d, days)
{  
    var newFolder=true;
    //перебираем все файлы очередной папки
    var cFiles=new Enumerator(cFolder.Files);
  
    for(;!cFiles.atEnd(); cFiles.moveNext())
    {
       var cFile=cFiles.item();
     //Создаем объект типа date c датой последней модификации файла
       var dateFile=new Date(cFile.DateLastModified);
       var delta=d-dateFile;
       if(delta<=days*86400000)
       {
          if(newFolder)
          {
             newFolder=false;
            // objDoc .Content.InsertAfter("---- Папка: "+cFolder.Path+" -------");
            // objDoc .Content.InsertAfter("\n");
          }
          objDoc .Content.InsertAfter("Дата:"+d+" "+"Имя файла:"+cFile.Name+" "+"Место расположение:"+cFolder.Path+" "+"Дата создания:"+dateFile);  
//objDoc .Content.InsertAfter(cFile.Name);
          objDoc .Content.InsertAfter("\n");
          cFile.Copy(OutTmp);
            
       }
  
    }              
}




var objFSO = WScript.CreateObject("Scripting.FileSystemObject");
var objWord = WScript.CreateObject("Word.Application.15");
var objDoc = objWord.Documents.Add();
var FilefullName, fso, f, file, days, fp;
var d = new Date();   //получаем текущую дату
var data;
var ArcFile;
var OutArc = "D:\\";
var OutTmp = "D:\TMP\\";
var Arc="C:\Program Files\7-Zip\7z.exe a ";

    WScript.StdOut.WriteLine("Введите путь папки");
    FilefullName=WScript.StdIn.ReadLine();
    fso = new ActiveXObject("Scripting.FileSystemObject");

var objFolder = objFSO.CreateFolder(OutTmp);

    f = fso.GetFolder(FilefullName);
    fc = new Enumerator(f.Files);
    WScript.StdOut.WriteLine("Введите день");
    days=WScript.StdIn.ReadLine();
    for(; !fc.atEnd(); fc.moveNext())
    {
        NameFolder = fc.Name;
        file=fc.item();
        findFile();
    }
    fc = new Enumerator(f.SubFolders);
    for(; !fc.atEnd(); fc.moveNext())
    {
        file=fc.item();
        findFiles(file, d, days);
    }
    objDoc.SaveAs("D:\\test.doc");
    objDoc.Close();
    objWord.Quit();
    ArcFile = OutArc +"test.7z";
    NArc = ArcFile+" ";
    NTmp = OutTmp+"*.*";
    WScript.Run(Arc+NArc+NTmp);
7 Лефмихалыч
 
06.06.14
18:51
слэши экранировать надо. В jscript в строковых литералах слэш надо так писать "\\".
"c:\\foo\bar\\cmd.exe"
8 men47
 
06.06.14
18:53
(7) пока не сильно критично, + код не подредактирован, он сырой еще, вопрос был в другом, как правильно обращаться к программе, чтобы она(программа) заархивировала папку.
9 men47
 
06.06.14
18:55
(8) + вижу ошибку, забыл исправить.

var Arc="'C:\Program Files\7-Zip\7z.exe' a ";
10 Лефмихалыч
 
06.06.14
18:56
(8) что значит "пока не сильно критично"?
11 Лефмихалыч
 
06.06.14
18:57
пля, да дело в слэшах, а не в кавычках. И кавычки в jscript вот так пишутся: "\"c:\\foo\\bar\""
12 men47
 
06.06.14
19:02
(11) хорошо, заэкранировал проблема не ушла, поподробнее на счет кавычек. Код, который вы привели либо не правильный, либо не хватает еще кавычек спереди.
13 men47
 
06.06.14
19:07
(11) либо приведите простой пример, как правильно обращаться к архиватору, а то в самом деле, может быть не в кавычках дело.
Например, есть 1 файл с названием 1.txt на диске С(ну или Д), как правильно обратиться, чтобы заархивировать его.
14 Jump
 
06.06.14
19:26
(6)может я невнимательно  смотрел но я не нашел где создаеться объект WScript.Shell

Примерно так
Wsh = WScript.CreateObject('WScript.Shell');
Wsh.Run("D:\\rar.exe a D:\\test.txt");
15 Jump
 
06.06.14
19:27
(13)Слеши дублируй \\, все что содержит пробелы в двойные кавычки ""тут был пробел""
16 men47
 
06.06.14
19:31
(13) а где указывать куда сохранять, или куда программа сохранит?
17 men47
 
06.06.14
19:33
(15) как я правильно понял

Wsh = WScript.CreateObject('WScript.Shell');
Wsh.Run("DC:\\Program Files\\7-Zip\\7z.exe a D:\\TMP");
18 men47
 
06.06.14
19:34
(17) ой

Wsh = WScript.CreateObject('WScript.Shell');
Wsh.Run("C:\\Program Files\\7-Zip\\7z.exe a D:\\TMP");
19 Jump
 
06.06.14
19:35
(16)ну почитай справку по конкретному архиватору
D раре это так-
Wsh.Run("D:\\rar.exe a D:\\test.rar D:\\test.txt");
20 Jump
 
06.06.14
19:37
т.е строка запуска выглядит как -
путь к архиватору команда архивации путь к архиву путь к файлам которые положить в архив
21 men47
 
06.06.14
19:42
(20) это я понял, вот смотри... я закидываю вот так:

Wsh.Run("C:\\Program Files\\7-Zip\\7z.exe a D:\\TMP");

он мне пишет Не удается найти указанный файл. Хотя по пути 7z.exe присутствует. Так же пробовал через 7zFM.exe (в той же папке лежит), тоже самое выдает. И еще, я могу архивировать папки, или только файлы?
22 men47
 
06.06.14
19:42
оп, вижу ошибку, не успел прочитать (19) пункт
23 men47
 
06.06.14
19:44
неа, все равно при (19) пункте, тоже самое выдает
24 men47
 
06.06.14
19:47
(20) попытался указать конечный файл, а точнее Wsh.Run("C:\\Program Files\\7-Zip\\7zFM.exe a D:\\test.rar D:\\TMP\\logback-test.xml");

тоже самое, похоже он не видит сам 7z архиватор.... сейчас попробую обратится к другому архиватору
25 Jump
 
06.06.14
19:51
(21)Можно и папки.
В строке ошибка
Путь содержащий пробелы надо брать в двойные кавычки.
26 Jump
 
06.06.14
19:52
Wsh.Run("""C:\\Program Files\\7-Zip\\7z.exe"" a D:\\TMP");
27 men47
 
06.06.14
19:56
(26) закинул так как вы дали, выдал ошибку Предполагается ")"  на 11 символе, т.е.
Wsh.Run(""(ВОТ ТУТ)"C:\\Program Files\\7-Zip\\7z.exe"" a D:\\TMP");
28 men47
 
06.06.14
20:01
(26) расположил 7z прям в корне диск Д обратился вот так

Wsh.Run("D:\\7z.exe a D:\\test.7z D:\\TMP");

архив создался АЛИЛУЯ, но желательно сделать обычную директорию программы=(
29 men47
 
06.06.14
20:06
все, нашел. Спасибо, Jump, за помощь, без тебя больше времени бы потерял.

Решением проблемы было следующее:

Wsh.Run('"C:\\Program Files\\7-Zip\\7z.exe" a D:\\test.7z D:\\TMP');
30 Jump
 
06.06.14
21:04
(28)Как вариант можно добавить путь к архиватору в переменные окружения ОС, и тогда для обращения к архиватору не придется указывать путь.

По поводу этой строки -
Wsh.Run("""C:\\Program Files\\7-Zip\\7z.exe"" a D:\\TMP");
Тут вероятно из за тройных кавычек вначале одна съедалась, надо было экранировать ее слешем что то типа ""\"
Поэтому и синтаксис нарушился из за нечетности кавычек.
Ну фиг с ним работает и ладно.
31 SergeyKB
 
06.06.14
22:22
(0) в БСП посмотрите там неслабый скриптик забабахали
32 Лефмихалыч
 
06.06.14
23:41
тьфутыпропасть!
Wsh.Run("\"C:\\Program Files\\7-Zip\\7z.exe\" a D:\\TMP");

да почитайте вы оть справку что ли! Двойные кавычки в jscript - это пустая строка.
33 Злопчинский
 
07.06.14
00:34
фигня какаяч-то.. дайте лучше команду архивирования втроенной поддержкой архивов виндой...
?
34 vcv
 
07.06.14
08:16
(33) Вот встроенное разархивирование.
http://forum.infostart.ru/forum9/topic98082/message1015639/#message1015639
Архивирование должно быть где-то аналогично.