Windows For Loop with * Token



我正在尝试使用特定(绝对完整路径)和*通配符文件/文件夹名称的组合来循环显示文件/文件夹内容,但我的代码跳过了*通配符搜索。我正在使用 DIR 命令进行搜索,因为它适用于文件夹/目录和文件。

SETLOCAL EnableDelayedExpansion
SET VAR="c:usersadmindocuments" "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"或"history"搜索结果。 %%a 永远不会处理任何包含通配符 * 的字符串。

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

ECHO !ArchiveInclude!
"c:usersadmindocuments" "c:UsersUser 3my files here" "c:UsersUser 1Documentsmy files01.txt" "c:UsersUser 1Documentsmy files02.txt" "c:UsersUser 1Documentsmy files01.jpg" "c:UsersUser 1Documentsmy files02.jpg" "c:UsersUser 2DocumentsMy Account Files.MYO" "c:UsersUser 2DocumentsBusinessSales Accounts.MYO" "c:Program Fileshistory.db" "c:Program Fileshistory.txt" "c:UsersUser 1DocumentsHistory" "c:UsersUser 1DocumentsDatabasesafile.db" "c:UsersUser 1DocumentsDatabasesdata.db" "c:UsersUser 1DocumentsDatabaseslast.db" "c:UsersUser 2Documentsall accounts.txt"

问题出在以下行上:

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

您已将 VAR 设置为以空格分隔的文件名列表,其中一些带有通配符。当您有通配符时,FOR 命令会在当前目录中搜索与通配符匹配的任何文件(键入 FOR/? 以获取帮助。那不是你想要的。您不希望FOR此时进行搜索;你只希望它迭代给定的字符串,而不管它们包含什么。

幸运的是,您甚至不必使用 FOR因为 DIR 命令可以采用多个参数。因此,您可以完全摆脱FOR行并执行此操作:

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

最新更新