2016-05-30 76 views
0

我试图让一个循环显示文件/文件夹内容使用特定(绝对完整路径)和*通配符文件/文件夹名称的混合,但我的代码正在跳过*通配符搜索。我使用DIR命令进行搜索,因为它可以很好地处理文件夹/目录和文件。Windows For For with *令牌

SETLOCAL EnableDelayedExpansion 
SET VAR="c:\users\admin\documents\" "my files*" "*.MYO" "backups" "history.*" "History" "*.db" "all accounts.txt" 
SET "ArchiveInclude=" 
FOR %%a IN (%VAR%) DO (
IF "!a::!"=="!a!" (
    SET LookUpSet=DIR /ON /B /S "%%~a" 
    FOR /F "Delims=" %%F IN ('!LookUpSet!') DO (
    SET ArchiveInclude=!ArchiveInclude! "%%~F" 
) 
) ELSE (SET ArchiveInclude=!ArchiveInclude! "%%~a") 
) 

可惜ArchiveInclude不包括 “我的文件*” “.myo” 或 “历史。” 的搜索结果。 %%永远不会处理任何包含通配符*的字符串。

我需要ArchiveInclude到包括指定例如,所有的文件/文件夹的所有完整路径引用

ECHO !ArchiveInclude! 
"c:\users\admin\documents\" "c:\Users\User 3\my files here\" "c:\Users\User 1\Documents\my files01.txt" "c:\Users\User 1\Documents\my files02.txt" "c:\Users\User 1\Documents\my files01.jpg" "c:\Users\User 1\Documents\my files02.jpg" "c:\Users\User 2\Documents\My Account Files.MYO" "c:\Users\User 2\Documents\Business\Sales Accounts.MYO" "c:\Program Files\history.db" "c:\Program Files\history.txt" "c:\Users\User 1\Documents\History\" "c:\Users\User 1\Documents\Databases\afile.db" "c:\Users\User 1\Documents\Databases\data.db" "c:\Users\User 1\Documents\Databases\last.db" "c:\Users\User 2\Documents\all accounts.txt" 

回答

0

问题是这一行:

FOR %%a IN (%VAR%) DO (

你设定VAR为节省空间分隔的文件名列表,有些使用通配符。当您使用通配符时,FOR命令将在当前目录中搜索与通配符匹配的任何文件(请输入FOR/?以获得帮助。)这不是您想要的。你不希望FOR在这一点上搜索;你只是希望它遍历给定的字符串,而不管它们包含什么。

幸运的是,您甚至不必使用FOR,因为DIR命令可以接受多个参数。所以你可以完全摆脱FOR行,而不是这样做:

SET LookUpSet=DIR /ON /B /S %VAR% 
+0

这将适用于单个文件/文件夹名称+通配符。不过,我还需要一种方法来从DIR命令中排除已经指定的(完整路径)文件夹/文件,因为DIR将单独列出完整路径文件夹的所有内容(这不是必需的)。即VAR =“C:\ users \ admin \ documents \”“我的文件*”“.myo”“备份”“历史记录”。 “所有accounts.txt”。 DIR命令将列出“C:\ users \ admin \ documents \”中的所有内容,这不是必需的。对不起OP的缺乏清晰度,我现在更新了它。 – jkeys