Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Упаковка файлов в архив "rar" c определенным именем. (http://forum.oszone.net/showthread.php?t=288767)

rastorgujewo 01-10-2014 14:38 2409430

Упаковка файлов в архив "rar" c определенным именем.
 
Добрый день!
Хочу обратится за помощью к Вам.
Имеется программа которая выгружает данные в файлы (за день это может отказаться от 10 до 50 файлов) с именем и расширением "1409250400149275.S01" (как образец).
Мне необходимо архивировать все файлы с содержанием первых 6 символов "140925"0400149275.S01 (расширение тоже имеет разные имя).
Первые шесть символов это дата выгруженного файла (Год, меся, число). Как или при помощи чего можно упаковать в архив "rar" (Архиватор WinRar имеется) задав параметр нужной даты?

Iska 01-10-2014 14:56 2409442

Чем не устраивает банальное:
Код:

"%ProgramFiles%\WinRAR\WinRAR.exe" a "Мой путь\Мой архив.rar" "%~1*.*"
где дата задаётся параметром пакетного файла?!

rastorgujewo 01-10-2014 15:39 2409465

Цитата:

Цитата Iska
Чем не устраивает банальное:
Код:
"%ProgramFiles%\WinRAR\WinRAR.exe" a "Мой путь\Мой архив.rar" "%~1*.*"
где дата задаётся параметром пакетного файла?! »

К большому сожалению я не продвинутый пользователь.
И не совсем понимаю что дано в ответе и как это применить (вернее с чем)...
Я себя немного подправлю. Есть директория где эти файлы выкладываются "C:\out\ss", мне надо упаковать их (файлы) в архив по адресу "C:\out_ftp\ss" c именем в виде даты и двух букв "ss" в конце.
Интересует можно указывать какие файлы с именем упаковывать...

Iska 01-10-2014 16:38 2409510

Цитата:

Цитата rastorgujewo
c именем в виде даты »

Формат даты — тот же, что и в именах архивируемых файлов?

rastorgujewo 01-10-2014 16:39 2409511

Цитата:

Цитата Iska
Формат даты — тот же, что и в именах архивируемых файлов? »

Совершенно верно.

Iska 02-10-2014 04:59 2409766

Как-то так:
читать дальше »
Код:

@echo off
setlocal enableextensions enabledelayedexpansion

set sSourceFolder=C:\out\ss
set sDestFolder=C:\out_ftp\ss
set sMask=%~1
set sWinRARPath=%ProgramFiles%\WinRAR\WinRAR.exe

if exist "%sSourceFolder%\." (
        if exist "%sDestFolder%\." (
                if defined sMask (
                        if exist "%sWinRARPath%" (
                                echo %sMask%| >nul 2>&1 findstr.exe /i /r /c:"^[0-9][0-9][0-9][0-9][0-9][0-9]$" || (
                                        echo Date mask [%sMask%] probably error.
                                        exit /b 4
                                )
                               
                                >nul 2>&1 dir /b "%sSourceFolder%\%sMask%*.*" || (
                                        echo Nothing found by Date mask [%sMask%*.*] in source folder [%sSourceFolder%].
                                        exit /b 6
                                )
                               
                                "%sWinRARPath%" a -ep "%sDestFolder%\%sMask%ss.rar" "%sSourceFolder%\%sMask%*.*"
                        ) else (
                                echo Can't find [%sWinRARPath%].
                                exit /b 5
                        )
                ) else (
                        echo Usage: %~nx0 ^<Date mask^>
                        exit /b 3
                )
        ) else (
                echo Can't find destination folder [%sDestFolder%].
                exit /b 2
        )
) else (
        echo Can't find source folder [%sSourceFolder%].
        exit /b 1
)


endlocal
exit /b 0


Сохраните код в файл с расширением «.cmd» в кодировке OEM/866. Маску даты указывайте параметром командного файла, например:
Код:

"Мой путь\Пакетный файл.cmd" 140924

rastorgujewo 02-10-2014 08:51 2409796

Как сохранить код в cmd мне понятно, сохранил в OEM/866 через Notepad++.
Не понял про командный файл:
Цитата:

Цитата Iska
Сохраните код в файл с расширением «.cmd» в кодировке OEM/866. Маску даты указывайте параметром командного файла, например:
Код:
"Мой путь\Пакетный файл.cmd" 140924 »

Код полностью скопировал в Notepad++, сохранил как 140901.cmd в кодировке OEM/866 (файлы, папки по путям все есть), cmd окно моргнула а архива нет.

Iska 02-10-2014 11:28 2409838

Цитата:

Цитата rastorgujewo
сохранил как 140901.cmd »

Сохраните, например, под именем «MakeMyArc.cmd» в некую папку.

Цитата:

Цитата rastorgujewo
cmd окно моргнула »

Запустите «cmd.exe». Напишите в нём:
Код:

"Путь\MakeMyArc.cmd" 140901
(где «Путь» — некая папка, куда Вы сохранили файл «MakeMyArc.cmd» с кодом пакетного файла, а «140901» — маска даты для отбора файлов) и нажмите «Enter».

rastorgujewo 02-10-2014 12:30 2409881

Iska Огромное тебе спасибо, выручил очень сильно.
Есть доп. вопрос:
Что нужно поменять если скажут сделать чтобы у архива имя наоборот было 010914ss (Число, месяц, год)?

Iska 02-10-2014 12:39 2409888

Цитата:

Цитата rastorgujewo
Что нужно поменять если скажут сделать чтобы у архива имя наоборот было 010914ss (Число, месяц, год)? »

Вызывать посредством:
Код:

"Путь\MakeMyArc.cmd" 010914
ибо никаких предположений о формате даты не делается, кроме одного — переданный параметр должен состоять ровно из шести цифр.

rastorgujewo 02-10-2014 12:43 2409892

Цитата:

Цитата Iska
Вызывать посредством:
Код:

"Путь\MakeMyArc.cmd" 010914
ибо никаких предположений о формате даты/времени не делается, кроме одного — переданный параметр должен состоять ровно из шести цифр. »

То есть, правильно я понимаю. Если я вызову:
Код:

"Путь\MakeMyArc.cmd" 010914
То он все равно будит искать файлы с именем 140901 (год, месяц, число)?

Iska 02-10-2014 12:51 2409903

Цитата:

Цитата rastorgujewo
То он все равно будит искать файлы с именем 140901 (год, месяц, число)? »

Нет. Я же говорю: будет искать ровно как указали — по маске «010914*.*».

rastorgujewo 02-10-2014 12:58 2409907

Цитата:

Цитата Iska
Нет. Я же говорю: будет искать ровно как указали — по маске «010914*.*». »

Я понял. Можно регулировать имя выходного архива "rar"? Независимо от маски...

Iska 02-10-2014 13:25 2409922

Цитата:

Цитата rastorgujewo
Можно регулировать имя выходного архива "rar"? Независимо от маски... »

Можно. Кто ж запрещает ;).

