2011-06-25 41 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'是假定的。 –