Single Post |
Topic: Пакетное создание файлов, целостность последовательности |
Author |
Message |
_Johm
|
Posted: Mon Dec 15, 2008 12:01 Post subject: Пакетное создание файлов, целостность последовательности |
|
|
Читал форум, нашел тему про то как найти недостающие элементы в последовательности файлов (со счетчиком). Автор вопроса спрашивал про плагин который мог бы собирать идущие по порядку файлы в одну строку, если встречался бы разрыв, то создавалась бы другая строка с другим периодом цифр в строке. Все это нужно для сортировки картинок, подкастов и т.д.
На днях встретился с такой же проблемой: есть около 500 подкастов, несколько не скачались. Я вспомнил про этот вопрос и, насколько помню, ответ был, но спомощью скриптов. Впринципе, можно понапрягать глаза и в ручную найти недостающие файлы; я попробовал понапрягать глаза еще больше и создал бат-файл (batch flie), чтобы автоматизировать этот процес на будущее.
Вот что у меня получилось:
_cmd_create_check_succession.bat + ключи через _run.bat описаны ниже
Code: |
@echo off
rem -------------------------------------------------------------------------
rem входные данные
rem если флаг=0, то создаем файлы по маске
rem если флаг=1, то проверяем целостность последовательности файлов
rem если флаг=2, созадние папок
set flag_create_check=%7
rem КОЛИЧЕСТВО ЦИФР В СЧЕТЧИКЕ 0, 00, 000, и т.д.
set /a nnn_input=%1
rem для коммандной строки. если количество цифр задано нулем,
rem то приводим значение к работоспособному варианту
if %nnn_input%==0 set /a nnn_input=1
rem вычитание единицы из введенного КОЛИЧЕСТВА ЦИФР В СЧЕТЧИКЕ
set /a nnn=nnn_input-1
set flag_skip_drop_one_null=0
if %nnn%==0 set flag_skip_drop_one_null=1
rem часть имени файла до счетчика
set prefix1=%2
rem часть имени файла после счетчика
set prefix2=%3
rem *****************************
rem границы счетчика, что подсавляются в именя фала
rem *****************************
rem начальное число счетчика.
rem далее используется как увеличиваующийся СЧЕТЧИК в ГЛАВНОМ ЦИКЛЕ
set /a startnumber=%4
rem КОНЕЧНОЕ ЧИСЛО СЧЕТЧИКА
set /a endnumber=%5
rem ШАГ СЧЕТЧИКА
set /a shag=%6
rem имя ВЫХОДНОГО ФАЙЛА куда записываем имена пропущенных файлов
set OUTPUT_FILE="%8"
rem -------------------------------------------------------------------------
rem создание подстроки добавочных нулей
rem подстрока добавочных нулей
set digit_ape=
set /a arg=0
:nnn_loop
if %arg%==%nnn% goto nnn_end_loop
set /a digit_loop_result=arg+1
set arg=%digit_loop_result%
set digit_ape=%digit_ape%0
goto nnn_loop
:nnn_end_loop
rem -------------------------------------------------------------------------
rem создание последовательности файлов
set /a multi=10
goto begin_succession
rem изменение подстроки добавочных нулей
:drop_one_null
if %flag_skip_drop_one_null%==1 goto begin_succession
if %digit_ape%==0 set flag_skip_drop_one_null=1
set digit_ape=%digit_ape:~0,-1%
set /a arg_multi=multi*10
set /a multi=arg_multi
rem ГЛАВНЫЙ ЦЫКЛ создания или проверки файлов в зависимости от флага
rem flag_create_check
:begin_succession
rem если СЧЕТЧИК превысил
rem КОНЕЧНОЕ ЧИСЛО СЧЕТЧИКА, то заканчиваем bat-файл
if %startnumber% GTR %endnumber% goto end
if %flag_skip_drop_one_null%==1 goto skip_drop_one_null
rem если порядок 10,100,1000
rem увеличился на один, то изменяем подстроку добавочных нулей
if %startnumber% GEQ %multi% goto drop_one_null
:skip_drop_one_null
rem собираем имя файла, согласно циклу
set temp_name=%prefix1%%digit_ape%%startnumber%%prefix2%
set temp_name=%temp_name:"=%
rem условие: создаем ли файлы, проверяем наличие всех файлов в
rem последовательности или создаем папки
if %flag_create_check%==0 goto echo_creating
if %flag_create_check%==1 goto echo_missing
if %flag_create_check%==2 goto echo_creating_folder
rem создаем файл с конкретным именем, согласно циклу
:echo_creating
cls
echo "creation of the files..."
echo. >"%9%temp_name%"
goto end_loop
rem записываем недостающее имя файла в ВЫХОДНОЙ ФАЙЛ
:echo_missing
cls
echo "checking the continuity of the succession of the files..."
if not exist "%temp_name%" echo %temp_name% >>%OUTPUT_FILE%
goto end_loop
:echo_creating_folder
mkdir "%temp_name%"
:end_loop
set /a result=startnumber + shag
set startnumber=%result%
goto begin_succession
:end
|
_run.bat
Code: |
_cmd_create_check_succession.bat 2 "str _" "_ end.test" 1 115 6 0 "missing_files.txt"
|
2 - означает сколько цифр будет в счетчике
"str _" - строка перед счетчиком
"_end.test"- строка после счетчика, если создаем файлы, то test будет рашсирением
1 - начальное значение счетчика
115 - конечное
6 - шаг счетчика
0 - ключ, создание файлов (создание файлов -0 /проверка -1 /создание катологов -2)
"missing_flies.txt" -файл куда записываютеся пропущенные файлы/папки (на данном шаге не используется, но вводить параметр обязательно)
после исполнения _run.bat получаем:
Code: |
str _01_ end.test
str _07_ end.test
str _13_ end.test
str _19_ end.test
str _25_ end.test
str _31_ end.test
str _37_ end.test
str _43_ end.test
str _49_ end.test
str _55_ end.test
str _61_ end.test
str _67_ end.test
str _73_ end.test
str _79_ end.test
str _85_ end.test
str _91_ end.test
str _97_ end.test
str _103_ end.test
str _109_ end.test
str _115_ end.test
|
далее, например удалим 13 и 55,61, 67 файлы; изменим _run.bat:
Code: |
_cmd_create_check_succession.bat 2 "str _" "_ end.test" 1 115 6 1 "missing_files.txt"
|
заминили 0 на 1, запускаем... Создается файл "missing_files.txt" с таким содержанием:
Code: |
"str _13_ end.test"
"str _55_ end.test"
"str _61_ end.test"
"str _67_ end.test"
|
С папками тоже самое, только при создании ключ 2, а не 0.
+ появлися вопрос: как можно сделать проверку целостности последовательности файлов, если последовательность в текстовом файле (строка-элемент)?
Last edited by _Johm on Tue Dec 23, 2008 11:25; edited 1 time in total |
|
|
|
 |
|
Powered by phpBB © 2001, 2005 phpBB Group
|