2012-08-07 33 views
1

我想創建一個批處理文件。當它被調用爲batch.bat MyProjectbatch.bat MyProject/時,它將產生以下列表。請注意0​​是MyProject的子目錄。我正在使用Windows 7.如何將目錄樹列表寫入文本文件?

Dir 
Dir/SubDir1 
Dir/SubDir1/SubSubDir1 
Dir/SubDir1/SubSubDir2 
Dir/SubDir2 
Dir/SubDir2/SubSubDir1 
Dir/SubDir2/SubSubDir2 
Dir/SubDir2/SubSubDir3 
Dir/SubDir3 
Dir/SubDir4 

如何將目錄樹列表寫入文本文件?

必須排除文件名。

+0

這是否有批辦?例如,在Powershell中這將非常簡單,但在批處理中非常困難。 – 2012-08-07 07:47:01

+0

是的。僅在批處理文件中,爲了簡單和兼容性。 – 2012-08-07 07:48:36

+0

你可以調用VBScript嗎?再次,這將使事情變得極其簡單... – 2012-08-07 08:04:26

回答

2

FORFILES提供了一個簡單的解決方案,但它是。該命令從作品批處理文件中同樣或者在命令行上:

forfiles /s /p "c:\MyProject" /m * /c "cmd /v:on /c if @isdir==TRUE (set [email protected]&echo !f:~3,-1!)" >listing.txt 

如果您運行MyProject的命令作爲當前目錄,那麼你可以刪除該命令的
/p "c:\MyProject"選項。

如果你不介意你的相對路徑被封閉在與每個路徑的前.\報價,則該解決方案更簡單:

forfiles /s /p "c:\MyProject" /m * /c "cmd /c if @isdir==TRUE echo @relpath" >listing.txt 
+0

值得注意的是,在當前版本中,它將'listing.txt'放入**用戶主目錄**(即Windows 7中的'C:\ Users \ [用戶名]',可能還有其他)。我很驚訝,因爲我首先查看'c:'中的'listing.txt'和文件夾,我想轉儲哪個結構。 – trejder 2014-06-01 10:02:17

+0

@trejder - 正如所寫,它將在控制檯的當前目錄中創建文件。您可以在重定向中包含路徑,也可以在重定向的FORFILES命令之前使用CD或PUSHD。 – dbenham 2014-06-01 13:33:47

2

好的 - 這應該做到這一點。它需要一個參數(根文件夾)。

@ECHO OFF 

SET root=%1 

REM Get the length of the root, to make the path relative later. 
REM See http://stackoverflow.com/questions/5837418/how-do-you-get-the-string-length-in-a-batch-file. 
ECHO %root%>x&FOR %%? IN (x) DO SET /A rootlength=%%~z? - 1&del x 

for /F "tokens=*" %%G in ('DIR %1 /AD /S /B') do (
    CALL :PrintDirectory "%%G" %rootlength% 
) 

GOTO :eof 

:PrintDirectory 
REM %1 Path to the folder 
REM %2 Length of root string. 

REM See http://www.dostips.com/DtTipsStringManipulation.php#Snippets.LeftString for 
REM information on the string manipulation. 

@ECHO OFF 
SET start=%2 
SET absPath=%1 

REM Remove the path root by taking the right-hand side of the string. 
CALL SET relPath=%%absPath:~%start%,-1%% 

ECHO.%relPath% 

您可以通過重定向的結果,一個批處理文件執行:

PrintDirectoryStructure.bat c:\MyProject > out.txt 
+0

我測試過它,但有些路徑丟失。你測試過了嗎? – 2012-08-07 08:41:32

+0

@GarbageCollector我發現了一個會導致問題的錯誤,如果路徑中有空格。這現在已經被修正了(注意我添加的''tokens = *「'文本)。現在對你有用嗎?如果沒有,請給出關於哪些文件夾沒有看到的更多細節... – 2012-08-07 09:42:36

+0

當我在c:\ users \ Garbage Collector \「'產生'output.txt文件時調用'PrintDirectoryStructure.bat downloads> output.txt' '只有一個項目,即使我的'downloads'包含很多目錄。 – 2012-08-07 09:47:35