2014-07-15 25 views
2

我從來沒有寫過BAT文件,但我想要做以下事情。BAT文件索引文件夾結構爲HTML

在共享網絡驅動器上,我們有一個文件/文件夾結構。我希望我的同事能夠雙擊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 

這可能是凌亂的,因爲我不完全確定它在做什麼。 該文件安裝驅動器,然後遍歷所有文件夾並將它們列爲鏈接。但是,每次循環到達新文件夾或子文件夾時,我都需要添加標題。這個頭文件應該是HTML,所以我可以添加諸如展開,摺疊和格式化等功能。

我在這個大方向

for /f "tokens=1,2,3,4 delims=\" %%a in ("!relPath!") do set a=%%a&set b=%%b&set c=%%c&set d=%%d 
set "fname=!d!" & set "fone=!a!" & set "ftwo=!b!" & set "fthree=!c!" & set "mainFolder=!a!" 
IF [!fname!] == [] (set "fname=!c!" & set "fone=!a!" & set "ftwo=!b!" & set "fthree=") 
IF [!fname!] == [] (set "fname=!b!" & set "fone=!a!" & set "ftwo=" & set "fthree=") 
IF [!fname!] == [] (set "fname=!a!" & set "fone=" & set "ftwo=" & set "fthree=" & set "mainFolder=") 

這東西試過設置每個文件夾和文件名到一些變量。每當這些變量中的一個發生變化時,我都希望使用它來回顯頭文件,但似乎無法解決這個問題。

也許我完全在錯誤的軌道上,但我會很樂意聽到它應該如何完成。

在此先感謝。


編輯> Foxidrive建議我在文件夾結構和輸出的實例添加。

Folder structure 上面的屏幕截圖演示了文件夾結構。 BAT文件將位於頂層文件夾(稱爲標準模板)。

輸出應該在這個形式的僞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...] 
+0

而不是閱讀不正確的代碼,你可以提供輸入文件夾/文件結構和你需要的HTML文件?有人可能提供工作代碼來做你需要的。 – foxidrive

+0

夠公平的。我將在一分鐘內添加到OP中。謝謝。 –

回答

1

再現你的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 
+0

這是光榮的,謝謝!附:我必須用'pushd%〜dp0'替換第一個pushd才能使用網絡共享,但這是我的問題的確切答案。 –

+0

此外:我(理所當然地)接受了這個答案,但它似乎在子文件夾上出現問題。它列出了所有項目,但它不添加標題。它也不會將子文件夾添加到鏈接,因此它會變成'Personeelszaken/file.doc',而不是正確的'Personeelszaken/Algemeen/file.doc'。 –

+1

我改變它包含所有子目錄並插入相對路徑。網絡共享可能需要進一步調整......頭部超出了我的HTML知識範圍,所以我不知道所有項目的正確位置。 – foxidrive

0

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 

它依靠路徑中的固定數量的字符。在我的情況下25個字符。