2011-06-25 43 views
0

我嘗試用這種格式列出一個目錄下的所有文件和目錄批次空間問題

DIR1 ::: DIR2 :::文件1 :::文件2 :::

爲了達到這個目的,我寫了一個批處理腳本。看看它:

@echo off 
    SETLOCAL ENABLEDELAYEDEXPANSION 
    SET M= 
    FOR %%d IN ('dir /B') DO SET M=!M!%%d::: 
    ECHO %M% 

那麼,它適用於目錄/文件不包含空格,但對於那些含有它,它就會只顯示第一個字。 例如,假設文件是​​「Blue hills.jpg」和「Sunset.jpg」。

預期的結果當然是

藍hills.jpg ::: Sunset.jpg :::

但是這似乎反而是

藍::: Sunset.jpg

僅供參考,我使用WinXP。 *這件事嗎?我試圖把引號放在「%% d」中,但它不起作用。我怎樣才能解決這個問題? 感謝您的幫助!對不起,我真的不得不改善它..

回答

3

您需要運行您的for循環的文件名包含任何文本(包括空格)"tokens=*"/f開關將搜索文本(文件名文本)。

@echo off 
SETLOCAL ENABLEDELAYEDEXPANSION 
SET M= 
FOR /f "tokens=*" %%d IN ('dir /B') DO SET M=!M!%%d::: 

ECHO %M% 

適用於帶空格的文件和目錄。

如果您使用tokens=1那麼您會得到每個文件名的第一個單詞(使用空格作爲分隔符)。所以,你會看到

Blue:::Sunset.jpg::: 

如果使用tokens=2那麼你得到的第二個字:

hills.jpg::: 
+0

謝謝!我的真實代碼包含/ F參數,但使用您的令牌時,空間問題已解決。你能向我解釋一下這是怎麼回事? :) – Jim

+0

我給出了一個更好的解釋 –

+0

@Jim:爲了最終確定,如果沒有指定'tokens'參數,就像在原來的查詢中一樣,'tokens = 1'是假定的。 –