Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Single Post  Topic: Пакетное создание файлов, целостность последовательности 
Author Message
_Johm



PostPosted: Mon Dec 15, 2008 12:01    Post subject: Пакетное создание файлов, целостность последовательности Reply with quote

Читал форум, нашел тему про то как найти недостающие элементы в последовательности файлов (со счетчиком). Автор вопроса спрашивал про плагин который мог бы собирать идущие по порядку файлы в одну строку, если встречался бы разрыв, то создавалась бы другая строка с другим периодом цифр в строке. Все это нужно для сортировки картинок, подкастов и т.д.
На днях встретился с такой же проблемой: есть около 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
View user's profile Send private message


Powered by phpBB © 2001, 2005 phpBB Group