Batch file 将文件夹结构索引为HTML的BAT文件

Batch file 将文件夹结构索引为HTML的BAT文件,batch-file,for-loop,Batch File,For Loop,我以前从未编写过BAT文件,但我想做以下工作 在共享网络驱动器上,我们有一个文件/文件夹结构。我希望我的同事能够双击BAT文件。然后,BAT文件应该生成这些文件的HTML索引和链接,以及每个文件夹和子文件夹的标题(不超过三个级别) 我想我已经非常接近谷歌搜索和复制代码了,但是我被困在了标题部分 setlocal EnableDelayedExpansion pushd %~dp0 for /L %%n in (1 1 500) do ( if "!__cd__:~%%n,1!" neq "" s

我以前从未编写过BAT文件,但我想做以下工作

在共享网络驱动器上,我们有一个文件/文件夹结构。我希望我的同事能够双击BAT文件。然后,BAT文件应该生成这些文件的HTML索引和链接,以及每个文件夹和子文件夹的标题(不超过三个级别)

我想我已经非常接近谷歌搜索和复制代码了,但是我被困在了标题部分

setlocal EnableDelayedExpansion
pushd %~dp0
for /L %%n in (1 1 500) do (
if "!__cd__:~%%n,1!" neq "" set /a "len=%%n+1"
)

for /r . %%g in (*) do (
setlocal EnableDelayedExpansion
  set "absPath=%%g"
  set "relPath=!absPath:~%len%!"
  for %%F in ("!absPath!") do set "var=%%~dpF"

  [MISSING CODE HERE]

  echo "<a href='http://linkhere.com/!relPath!'>%%~ng</a>" >>output.txt
  endlocal
)
echo %~dp0
popd
pause
这会将每个文件夹和文件名设置为一些变量。我希望每次这些变量中的一个发生变化时,都能用它来回显一个标题,但我似乎无法解决这个问题

也许我完全走错了方向,但我很高兴听到应该怎么做

提前谢谢


编辑> Foxidrive建议我添加文件夹结构和输出的示例

上面的屏幕截图演示了文件夹结构。BAT文件将位于顶部文件夹(称为Standaard formulieren)

输出应该是这种伪HTML格式的东西

<h2 class='header' onClick='showHide(1)'>ABU</h2>
<div id='itemlist1' class='itemlist'>
<ul>
 <li><a href='http://link-to-file.com/ABU/filename.doc'>Filename</a></li>
 <li><a href='http://link-to-file.com/ABU/filename%202.doc'>Filename 2</a></li>
</ul> 
</div>
[etc...]
<h2 class='header' onClick='showHide(9)'>Personeelszaken</h2>
<div id='itemlist9' class='itemlist'>
<h3 class='subheader' onClick='showHide(10)'>Algemeen</h2>
<div id='itemlist10' class='subitemlist'>
<ul>
 <li><a href='http://link-to-file.com/Personeelszaken/Algemeen/filename.doc'>Filename</a></li>
 <li><a href='http://link-to-file.com/Personeelszaken/Algemeen/filename%202.doc'>Filename 2</a></li>
</ul>
</div> 
</div>
[etc...]
ABU
[等等] 萨肯人 阿尔杰明
[等等]
复制HTML不是我的专长,但这应该会创建一种HTML,其中包含足够的信息,可以帮助您实现目标——我希望如此

已编辑:以递归方式包含子目录的完整列表,更正相对路径

@echo off
setlocal enabledelayedexpansion

set "basefolder=d:\Standaard formulieren"
pushd "%basefolder%"

(
for /d /r %%a in (*) do (
   pushd "%%a"
          echo going into "%%a"
    for /r %%b in (*) do (
       set "relfolder=%%a"
       set "relfolder=!relfolder:%basefolder%\=!"
       set "relfolder=!relfolder:\=/!"
       set "filename=%%~nb"
       set "filename=!filename: =%%20!"
          echo ^<li^>^<a href="http://link-to-file.com/!relfolder!/!filename!%%~xb"^>%%~nb^</a^>^</li^>
    )
   popd
   echo leaving "%%a"
)
)>"file.html"
echo done
pause
@echo关闭
延迟扩展
设置“basefolder=d:\standardaard formulieren”
pushd“%basefolder%”
(
对于(*)中的/d/r%%a,请执行以下操作(
pushd“%%a”
回声进入“%%a”
对于(*)中的/r%%b,请执行以下操作(
设置“relfolder=%%a”
设置“relfolder=!relfolder:%basefolder%\=!”
设置“relfolder=!relfolder:\=/!”
设置“文件名=%%~nb”
设置“文件名=!文件名:=%%20!”
回音^^%%~nb^^
)
邻苯二胺
回声离开“%%a”
)
)>“file.html”
回音完成
暂停

Foxidrive解决了这个问题(所以改选他),但这里是我修改的代码,用于网络共享

@echo off
setlocal enabledelayedexpansion

pushd %~dp0

(
for /d /r %%a in (*) do (
   pushd "%%a"
   set "folder=%%a"
          echo ^<h1^>!folder:~25!^</h1^>^<ul^>
    for /r %%b in (*) do (
   set "filename=%%~nb"
   set "filename=!filename: =%%20!"
   echo ^<li^>^<a href="http://link-to-file.com/Standaard formulieren/!folder:~25!/!filename!%%~xb"^>%%~nb^</a^>^</li^>
)
 popd
 echo ^</ul^>
)
)>"file.html"
echo done
pause
@echo关闭
延迟扩展
pushd%~dp0
(
对于(*)中的/d/r%%a,请执行以下操作(
pushd“%%a”
设置“文件夹=%%a”
echo^!文件夹:~25^^
对于(*)中的/r%%b,请执行以下操作(
设置“文件名=%%~nb”
设置“文件名=!文件名:=%%20!”
回音^^%%~nb^^
)
邻苯二胺
回音^
)
)>“file.html”
回音完成
暂停

它依赖于路径中固定数量的字符。在我的例子中是25个字符。

您可以提供输入文件夹/文件结构和html文件,而不是读取无法正常工作的代码吗?有人可能会提供工作代码来满足您的需要。这很公平。我会在一分钟内将两者添加到OP中。谢谢。这太棒了,谢谢!另外,我不得不用
pushd%~dp0
替换第一个pushd,以使其与网络共享一起工作,但这正是我问题的答案。此外:我(正确地)接受了这个答案,但它似乎在子文件夹上出了故障。它列出所有项目,但不添加标题。它也不会将子文件夹添加到链接中,因此它变成了
PersonelSzaken/file.doc
,而不是正确的
PersonelSzaken/Algemeen/file.doc
。我将其更改为包含所有子目录并插入相对路径。网络共享可能需要进一步调整。。。标题超出了我的HTML知识范围,因此我不知道所有项目的正确位置。
@echo off
setlocal enabledelayedexpansion

pushd %~dp0

(
for /d /r %%a in (*) do (
   pushd "%%a"
   set "folder=%%a"
          echo ^<h1^>!folder:~25!^</h1^>^<ul^>
    for /r %%b in (*) do (
   set "filename=%%~nb"
   set "filename=!filename: =%%20!"
   echo ^<li^>^<a href="http://link-to-file.com/Standaard formulieren/!folder:~25!/!filename!%%~xb"^>%%~nb^</a^>^</li^>
)
 popd
 echo ^</ul^>
)
)>"file.html"
echo done
pause