Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.94/16: Рейтинг темы: голосов - 16, средняя оценка - 4.94
0 / 0 / 0
Регистрация: 19.05.2011
Сообщений: 6
1

Распределение файлов по условию

19.05.2011, 09:59. Показов 3153. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всех приветствую.
Необходима помощь в следующем вопросе:

Есть сетевой ресурс, на который несколько раз в день выкладываются базы открытых ключей ЭЦП. И бюллетени к каждой базе.

\\document\ - сюда падают бюллетени
\\defin\папка_с_именем_соответсвующая_текущей_дате_в_формате_dd_mm_gg\0301_108\ - сюда падают базы.

Следующий код позволяет проверить наличие ЭЦП под каждым файлом папок \\defin\%date:~0,2%_%date:~3,2%_11%\0301_108\ и \\document\ и проверяет ее истинность:

Windows Batch file
1
2
\\userbase\sbersign.exe /p /d=\\base\SIGN00CA.017 /l=\\CUKS\log.txt \\defin\%date:~0,2%_%date:~3,2%_11%\0301_108\*.*
\\userbase\sbersign.exe /p /d=\\base\SIGN00CA.017 /l=\\CUKS\log.txt \\document\
Немного отклонюсь от темы... Как исправить код %date:~0,2%_%date:~3,2%_11% на формат dd_mm_gg, чтобы gg он подставлял автоматически?

Далее. У меня вся сложность заключается в перемещении баз и бюллетеней по условию истинности ЭЦП под каждым файлом. Т.е. нужно, чтобы при истинной ЭЦП батник перемещал файл в папку \\base. Базы и бюллетени в одну папку, с заменой уже имеющихся там баз и бюллетеней. А если ЭЦП отсутствует или ложная, перемещал его в \\base\no_ecp\

Буду очень благодарен за помощь!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.05.2011, 09:59
Ответы с готовыми решениями:

Распределение файлов по папкам согласно заданному условию
Здравствуйте. Ребята, помогите пожалуйста, весь мозг сломал себе. Имеется папка, к примеру, test...

Распределение файлов по папкам, создаваемым в соответствии с частями имён этих файлов
Всем привет, я работаю в сфере 3d визуализации и так получилось что огромные секвенции файлов...

Распределение файлов в папках по подпапкам с именами, соответствующими именам этих файлов
Распределение файлов в папках по подпапкам с названием подпапок как файл. например в папке 0005...

Распределение файлов в папках по подпапкам с именами, соответствующими части имен этих файлов
Есть много пдф файлов с адресами в названии ул. Комсомольская, д. 10 (1 ввод) ул....

6
835 / 349 / 12
Регистрация: 04.10.2009
Сообщений: 589
19.05.2011, 10:47 2
Если %date% выдает нечто вроде 17.05.2011 то так %date:~0,2%_%date:~3,2%_%date:~8,2%
Только могут быть проблемы если в настройках компьютера другой формат даты стоит.
Можно сделать универсальную функцию определения даты, но тогда будет много кода.

Добавлено через 21 минуту
У меня нет ни sbersign.exe ни документации, поэтому я помочь не могу тут.
1
0 / 0 / 0
Регистрация: 19.05.2011
Сообщений: 6
19.05.2011, 11:12  [ТС] 3
По сути sbersign.exe просто проверяет наличие подписи и ее истинность.
Вот вся документация к нему:

Код
SBERSIGN [options] [File]
        Options:
        /m[=C:\Sign]  - режим с меню, [ начать работу в каталоге C:\Sign ];
        /w   - при подписывании секретный ключ берется с таблетки TmChip;
        /p[=N]   - проверить все [ N последних ] подписи;
        /d=<full_filename> - при проверке публ.ключ искать в <full_filename>;
        /o[=Print_File] - вывести проверяемый файл на печать;
        /c=Out_Dir - вывести проверяемый файл в раздел Out_Dir;
        /b[=N]   - удалить все [ N последних ] подписи;
        /s   - определить число подписей под файлом;
        /ewt - вычислить хэш файла и записать в ТМ;
        /ert - вычислить хэш файла и сравнить с записанным в  ТМ;
        /ewd - вычислить хэш файла и записать на ключевую дискету;
        /erd - вычислить хэш файла и сравнить с записанным на дискете;
        /l[=log_file]   - протоколировать действия [в файл с именем log_file];
        /g[=<identif>]   - создать секретный и публичный ключи абонента;
        /t   - при этом секретный ключ cоздать только в таблетке TmChip;
        /h   - печать данной заставки;

Примеры:  SBERSIGN *.txt - подписать все файлы с расширением .txt
  SBERSIGN /ewt adm.dat - вычислить хэш файла adm.dat и записать в ТМ
Больше по нему ничего нет.

Соответственно,
\\userbase\sbersign.exe - место расположения sbersign.exe
/p - проверяет все подписи под файлом
/d=\\base\SIGN00CA.017 - проверяет соответствие и наличие подписи, которой подписан файл, в базе SIGN00CA.017
/l=\\CUKS\log.txt - ведет лог файл
\\defin\%date:~0,2%_%date:~3,2%_11%\0301_108\*.* - тут файлы под которыми необходимо проверить подпись.

