循环遍历子文件夹时BAT文件故障

时间:2015-03-09 11:08:13

标签: batch-file

在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

除了子文件夹之外,它的效果非常好。每个子文件夹创建两个条目。因此,如果我们有一个包含两个子文件夹folder1subfolder1的文件夹subfolder2,并且两者都有一个文件,那么输出中会有三件事

  

Folder1

     

fileinfolder1.jpg

     

fileinfolder2.jpg

     

Folder1 / subfolder1

     

fileinfolder1.jpg

     

Folder1 / subfolder2

     

fileinfolder2.jpg

我不想要第一个条目,因为链接已被破坏,并且它不会显示在哪个子文件夹中。但是,我不知道在我的.bat文件中要编辑什么,以确保只显示后两个。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

您的问题是您的内部循环以递归方式列出当前文件夹中的所有文件(包括子文件夹)。

您需要做的就是删除/ R选项。

<强>不正确

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

<强>正确

for %%b in (*) do (

注意 - 您还有其他潜在问题。

  • 包含!的文件名将失败,因为延迟扩展会破坏FOR变量扩展。

  • 我认为您还没有解决许多网址编码问题,因为文件名可以包含+%。可能还有其他问题。