在StackOverflow上询问this question之后,我写了一个.BAT代码,它遍历共享网络驱动器上的所有文件夹,列出所有文件,然后输出HTML。
@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文件中要编辑什么,以确保只显示后两个。
非常感谢任何帮助。
答案 0 :(得分:1)
您的问题是您的内部循环以递归方式列出当前文件夹中的所有文件(包括子文件夹)。
您需要做的就是删除/ R选项。
<强>不正确强>
for /r %%b in (*) do (
<强>正确强>
for %%b in (*) do (
注意 - 您还有其他潜在问题。
包含!
的文件名将失败,因为延迟扩展会破坏FOR变量扩展。
我认为您还没有解决许多网址编码问题,因为文件名可以包含+
和%
。可能还有其他问题。