![]() |
сканирование папки на наличие файла и его архивация
добрый день!
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 |
Хотя GGMMDD по идее должно звучать YYMMDD...
PHP код:
|
создает файл с именем nil, архив не создает
с текстом: Том в устройстве C не имеет метки. Серийный номер тома: E1AB-11B2 Содержимое папки C:\test Содержимое папки C:\test да и если честно, батник какой то странный... |
|
Цитата:
|
@echo off
Код:
setlocal enabledelayedexpansion Не очень понятно... Это ирония или просто великий и могучий? |
все не так запущено;) слеши не помогают;) точнее не в них дело
архиватор пытается найти SBC*_*_*_1*.ARJ:( получается %NewName% он не видит:( то что пишет cmd: Цитата:
|
|
потому что это требование организации куда будет отправляться файл, и поспорить с этим нельзя:(
|
|
Цитата:
Цитата:
|
Цитата:
Код:
(dir "%2" "%3">nil)&&( |
в таком случае появляется файл nil с текстом
Том в устройстве C не имеет метки. Серийный номер тома: E1AB-11B2 Содержимое папки C:\test2 Содержимое папки C:\test2 |
моя вина
Код:
(dir "%2" "%3" >nul)&&( |
|
Ты прав:)
Цитата:
архив то он все равно не создает;) если C:\ARJ32\ARJ32.exe a -e %NewName% %2 %3 изменить на C:\ARJ32\ARJ32.exe a -e NewName %2 %3 то он начнет работать, создаст архив, но естественно не будет имя ему генерировать а если сделать обходной путь, сначала архивировать, а потом переименовывать этот архив? |
Код:
@echo off |
прекрасно, это помогло
только теперь появляется вопросик: в папке находится несколько файлов формата SBC*_*_*_1*, SBC*_*_*_2* и он их пакует в один архив, а нужно что бы в разные:( файлы формата SBC*_*_*_3* и SBC*_*_*_4* запаковал в другой архив но тоже пачкой:) p.s. похоже я косячнул не сказав, что нужно каждый файлик в отдельный архив, в самом начале:( |
Код:
call :SUB0001 "куда пакуем" "что пакуем" |
простите, но я довольно таки дуб в этом и я не знаю куда воткнуть данную строчку:(
|
Если надо SBC*_*_*_1* в A12345GGMMDD(NN) а SBC*_*_*_2* в A12345GGMMDD(NN+1), SBC*_*_*_3* в B12345GGMMDD(NN), SBC*_*_*_4* в A12345GGMMDD(NN+1) то
Код:
@echo off |
нужно что бы 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) должно зависеть от любого изменения имени файла |
С этого места поподробней. Дай список файлов и желаемое распределение по архивам
|
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 |
И чем не устраивает последний вариант?
|
тем что если появилось два файла с окончанием 100 он запакует их в один архив;)
|
Может, разбить эти файлы на 2 массива и упаковку делать уже циклом по элементам массива?
|
Итого имеем:
|
дата текущая
те файлы которые уже упакованы их там уже нет, то есть удаляются сразу |
Тогда так:
Код:
@echo off |
спасибо огромное!!!
только, что бы не было лишней строчки: Код:
del /q "%%~dpnxF" Код:
@echo off возник еще один вопросик, как можно теперь зациклить этот бат, куда поставить метку, что бы бат отрабатывался? ибо где бы я не поставил метку, вот эти файлы перестают обрабатываться:( call :SUB0001 C:\test\B12345%GGMMDD% C:\test2\SBC*_*_*_3* C:\test2\SBC*_*_*_4* |
Цитата:
Может просто в планировщик заданий? |
планировщик заданий нельзя использовать, из за тех же ЦБ стандартов:(
|
Код:
@echo off |
все, батник шикарен, спасибо огромное Bob256
|
Время: 19:31. |
Время: 19:31.
© OSzone.net 2001-