Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] сканирование папки на наличие файла и его архивация

Ответить
Настройки темы
CMD/BAT - [решено] сканирование папки на наличие файла и его архивация

Пользователь


Сообщения: 102
Благодарности: 1

Профиль | Отправить PM | Цитировать


Изменения
Автор: Anufriev
Дата: 14-09-2012
добрый день!

1. есть такая задачка, нужно что бы батник сканировал папку с:\test\
1.1. при обнаружении файла формата SBC000000000_000000000000_0000000000000000_100 или SBC000000000_000000000000_0000000000000000_200 нужно запаковать его в архив arj формата A12345GGMMDDnn.arj
1.2. при обнаружении файла формата SBC000000000_000000000000_0000000000000000_300 или SBC000000000_000000000000_0000000000000000_400 нужно запаковать его в архив arj формата B12345GGMMDDnn.arj

где:
0 переменное число;

2. отработать команду "C:\ARJ32\ARJ32.exe m -e C:\test\#(зависит от пунктов 1.1 и 1.2)12345GGMMDDnn.arj C:\test2\SBC*_*_*_1(зависит от пунктов 1.1 и 1.2)*"

GGMMDD - год, месяц, день;
nn - порядковый номер созданного файла в течение дня (2 символа). Нумерация начинается с 01.

Батник который получился:
Код: Выделить весь код
@echo off
setlocal enabledelayedexpansion
:L0001
set GGMMDD=%date:~-2,2%%date:~3,2%%date:~0,2%
call :SUB0001 C:\test\A12345%GGMMDD% C:\test2\SBC*_*_*_1* C:\test2\SBC*_*_*_2*
call :SUB0001 C:\test\B12345%GGMMDD% C:\test2\SBC*_*_*_3* C:\test2\SBC*_*_*_4*
ping 127.0.0.1>nul
goto L0001
exit /b 0

:SUB0001
for %%F in (%2 %3) do (for /L %%N in (99,-1,1) do (if %%N LEQ 9 (set NN=0%%N) else set NN=%%N
    if not exist "%1!NN!.arj" set NewName=%1!NN!.arj
  )
  C:\ARJ32\ARJ32.exe m -e "!NewName!" "%%~dpnxF"
)
exit /b 0

Отправлено: 14:57, 12-09-2012

 

Новый участник


Сообщения: 49
Благодарности: 14

Профиль | Отправить PM | Цитировать


Если надо SBC*_*_*_1* в A12345GGMMDD(NN) а SBC*_*_*_2* в A12345GGMMDD(NN+1), SBC*_*_*_3* в B12345GGMMDD(NN), SBC*_*_*_4* в A12345GGMMDD(NN+1) то
Код: Выделить весь код
@echo off
setlocal enabledelayedexpansion
for /f "tokens=1,2,3 delims=." %%I in ('date /t') do (set /a GGMMDD="%%K - (%%K / 100) * 100" 
  set GGMMDD=!GGMMDD!%%J%%I
)
call :SUB0001 C:\test\A12345%GGMMDD% C:\test2\SBC*_*_*_1*
call :SUB0001 C:\test\A12345%GGMMDD% C:\test2\SBC*_*_*_2*
call :SUB0001 C:\test\B12345%GGMMDD% C:\test2\SBC*_*_*_3*
call :SUB0001 C:\test\B12345%GGMMDD% C:\test2\SBC*_*_*_4*
exit /b 0

:SUB0001
(dir %2 >nul)&&(for /L %%N in (9,-1,1) do (if %%N LEQ 9 (set NN=0%%N) else set NN=%%N
    if not exist %1!NN!.arj set NewName=%1!NN!.arj
  )
  C:ARJ32ARJ32.exe a -e !NewName! %2
)
exit /b 0

Отправлено: 12:08, 13-09-2012 | #21



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Пользователь


Сообщения: 102
Благодарности: 1

Профиль | Отправить PM | Цитировать


нужно что бы SBC*_*_*_1* или SBC*_*_*_2* в A12345GGMMDD(NN), потом SBC*_*_*_1*+1 или SBC*_*_*_2*+1 в A12345GGMMDD(NN+1) и так далее,
нужно что бы SBC*_*_*_3* или SBC*_*_*_4* в B12345GGMMDD(NN), потом SBC*_*_*_3*+1 или SBC*_*_*_4*+1 в B12345GGMMDD(NN+1) и так далее,

но может и оказаться что цифра измениться и тут SBC*_*+1_*_1* и следовательно этот файл должен быть запакован в отдельный архив... то есть, каждый файлик в отдельный архив
значение (NN) должно зависеть от любого изменения имени файла

Последний раз редактировалось Anufriev, 13-09-2012 в 12:36.


