work-around для обработки Traum Library 2.0 Автор - Sk0rp.
@echo off
set tmpout=%~f4
if #%tmpout%#==## set tmpout=%TEMP%\fb2fix
md "%tmpout%\tmp" 2>NUL
set fb2fix=%~f1
set z7=%~dp17za.exe
set outdir=%~f3
md "%outdir%" 2>NUL
cd %2
FOR /D %%D IN (*.*) DO call :nextdir "%%~nxD"
goto :EOF
:nextdir
echo Folder: %~1
md "%outdir%\%~1" 2>NUL
FOR /D %%D IN ("%~1\*.*") DO call :nextdir "%~1\%%~nxD"
FOR /F "tokens=* delims=" %%N IN ('dir "%~1\*.*" /B /A-D') DO call :convert "%~1\%%~N" "%~1" "%%~N"
rem rd "%~1" 2>NUL
goto :EOF
:convert
echo "%~f1"
del /F /S /Q "%tmpout%\*.*" >NUL
%fb2fix% /compress- /translify- "%~f1" /output:"%tmpout%" >NUL
IF EXIST "%tmpout%\Good\*.fb2" (
move "%tmpout%\Good\*.fb2" "%tmpout%\tmp\%~n3" >NUL
) ELSE (
move "%tmpout%\Bad\*.fb2" "%tmpout%\tmp\%~n3" >NUL
)
IF NOT %errorlevel%==0 goto :EOF
rem del /F /Q "%~f1"
"%z7%" a -tzip -mx7 "%outdir%\%~2\%~n3.zip" "%tmpout%\tmp\%~n3" >NUL
скопировать и вставить, например, в script.bat
Параметры запуска:
script.bat <ссылка на fb2fix> <начальная папка> <папка для обработанных> [<временная папка>]
Пути могут быть как относительными так и абсолютными.
Если в пути есть пробел путь надо брать в кавычки.
В папку где лежит fb2fix.exe нужно распаковать и скопировать 7za.exe из комплекта "7-Zip Command Line Version"
Что скрипт делает:
Запускает fb2fix для каждого файла, затем восстанавливает его начальное имя и реплицирует (воссоздает в том же виде) изначальную структуру папок.
Зачем это надо:
Это надо для того, что бы последующие обновления Traum Library, которые выходят на уровне файлов могли нормально применяться к ранее обработанной библиотеке.
Обновления также можно заранее обработать скриптом, это не повлияет на возможность его применения.
Четвертый параметр
Четвертый параметр скрипта нужно указывать если вы хотите одновременно запустить несколько копий скрипта. Для корректной работы у каждой копии должна быть своя временная папка.
У меня, например, ядер в процессоре много и несколько параллельно работающих копий справляются существенно быстрее чем одна
Примеры:
script.bat FB2Fix.exe D:\Library\ru\_ outlib\_ tmp1
- script.bat лежит в той же папке, что и FB2Fix, перерабатывает папку с файлами по адресу D:\Library\ru\_, результат складывает в папку где лежит script.bat в подпапку outlib\_, как временная папка используется созданная здесь же tmp1
script.bat D:\fb2fix\FB2Fix.exe E:\ D:\Library
- где лежит script.bat не важно, перерабатывает E:\, результат складывает в D:\Library\, FB2Fix распакован в D:\fb2fix\, туда же скопирован 7za.exe. Так, например, можно взять библиотеку непосредственно с подмонтированного диска с Traum Library
script.bat FB2Fix.exe "D:\Traum Library" "D:\Traum Library"
- Аналогично первому примеру script.bat лежит в той же папке, что и FB2Fix. Обрабатывается папка D:\Traum Library. Результат остается в той же папке. Это, imho, наиболее удобная форма для запуска.
Если результат не в той же папке где были обрабатываемые файлы, но начальные файлы больше не нужны, раскоментируйте строчки "del /F /Q "%~f1"" и "rd "%~1" 2>NUL" тогда по мере обработки исходные файлы будет удаляться, - это полезно если на диске нет места для 2х копий библиотеки, а религия не позволяет обработанные файлы сохранять в том же месте, где были файлы изначально.
Добавлено 1:
при применении к обновлениям Traum, если папка источник и папка назначение совпадают, следует сохранять пустые папки, т.к. они потом используются. Для этого нельзя раскоментировать строчку:
rd "%~1" 2>NUL
Добавлено 2:
При копировании текста скрипта с форума MS Internet Explorere'ом и браузерами на их основе, в конец каждой строки добавляются пробелы. В исходном тексте html этих пробелов нет, т.е. IE их полностью придумывает.
В bat файлах пробелы значимы, в частности в текущем случае они залезают в середину имен файлов, после чего скрипт перестает работать.