PDA

Показать полную графическую версию : [решено] сканирование папки на наличие файла и его архивация


Страниц : 1 [2]

Bob256
13-09-2012, 12:08
Если надо 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

Anufriev
13-09-2012, 12:20
нужно что бы 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) должно зависеть от любого изменения имени файла

Bob256
13-09-2012, 12:26
С этого места поподробней. Дай список файлов и желаемое распределение по архивам

Anufriev
13-09-2012, 12:39
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

Bob256
13-09-2012, 13:07
И чем не устраивает последний вариант?

Anufriev
13-09-2012, 13:10
тем что если появилось два файла с окончанием 100 он запакует их в один архив;)

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

Bob256
13-09-2012, 14:39
Итого имеем:

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

что я упустил?

Anufriev
13-09-2012, 14:47
дата текущая
те файлы которые уже упакованы их там уже нет, то есть удаляются сразу

Bob256
13-09-2012, 15:26
Тогда так:
@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

Anufriev
14-09-2012, 06:01
спасибо огромное!!!

только, что бы не было лишней строчки:
del /q "%%~dpnxF"

команду arj заменить с a на m

@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:\ARJ32\ARJ32.exe m -e "!NewName!" "%%~dpnxF"
)
exit /b 0

и все работает как часики

возник еще один вопросик, как можно теперь зациклить этот бат, куда поставить метку, что бы бат отрабатывался?
ибо где бы я не поставил метку, вот эти файлы перестают обрабатываться:( call :SUB0001 C:\test\B12345%GGMMDD% C:\test2\SBC*_*_*_3* C:\test2\SBC*_*_*_4*

yurfed
14-09-2012, 08:33
как можно теперь зациклить этот бат »Вы уверены что вам именно это нужно?
Может просто в планировщик заданий?

Anufriev
14-09-2012, 11:11
планировщик заданий нельзя использовать, из за тех же ЦБ стандартов:(

Bob256
14-09-2012, 11:17
@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

Anufriev
14-09-2012, 12:36
все, батник шикарен, спасибо огромное Bob256




© OSzone.net 2001-2012