Показать полную графическую версию : [решено] сканирование папки на наличие файла и его архивация
Anufriev
12-09-2012, 14:57
добрый день!
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
Хотя GGMMDD по идее должно звучать YYMMDD...
@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 C:\test2\SBC*_*_*_1* C:\test2\SBC*_*_*_2*
call :SUB0001 C:\test\B12345 C:\test2\SBC*_*_*_3* C:\test2\SBC*_*_*_4*
exit /b 0
:SUB0001
(dir %2 %3>nil)&&(
for /L %%N in (99,-1,1) do (if %%N LEQ 9 (set NN=0%%N) else set NN=%%N
if not exist %1%GGMMDD%!NN!.arj set NewName=%1%GGMMDD%!NN!.arj
)
C:\ARJ32\ARJ32.exe a -e %NewName% %2 %3
)
exit /b 0
Anufriev
13-09-2012, 06:26
создает файл с именем nil, архив не создает
с текстом:
Том в устройстве C не имеет метки.
Серийный номер тома: E1AB-11B2
Содержимое папки C:\test
Содержимое папки C:\test
да и если честно, батник какой то странный...
call :SUB0001 C:testA12345 C:test2SBC*_*_*_1* C:test2SBC*_*_*_2*
call :SUB0001 C:testB12345 C:test2SBC*_*_*_3* C:test2SBC*_*_*_4* »
Тут всё верно, обратный слеш не забыли?
да и если честно, батник какой то странный... »Что именно странно?
call :SUB0001 C:\test\A12345 C:\test2\SBC*_*_*_1* C:\test2\SBC*_*_*_2*
call :SUB0001 C:\test\B12345 C:\test2\SBC*_*_*_3* C:\test2\SBC*_*_*_4*
......
C:\ARJ32\ARJ32.exe a -e %NewName% %2 %3»
teg PHP слеши режет... не думал что всё так запущено...
@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:\testA12345 C:test2SBC*_*_*_1* C:test2SBC*_*_*_2*
call :SUB0001 C:\testB12345 C:test2SBC*_*_*_3* C:test2SBC*_*_*_4*
exit /b 0
:SUB0001
(dir %2 %3>nil)&&(
for /L %%N in (99,-1,1) do (if %%N LEQ 9 (set NN=0%%N) else set NN=%%N
if not exist %1%GGMMDD%!NN!.arj set NewName=%1%GGMMDD%!NN!.arj
)
C:\ARJ32ARJ32.exe a -e %NewName% %2 %3
)
exit /b 0
Вроде нормально.
Не очень понятно... Это ирония или просто великий и могучий?
Anufriev
13-09-2012, 09:44
все не так запущено;) слеши не помогают;) точнее не в них дело
архиватор пытается найти SBC*_*_*_1*.ARJ:(
получается %NewName% он не видит:(
то что пишет cmd:
Том в устройстве C не имеет метки.
Серийный номер тома: E1AB-11B2
Содержимое папки C:\test2
Содержимое папки C:\test2
12.09.2012 17:22 912 SBC014552362_503820120821_0391001412000075_200.txt
1 файлов 912 байт
0 папок 56*756*834*304 байт свободно
ARJ32 3.08a Copyright (c) 1990-2000 ARJ Software, Inc. Oct 11 2000
Registered to [xxx]
Long filenames enabled
Error (2): No such file or directory
Can't open C:\test2\SBC*_*_*_1*.ARJ
Том в устройстве C не имеет метки.
Серийный номер тома: E1AB-11B2
Содержимое папки C:\test2
Содержимое папки C:\test2
Файл не найден
не думал что всё так запущено... »Это ирония?
Long filenames enabled »Может тут собака наделала?
Почему вам обязательно нужен ARJ
Anufriev
13-09-2012, 09:51
потому что это требование организации куда будет отправляться файл, и поспорить с этим нельзя:(
Это ирония? » Это печаль. C:\ARJ32ARJ32.exe a -e %NewName% %2 %3 »может....
(dir "%2" "%3"|>nil)&&(
....
C:\ARJ32\ARJ32.exe a -e "%NewName%" "%2" "%3"
Anufriev
13-09-2012, 09:58
может Код: .... (dir "%2" "%3"|>nil)&&(
....
C:\ARJ32\ARJ32.exe a -e "%NewName%" "%2" "%3"
еще веселее:)
Непредвиденное появление: ).
Непредвиденное появление: ). »(dir "%2" "%3">nil)&&(
Anufriev
13-09-2012, 10:02
в таком случае появляется файл nil с текстом
Том в устройстве C не имеет метки.
Серийный номер тома: E1AB-11B2
Содержимое папки C:\test2
Содержимое папки C:\test2
моя вина (dir "%2" "%3" >nul)&&(глаз замылился от разных языков
Почему вам обязательно нужен ARJ »
потому что это требование организации куда будет отправляться файл, и поспорить с этим нельзя »Это банковские работники :) Сталкивался.
Anufriev
13-09-2012, 10:32
Ты прав:)
Код:
(dir "%2" "%3" >nul)&&(
глаз замылился от разных языков »
да это не страшно, проблемка все равно не в этом;)
архив то он все равно не создает;)
если C:\ARJ32\ARJ32.exe a -e %NewName% %2 %3 изменить на C:\ARJ32\ARJ32.exe a -e NewName %2 %3
то он начнет работать, создаст архив, но естественно не будет имя ему генерировать
а если сделать обходной путь, сначала архивировать, а потом переименовывать этот архив?
@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
(dir %2 %3 >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 %3
)
exit /b 0
Anufriev
13-09-2012, 11:20
прекрасно, это помогло
только теперь появляется вопросик:
в папке находится несколько файлов формата SBC*_*_*_1*, SBC*_*_*_2* и он их пакует в один архив, а нужно что бы в разные:(
файлы формата SBC*_*_*_3* и SBC*_*_*_4* запаковал в другой архив но тоже пачкой:)
p.s. похоже я косячнул не сказав, что нужно каждый файлик в отдельный архив, в самом начале:(
call :SUB0001 "куда пакуем" "что пакуем"
Anufriev
13-09-2012, 11:31
простите, но я довольно таки дуб в этом и я не знаю куда воткнуть данную строчку:(
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.