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 

Склеивание текстовых файлов с их редактированием

 
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
Jonmey



Joined: 27 Sep 2010
Posts: 45

Post (Separately) Posted: Wed Jan 26, 2011 08:48    Post subject: Склеивание текстовых файлов с их редактированием Reply with quote

Задача возникла следующего рода.
Имеется каталог вида

Code:
DIR\DIR 1\File 1.ext1
DIR\DIR 1\File 2.ext2
DIR\DIR 1\File 3.md5
DIR\DIR 2\File 1.ext3
DIR\DIR 2\File 2.ext4
DIR\DIR 2\File 3.md5
DIR\DIR 3\File 1.ext6
DIR\DIR 3\File 2.ext7
DIR\DIR 3\File 3.md5
DIR\ПАПКА\Файл 1.ext8
DIR\ПАПКА\Файл 2.ext9
DIR\ПАПКА\Файл 3.md5


То есть, состав файлов в каждой папке разный, но к каждой подпапке (DIR1, DIR2, ...) имеется один файл .md5, в котором содержатся хеши md5 для всех файлов этой папки (включая подпапки) вида
Code:
38ca81f5b9098bff4d3c9bf6a4e53b45  File1.ext1
1b36dcb4b186135d9bd71d82f36ecb0a  File2.ext2
7ac65761628a8b4957a95b1a6f658b80  File3.ext3

(два пробела перед именем файла)
или вида
Code:
38ca81f5b9098bff4d3c9bf6a4e53b45 *File1.ext1
1b36dcb4b186135d9bd71d82f36ecb0a *File2.ext2
7ac65761628a8b4957a95b1a6f658b80 *File3.ext3


Требуется для выбранных папок объединить все md5 файлы, которые в них имеются в один, однако не просто объединить, а прописать относительные или абсолютные пути (в зависимости от целевого расположения объединенного .MD5 файла). То есть, чтобы, в зависимости от места создания целевого файла получался файл вида:
Code:
38ca81f5b9098bff4d3c9bf6a4e53b45  DIR 1\File1.ext1
1b36dcb4b186135d9bd71d82f36ecb0a  DIR 1\File2.ext2
7ac65761628a8b4957a95b1a6f658b80  DIR 1\File3.ext3
38ca81f5b9098bff4d3c9bf6a4e53b45  DIR 2\File1.ext1
1b36dcb4b186135d9bd71d82f36ecb0a  DIR 2\File2.ext2
7ac65761628a8b4957a95b1a6f658b80  DIR\2\File3.ext3

или
Code:
38ca81f5b9098bff4d3c9bf6a4e53b45  X:\DIR\DIR 1\File1.ext1
1b36dcb4b186135d9bd71d82f36ecb0a  X:\DIR\DIR 1\File2.ext2
7ac65761628a8b4957a95b1a6f658b80  X:\DIR\DIR 1\File3.ext3
38ca81f5b9098bff4d3c9bf6a4e53b45  X:\DIR\DIR 2\File1.ext1
1b36dcb4b186135d9bd71d82f36ecb0a  X:\DIR\DIR 2\File2.ext2
7ac65761628a8b4957a95b1a6f658b80  X:\DIR\DIR\2\File3.ext3


Создавать единый файл .MD5 пересчетом хешей не предлагать - это многочаcовой мучительный процесс. А папки \DIR N\ и \ПАПКА N\ имеют свойство регулярно добавляться и добавляться. Тогда как единый файл позволяет проверить хеши всех файлов сразу (или сравнить хеши с содержимым другой папки с аналогичным содержимым), а не делать это по одной папке за раз.
Back to top
View user's profile Send private message
Tol!k



Joined: 01 Apr 2008
Posts: 1727
Location: Арзамас

Post (Separately) Posted: Wed Jan 26, 2011 13:23    Post subject: Reply with quote

Code:
@echo off &chcp 1251 >nul
setlocal enableextensions

rem Параметры для TC: %L
set "summa=~folder.md5"

cd. >"%summa%"
cd. >"%summa%.tmp"
for /f "usebackq delims=" %%d in ("%~1") do dir /b/s "%%d*.md5" >>"%summa%.tmp"
for /f "usebackq delims=" %%s in ("%summa%.tmp") do (
  title %%s
  for /f "tokens=1,*" %%f in ('type "%%s"') do call :f %%f "%%g" "%%~dps"
)
del /q "%summa%.tmp"
goto :eof

:f
set "n=%~2"
if "%n:~0,1%"=="*" set "n=%n:~1%"
set "nn=%~3%n%"
>>"%summa%" echo %1  %nn:&=^&%
goto :eof


Last edited by Tol!k on Thu Jan 27, 2011 03:39; edited 2 times in total
Back to top
View user's profile Send private message
Jonmey



Joined: 27 Sep 2010
Posts: 45

Post (Separately) Posted: Wed Jan 26, 2011 19:52    Post subject: Reply with quote

Tol!k
Здорово! Вот уж не думал, что эту задачу можно решить с помощью коммандного файла. Снимаю шляпу. Спасибо большое.

P.S. Есть маленькая проблемка - если название папки или файла md5 содержат символ '&', то выдается ошибка и соответствующие файлы или папки не обрабатываются.
Back to top
View user's profile Send private message
Tol!k



Joined: 01 Apr 2008
Posts: 1727
Location: Арзамас

Post (Separately) Posted: Thu Jan 27, 2011 03:31    Post subject: Reply with quote

Исправил
Back to top
View user's profile Send private message
Jonmey



Joined: 27 Sep 2010
Posts: 45

Post (Separately) Posted: Thu Jan 27, 2011 15:21    Post subject: Reply with quote

Tol!k
Работает отлично!
Большое спасибо!

P.S. Благодаря скрипту обнаружил 7 неучтенных (непрохешированных) файлов.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander All times are GMT + 4 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group