Отправлено: 12:20, 13-09-2012 | #22


Новый участник


Сообщения: 49
Благодарности: 14

Профиль | Отправить PM | Цитировать


С этого места поподробней. Дай список файлов и желаемое распределение по архивам

Отправлено: 12:26, 13-09-2012 | #23


Пользователь


Сообщения: 102
Благодарности: 1

Профиль | Отправить PM | Цитировать


SBC014552362_503820120814_0391001412000068_100.txt => A12345GGMMDD(01)
SBC014552362_503820120816_0391001412000071_400.txt => B12345GGMMDD(01)
SBC014552362_503820120821_0391001412000075_200.txt => A12345GGMMDD(02)
SBC014552362_503820120824_0391001412000077_300.txt => B12345GGMMDD(02)
SBC214552362_503820120817_0391001412000072_100.txt => A12345GGMMDD(03)

но файлы постоянно появляются новые с абсолютно разными цифрами в наименовании, и предугадать какой появиться я не могу единственное что постоянно это SBC

Отправлено: 12:39, 13-09-2012 | #24


Новый участник


Сообщения: 49
Благодарности: 14

Профиль | Отправить PM | Цитировать


И чем не устраивает последний вариант?

Отправлено: 13:07, 13-09-2012 | #25


Пользователь


Сообщения: 102
Благодарности: 1

Профиль | Отправить PM | Цитировать


тем что если появилось два файла с окончанием 100 он запакует их в один архив

Отправлено: 13:10, 13-09-2012 | #26


Аватара для Mushroomhead

Новый участник


Сообщения: 15
Благодарности: 4

Профиль | Отправить PM | Цитировать


Может, разбить эти файлы на 2 массива и упаковку делать уже циклом по элементам массива?

Отправлено: 13:11, 13-09-2012 | #27


Новый участник


Сообщения: 49
Благодарности: 14

Профиль | Отправить PM | Цитировать


Итого имеем:
  • В папке файлы типа SBC*_*_*_* и появляются новые
  • Архивы создаются для каждого файла по шаблону SBC*_*_*_[1,2]*>A12345GGMMDDNN, SBC*_*_*_[3,4]*>B12345GGMMDDNN где GGMMDD текущая дата. (или дата создания файла?)
  • Глядя на имена архивов мы не можем сказать какие файлы уже упакованы
что я упустил?

Отправлено: 14:39, 13-09-2012 | #28


Пользователь


Сообщения: 102
Благодарности: 1

Профиль | Отправить PM | Цитировать


дата текущая
те файлы которые уже упакованы их там уже нет, то есть удаляются сразу

Отправлено: 14:47, 13-09-2012 | #29


Новый участник


Сообщения: 49
Благодарности: 14

Профиль | Отправить PM | Цитировать


Тогда так:
Код: Выделить весь код
@echo off
setlocal enabledelayedexpansion
for /f "tokens=1,2,3 delims=." %%I in ('date /t') do (set /a GGMMDD="%%K - (%%K / 100) * 100" 
  set GGMMDD=!GGMMDD!%%J%%I
)
call :SUB0001 C:\test\A12345%GGMMDD% C:\test2\SBC*_*_*_1* C:\test2\SBC*_*_*_2*
call :SUB0001 C:\test\B12345%GGMMDD% C:\test2\SBC*_*_*_3* C:\test2\SBC*_*_*_4*
exit /b 0

:SUB0001
for %%F in (%2 %3) do (for /L %%N in (99,-1,1) do (if %%N LEQ 9 (set NN=0%%N) else set NN=%%N
    if not exist "%1!NN!.arj" set NewName=%1!NN!.arj
  )
  C:ARJ32ARJ32.exe a -e "!NewName!" "%%~dpnxF"
  del /q "%%~dpnxF"
)
exit /b 0
Это сообщение посчитали полезным следующие участники:

Отправлено: 15:26, 13-09-2012 | #30



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] сканирование папки на наличие файла и его архивация

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Батник проверяющий наличие файла на сервере? ofcoss Скриптовые языки администрирования Windows 3 29-07-2009 06:03
CMD/BAT - [решено] Проверить наличие файла с текущей датой. OlegStarov Скриптовые языки администрирования Windows 4 21-04-2009 12:11
CMD/BAT - Как из бат-файла проверить наличие файла по ссылке, не скачивая файл ? mitiya Скриптовые языки администрирования Windows 2 27-06-2008 20:50
Разное - Архивация файла UnDRaux Microsoft Windows 2000/XP 3 03-05-2008 00:10
Сканирование HDD на наличие bad секторов dimon55 Хочу все знать 5 15-12-2003 15:36




 
Переход