rastorgujewo |
01-10-2014 14:38 2409430 |
Упаковка файлов в архив "rar" c определенным именем.
Добрый день!
Хочу обратится за помощью к Вам.
Имеется программа которая выгружает данные в файлы (за день это может отказаться от 10 до 50 файлов) с именем и расширением "1409250400149275.S01" (как образец).
Мне необходимо архивировать все файлы с содержанием первых 6 символов "140925"0400149275.S01 (расширение тоже имеет разные имя).
Первые шесть символов это дата выгруженного файла (Год, меся, число). Как или при помощи чего можно упаковать в архив "rar" (Архиватор WinRar имеется) задав параметр нужной даты?
|
Чем не устраивает банальное:
Код:
"%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" в конце.
Интересует можно указывать какие файлы с именем упаковывать...
|
Формат даты — тот же, что и в именах архивируемых файлов?
|
rastorgujewo |
01-10-2014 16:39 2409511 |
Цитата:
Цитата Iska
Формат даты — тот же, что и в именах архивируемых файлов? »
|
Совершенно верно.
|
Как-то так:
читать дальше »
Код:
@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 окно моргнула а архива нет.
|
Цитата:
Цитата rastorgujewo
сохранил как 140901.cmd »
|
Сохраните, например, под именем «MakeMyArc.cmd» в некую папку.
Запустите «cmd.exe». Напишите в нём:
Код:
"Путь\MakeMyArc.cmd" 140901
(где « Путь» — некая папка, куда Вы сохранили файл «MakeMyArc.cmd» с кодом пакетного файла, а «140901» — маска даты для отбора файлов) и нажмите «Enter».
|
rastorgujewo |
02-10-2014 12:30 2409881 |
Iska Огромное тебе спасибо, выручил очень сильно.
Есть доп. вопрос:
Что нужно поменять если скажут сделать чтобы у архива имя наоборот было 010914ss (Число, месяц, год)?
|
Цитата:
Цитата rastorgujewo
Что нужно поменять если скажут сделать чтобы у архива имя наоборот было 010914ss (Число, месяц, год)? »
|
Вызывать посредством:
Код:
"Путь\MakeMyArc.cmd" 010914
ибо никаких предположений о формате даты не делается, кроме одного — переданный параметр должен состоять ровно из шести цифр.
|
rastorgujewo |
02-10-2014 12:43 2409892 |
Цитата:
Цитата Iska
Вызывать посредством:
Код:
"Путь\MakeMyArc.cmd" 010914
ибо никаких предположений о формате даты/времени не делается, кроме одного — переданный параметр должен состоять ровно из шести цифр. »
|
То есть, правильно я понимаю. Если я вызову:
Код:
"Путь\MakeMyArc.cmd" 010914
То он все равно будит искать файлы с именем 140901 (год, месяц, число)?
|
Цитата:
Цитата rastorgujewo
То он все равно будит искать файлы с именем 140901 (год, месяц, число)? »
|
Нет. Я же говорю: будет искать ровно как указали — по маске «010914*.*».
|
rastorgujewo |
02-10-2014 12:58 2409907 |
Цитата:
Цитата Iska
Нет. Я же говорю: будет искать ровно как указали — по маске «010914*.*». »
|
Я понял. Можно регулировать имя выходного архива "rar"? Независимо от маски...
|
Цитата:
Цитата rastorgujewo
Можно регулировать имя выходного архива "rar"? Независимо от маски... »
|
Можно. Кто ж запрещает ;).
|
rastorgujewo |
02-10-2014 17:24 2410081 |
А такой вопрос:
Если надо упаковать аналогичные файлы но расположенные в другом месте "D:\ininfo\ss\arhiv", мне надо изменить путь только в строке:
Код:
set sSourceFolder=C:\out\ss
Правильно?
|
rastorgujewo |
06-10-2014 13:22 2411706 |
Iska, еще раз Вам СПАСИБО!
У меня есть еще один вопрос если не против:
Как мне создать перечень (задание) в том же (или аналогично) где заранее можно перечислить необходимые числа (маску)?
И в продолжение имеющегося скрипта (если можно так сказать. Как сделать чтобы также в архив упаковывал файлы за месяц (год, месяц. Файлы те же самые)? Попробовал но не получилось ошибка "Date mask [1409] probably error".
|
Создать можно. Например, в текстовом файле. Вопрос в том. что предполагается делать с этим перечнем?
|
rastorgujewo |
07-10-2014 08:12 2412007 |
Цитата:
Цитата Iska
Вопрос в том. что предполагается делать с этим перечнем? »
|
Создать заранее команды с датами для упаковки в архив:
Код:
"Путь\MakeMyArc.cmd" 140901
"Путь\MakeMyArc.cmd" 140902
"Путь\MakeMyArc.cmd" 140903
И так далее.
Цитата:
Цитата rastorgujewo
Как сделать чтобы в архив упаковывал файлы за месяц (год, месяц. Файлы те же самые)?
Попробовал но не получилось ошибка "Date mask [1409] probably error". »
|
Подскажешь?
|
Цитата:
Цитата 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.
© OSzone.net 2001-