rastorgujewo 02-10-2014 17:24 2410081

А такой вопрос:
Если надо упаковать аналогичные файлы но расположенные в другом месте "D:\ininfo\ss\arhiv", мне надо изменить путь только в строке:
Код:

set sSourceFolder=C:\out\ss
Правильно?

Iska 02-10-2014 17:40 2410099

rastorgujewo, да.

rastorgujewo 06-10-2014 13:22 2411706

Iska, еще раз Вам СПАСИБО!
У меня есть еще один вопрос если не против:
Как мне создать перечень (задание) в том же (или аналогично) где заранее можно перечислить необходимые числа (маску)?
И в продолжение имеющегося скрипта (если можно так сказать. Как сделать чтобы также в архив упаковывал файлы за месяц (год, месяц. Файлы те же самые)? Попробовал но не получилось ошибка "Date mask [1409] probably error".

Iska 06-10-2014 15:14 2411754

Создать можно. Например, в текстовом файле. Вопрос в том. что предполагается делать с этим перечнем?

rastorgujewo 07-10-2014 08:12 2412007

Цитата:

Цитата Iska
Вопрос в том. что предполагается делать с этим перечнем? »

Создать заранее команды с датами для упаковки в архив:
Код:

"Путь\MakeMyArc.cmd" 140901
"Путь\MakeMyArc.cmd" 140902
"Путь\MakeMyArc.cmd" 140903

И так далее.
Цитата:

Цитата rastorgujewo
Как сделать чтобы в архив упаковывал файлы за месяц (год, месяц. Файлы те же самые)?
Попробовал но не получилось ошибка "Date mask [1409] probably error". »

Подскажешь?

Iska 07-10-2014 22:08 2412366

Цитата:

Цитата rastorgujewo
Создать заранее команды с датами для упаковки в архив: »

Не так. Иначе (не проверялось):
читать дальше »
Код:

@echo off
setlocal enableextensions enabledelayedexpansion

set sSourceFolder=C:\out\ss
set sDestFolder=C:\out_ftp\ss
set sFileMask=%~1
set sWinRARPath=%ProgramFiles%\WinRAR\WinRAR.exe

if exist "%sSourceFolder%\." (
        if exist "%sDestFolder%\." (
                if defined sFileMask (
                        if exist "%sFileMask%" (
                                if exist "%sWinRARPath%" (
                                        for /f "usebackq delims=" %%i in ("%sFileMask%") do (
                                                set sMask=%%~i
                                                echo Mask: !sMask!
                                                echo !sMask!| >nul 2>&1 findstr.exe /i /r /c:"^[0-9][0-9][0-9][0-9][0-9][0-9]$" || (
                                                        echo Date mask [!sMask!] probably error.
                                                        exit /b 4
                                                )
                                               
                                                >nul 2>&1 dir /b "%sSourceFolder%\!sMask!*.*" || (
                                                        echo Nothing found by Date mask [!sMask!*.*] in source folder [%sSourceFolder%].
                                                        exit /b 6
                                                )
                                               
                                                "%sWinRARPath%" a -ep "%sDestFolder%\!sMask!ss.rar" "%sSourceFolder%\!sMask!*.*"
                                        )
                                ) else (
                                        echo Can't find [%sWinRARPath%].
                                        exit /b 5
                                )
                        ) else (
                                echo Can't find Date masks file [%sFileMask%].
                        )
                ) else (
                        echo Usage: %~nx0 ^<Date masks file^>
                        exit /b 3
                )
        ) else (
                echo Can't find destination folder [%sDestFolder%].
                exit /b 2
        )
) else (
        echo Can't find source folder [%sSourceFolder%].
        exit /b 1
)

endlocal
exit /b 0


Путь к файлу с масками дат указываете параметром пакетного файла.

Цитата:

Цитата rastorgujewo
Как сделать чтобы также в архив упаковывал файлы за месяц (год, месяц. Файлы те же самые)? »

«Также» не получится. Уберите в коде:
Код:

… findstr.exe /i /r /c:"^[0-9][0-9][0-9][0-9][0-9][0-9]$" …
две последних группы классов «[0-9]». Если хотите дополнительно оставить возможность задания и полной маски («ГГММДД») — уберите и завершающий ограничитель «$», тогда можно будет задавать и «ГГММ», и «ГГММДД» (и «ГГММлюбая прочая белиберда» ;)).


Время: 19:28.

Время: 19:28.
© OSzone.net 2001-