Войти

Показать полную графическую версию : [решено] Нужен батник для сканирования папок и записи результатов в файл


ruslaw
24-08-2013, 00:31
Прошу помочь в такой проблеме:
Есть набор папок, в каждой из которых расположены разные файлы (txt/doc/djvu/pdf/..). Нужно, с помощью батника просканировать

эти папки и результаты получить в виде текстовых(html) файлов (по одному на каждую папку и помещенные в отдельную новую

папку) с таким содержимым:

<html><head><meta http-equiv="Content-Type" content="text/html; charset=windows-1252"><title>Название папки</title>
</head><body>
<h2>Название папки</h2>
<ul>
<li><a href="filepath/filename1.ext">filename1</a></li>
<li><a href="filepath/filename2.ext">filename2</a></li>
..........
<li><a href="filepath/filenameN.ext">filenameN</a></li>
</ul>
</body></html>


P.S.
1. Папки и файлы в приведённом шаблоне на самом деле порядковых номеров не имеют, а имеют различные названия. Их нумерация

приведена только для наглядности.
2. Все папки содержатся в одном общем каталоге
3. возможна иерархия вложений в этих папках.
4. Пути (и ссылки) предполагаются относительными

Foreigner
24-08-2013, 08:24
@echo off
setlocal

1>nul chcp 1251

subst n: "C:\Path\To\RootDir"
pushd n:

for /f "tokens=*" %%i in (' dir /b /s /ad ') do (

pushd "%%i"

for /f "tokens=*" %%j in (' dir /b /a-d ') do call:rep "%%~nxi" "%%j"

1>>"dir_%%~nxi.htm" (

echo ^</ul^>
echo ^</body^>^</html^>

)

popd

)

md dir_htm

for /f "tokens=*" %%i in (' dir /b /s dir_*.htm ') do move "%%i" dir_htm

popd
subst n: /d
goto:eof

:rep

if not exist "dir_%~1.htm" 1>"dir_%~1.htm" (

echo ^<html^>^<head^>
echo ^<meta http-equiv="Content-Type" content="text/html; charset=windows-1251"^>
echo ^<title^>%~1^</title^>
echo ^</head^>^<body^>
echo ^<h2^>%~1^</h2^>
echo ^<ul^>

)

1>>"dir_%~1.htm" echo ^<li^>^<a href="..%~pnx2"^>%~2^</a^>^</li^>
Где "C:\Path\To\RootDir" корневая директория для создания htm-отчетов.

ruslaw
24-08-2013, 11:25
Спасибо огромное, отлично работает!

ruslaw
24-08-2013, 13:10
Но вообще говоря есть некоторые проблемы.
У меня WinXP SP3
Я помещаю батник в сканируемую папку, но он ничего не создает в созданной мной папке "C:\Path\To\RootDir"
Но если уничтожить "C:\Path\To\RootDir" то батник создает папку "dir_htm" в сканируемой папке и потом нужно перенести ее в корневой каталог и тогда ссылки работают. Но в некоторых случаях батник не создает папку, а создает файлы в подпапках и их тоже требуется перемещать в корень.
Но вобщем конечно работает, я колоссально продвинулся в деле каталогизации своей библиотеки и остальное доделаю с помощью программ замены символов.
Еще раз спасибо!!!

Foreigner
24-08-2013, 13:35
Цитата ruslaw:
"C:\Path\To\RootDir" »
Батник может лежать где-угодно, а это просто пример, поменяйте путь на нужный вам, тот который является корнем для просматриваемых подкаталогов, например на "C:\Program Files" или какой-нибудь D:\Music

ruslaw
24-08-2013, 14:33
Спасибо, попробую




© OSzone.net 2001-2012