Войти

Показать полную графическую версию : Упаковка файлов в архив "rar" c определенным именем.


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

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

rastorgujewo
01-10-2014, 15:39
Чем не устраивает банальное:
Код:
"%ProgramFiles%\WinRAR\WinRAR.exe" a "Мой путь\Мой архив.rar" "%~1*.*"
где дата задаётся параметром пакетного файла?! »
К большому сожалению я не продвинутый пользователь.
И не совсем понимаю что дано в ответе и как это применить (вернее с чем)...
Я себя немного подправлю. Есть директория где эти файлы выкладываются "C:\out\ss", мне надо упаковать их (файлы) в архив по адресу "C:\out_ftp\ss" c именем в виде даты и двух букв "ss" в конце.
Интересует можно указывать какие файлы с именем упаковывать...

Iska
01-10-2014, 16:38
c именем в виде даты »
Формат даты — тот же, что и в именах архивируемых файлов?

rastorgujewo
01-10-2014, 16:39
Формат даты — тот же, что и в именах архивируемых файлов? »
Совершенно верно.

Iska
02-10-2014, 04:59
Как-то так:
@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
Как сохранить код в cmd мне понятно, сохранил в OEM/866 через Notepad++.
Не понял про командный файл:
Сохраните код в файл с расширением «.cmd» в кодировке OEM/866. Маску даты указывайте параметром командного файла, например:
Код:
"Мой путь\Пакетный файл.cmd" 140924 »
Код полностью скопировал в Notepad++, сохранил как 140901.cmd в кодировке OEM/866 (файлы, папки по путям все есть), cmd окно моргнула а архива нет.

Iska
02-10-2014, 11:28
сохранил как 140901.cmd »
Сохраните, например, под именем «MakeMyArc.cmd» в некую папку.

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

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

Iska
02-10-2014, 12:39
Что нужно поменять если скажут сделать чтобы у архива имя наоборот было 010914ss (Число, месяц, год)? »
Вызывать посредством:
"Путь\MakeMyArc.cmd" 010914
ибо никаких предположений о формате даты не делается, кроме одного — переданный параметр должен состоять ровно из шести цифр.

rastorgujewo
02-10-2014, 12:43
Вызывать посредством:
"Путь\MakeMyArc.cmd" 010914
ибо никаких предположений о формате даты/времени не делается, кроме одного — переданный параметр должен состоять ровно из шести цифр. »
То есть, правильно я понимаю. Если я вызову:
"Путь\MakeMyArc.cmd" 010914
То он все равно будит искать файлы с именем 140901 (год, месяц, число)?

Iska
02-10-2014, 12:51
То он все равно будит искать файлы с именем 140901 (год, месяц, число)? »
Нет. Я же говорю: будет искать ровно как указали — по маске «010914*.*».

rastorgujewo
02-10-2014, 12:58
Нет. Я же говорю: будет искать ровно как указали — по маске «010914*.*». »
Я понял. Можно регулировать имя выходного архива "rar"? Независимо от маски...

Iska
02-10-2014, 13:25
Можно регулировать имя выходного архива "rar"? Независимо от маски... »
Можно. Кто ж запрещает ;).

rastorgujewo
02-10-2014, 17:24
А такой вопрос:
Если надо упаковать аналогичные файлы но расположенные в другом месте "D:\ininfo\ss\arhiv", мне надо изменить путь только в строке:
set sSourceFolder=C:\out\ssПравильно?

Iska
02-10-2014, 17:40
rastorgujewo, да.

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

Iska
06-10-2014, 15:14
Создать можно. Например, в текстовом файле. Вопрос в том. что предполагается делать с этим перечнем?

rastorgujewo
07-10-2014, 08:12
Вопрос в том. что предполагается делать с этим перечнем? »
Создать заранее команды с датами для упаковки в архив:
"Путь\MakeMyArc.cmd" 140901
"Путь\MakeMyArc.cmd" 140902
"Путь\MakeMyArc.cmd" 140903И так далее.
Как сделать чтобы в архив упаковывал файлы за месяц (год, месяц. Файлы те же самые)?
Попробовал но не получилось ошибка "Date mask [1409] probably error". »
Подскажешь?

Iska
07-10-2014, 22:08
Создать заранее команды с датами для упаковки в архив: »
Не так. Иначе (не проверялось):
@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
Путь к файлу с масками дат указываете параметром пакетного файла.

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




© OSzone.net 2001-2012