Может поможет, то что выше написал...
0
835 / 349 / 12
Регистрация: 04.10.2009
Сообщений: 589
19.05.2011, 12:43 4
Все таки не понятно SBERSIGN после проверки подписи что делает, в консоль что то пишет или код ошибки возвращает или только в лог пишет?
0
0 / 0 / 0
Регистрация: 19.05.2011
Сообщений: 6
19.05.2011, 13:29  [ТС] 5
Вот еще код... но не могу его заставить нормально работать. Даже если есть не подписанные файлы, он их все равно в С:\good\ кидает.

Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
\\userbase\sbersign.exe /p /d=\\base\SIGN00CA.017 /l=\\CUKS\log.txt C:\all\*.*
%errorlevel%
if errorlevel 6 goto other
if errorlevel 5 goto nobase
if errorlevel 4 goto nocfg
if errorlevel 3 goto nosign
if errorlevel 2 goto noid
if errorlevel 1 goto bad
if errorlevel 0 goto good
goto end
 
:good
goto end
 
:bad
echo Bad sign in Folder >> c:\%date%.txt
pause
goto A
 
:noid
echo No reg sign in Folder >> c:\%date%.txt
pause
goto A
 
:nosign
echo  Not sign in Folder >> c:\%date%.txt
pause
goto A
 
:nocfg
echo  Not SIGN.CFG >> c:\%date%.txt
pause
goto A
 
:nobase
echo Not SIGN.DAT >> c:\%date%.txt
pause
goto A
 
:other
echo Other mistake in Folder "sb" or not files >> c:\%date%.txt
rem pause
goto end
 
:end
 
@echo off
 
 
rem --------------------------------
 
xcopy /s /v c:\all c:\good 
rem del /q c:\all\*.*
start c:\%date%.txt
Тут видно какие ошибки возвращает sbersign.exe . Нет ЭЦП, не зарегистрирована (отсутствует в файле SIGN00CA.017) или присутствует. Интересуют возвраты от 0 до 3. И только при 0 он должен перемещать базу или бюллетень в \\base\ иначе в \\base\no_ecp\.
0
835 / 349 / 12
Регистрация: 04.10.2009
Сообщений: 589
20.05.2011, 07:22 6
Я так понимаю у вас программа сразу все файлы проверяет?
Так нужно сделать тогда цикл своими средствами и проверять по 1 файлу.
Как-то так
Windows Batch file
1
2
3
4
5
6
7
8
goto start
:p
\\userbase\sbersign.exe /p /d=\\base\SIGN00CA.017 /l=\\CUKS\log.txt %1
if errorlevel 0 (move /y %1 \\base\) else (move /y %1 \\base\no_ecp\)
exit /b
:start
for /f "delims=" %%i in ('dir /a-d /b \\defin\%date:~0,2%_%date:~8,2%_11%\0301_108\') do call :p "%%i"
for /f "delims=" %%i in ('dir /a-d /b \\document\') do call :p "%%i"
Добавлено через 14 часов 13 минут
хм ошибочка
вот так вроде верно
Windows Batch file
1
2
3
4
5
6
7
8
goto start
:p
\\userbase\sbersign.exe /p /d=\\base\SIGN00CA.017 /l=\\CUKS\log.txt %1
if errorlevel 0 (move /y %1 \\base\) else (move /y %1 \\base\no_ecp\)
exit /b
:start
for /f "delims=" %%i in ('dir /a-d /b \\defin\%date:~0,2%_%date:~8,2%_11%\0301_108\') do call :p "\\defin\%date:~0,2%_%date:~8,2%_11%\0301_108\%%i"
for /f "delims=" %%i in ('dir /a-d /b \\document\') do call :p "\\document\%%i"
1
0 / 0 / 0
Регистрация: 19.05.2011
Сообщений: 6
20.05.2011, 10:49  [ТС] 7
Покорнейше благодарю, atributz. Очень помогли.
Немного переделал код на
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@echo off
cls
goto start
:p
\\toro\bezbtehn\podp\userbase\sbersign.exe /p /d=\\toro\bezbtehn\podp\userbase\base\SIGN00CA.017 /l=\\Nt_print\UNION\AUTO\IN\CUKS\log.txt %1
if errorlevel 6 (move /y %1 c:\bad\)
if errorlevel 5 (move /y %1 c:\bad\)
if errorlevel 4 (move /y %1 c:\bad\)
if errorlevel 3 (move /y %1 c:\bad\)
if errorlevel 2 (move /y %1 c:\bad\)
if errorlevel 1 (move /y %1 c:\bad\)
if errorlevel 0 (move /y %1 c:\good\)
exit /b
:start
for /f "delims=" %%i in ('dir /a-d /b c:\all\') do call :p "c:\all\%%i"
rem for /f "delims=" %%i in ('dir /a-d /b \\document\') do call :p "\\document\%%i"
rmdir c:\all
тестировал на своем компьютере. Пришлось коды возврата проверять отдельно, а то он все за 0 принимал, не зависимо от реального результата. Сейчас все работает. Еще раз большое спасибо.
0
20.05.2011, 10:49
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.05.2011, 10:49
Помогаю со студенческими работами здесь

Распределение файлов по папкам, соответствующим расширениям файлов
Здравствуйте. Есть папка Downloads и в ней множество файлов с разным расширением (mp3, jpeg, rar и...

Распределение файлов по каталогам
Здравствуйте. Как сделать распределение файлов по каталогам. Заранее спасибо

Распределение файлов по каталогам
Здравствуйте. Помогите сделать батник. Мне нужно создать конфигурационный файл в котором указаны...

Распределение файлов по их расширению
Всем привет!) Спасайте!! Нужно создать батник который распределяет разные файлы в папке по...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru