2015-03-09 2 views
0

После запроса this question на StackOverflow я написал .BAT-код, который проходит через все папки на общем сетевом диске, перечисляет все файлы, а затем выводит HTML.BAT-файл сбой при прохождении через вложенные папки

@echo off 
setlocal enabledelayedexpansion 
pushd %~dp0 
(
echo ^<a href="javascript:toggleAll()" class='toggleAll' style="color:#f57832;" ^>Alles openen^</a^> 
for /d /r %%a in (*) do (
    pushd "%%a" 
    set "folder=%%a" 
    echo ^<h1 onClick="showHide($(this))" class="belangrijkeheader"^>!folder:~25!^</h1^>^<ul class='belangrijkelijst'^> 

    for /r %%b in (*) do (
    set "filename=%%~nb" 
    set "filename=!filename: =%%20!" 
    echo ^<li^>^<a href="http://someurl.com:8081/somefolder/!folder:~25!/!filename!%%~xb"^>%%~nb^</a^>^</li^> 
) 
popd 
echo ^</ul^> 
) 
)>"file.html" 
start file.html 
pause 

Это работает очень хорошо, за исключением подпапок. Каждая подпапка создает две записи. Таким образом, если бы мы имели папку folder1 с двумя подпапок, subfolder1 и subfolder2 и оба имели файл, три вещи будут на выходе

Folder1

fileinfolder1.jpg

fileinfolder2. JPG

Folder1/subfolder1

fileinfolder1.jpg

Folder1/subfolder2

fileinfolder2.jpg

Я не хочу, первая запись, так как ссылки разбиты, и он не показывает, в каком вложенной папке. Тем не менее, я не знаю, что нужно редактировать в моем .bat-файле, чтобы убедиться, что показаны только два вторых.

Любая помощь будет принята с благодарностью.

ответ

1

Ваша проблема заключается в том, что ваш внутренний цикл рекурсивно перечисляет все файлы в текущей папке (включая подпапки).

Все, что вам нужно сделать, это удалить параметр/R.

некорректный

for /r %%b in (*) do (

правильно

for %%b in (*) do (

Примечание - У вас есть дополнительные потенциальные проблемы.

  • имен файлов, содержащих ! потерпят неудачу, потому что задерживаются расширение будет повреждено для расширения переменного.

  • Я думаю, что существует ряд проблем с кодировкой url, которые вы не обращали, поскольку имена файлов могут содержать + и %. Могут быть и другие проблемы.

+0

Удивительно просто, спасибо! Я также рассмотрю ваши предупреждения, но поскольку это небольшая, довольно контролируемая среда, эти два не должны быть огромной проблемой. –

Смежные вопросы