2016-05-30 2 views
0

Я пытаюсь получить цикл для отображения содержимого файла/папки с использованием сочетания определенных (абсолютных полных патчей) и * подстановочных имен файлов/папок, но мой код пропускает * групповой символ поиск. Я использую команду DIR для поиска, так как она хорошо работает с папками/каталогами и файлами.Windows For Loop с * Token

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" или "истории." результаты поиска. %% a никогда не обрабатывает какую-либо строку, содержащую подстановочный знак *.

мне нужно 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 (

вы установили УАК в пространственноподобной разделенный список имен файлов, некоторые с подстановочными знаками. Когда у вас есть подстановочные знаки, команда FOR ищет текущий каталог для любых файлов, соответствующих шаблону (введите FOR/? для справки.) Это не то, что вы хотите. Вы не хотите, чтобы FOR выполнял поиск в этой точке; вы просто хотите, чтобы он перебирал строки, независимо от того, что они содержат.

К счастью, вам даже не нужно использовать FOR, потому что команда DIR может принимать несколько параметров. Таким образом, вы можете просто избавиться от FOR линии полностью и сделать это вместо того, чтобы:

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

Это будет хорошо работает для отдельных имен файлов/папок + специальные символы. Однако мне также нужен способ исключить уже заданные (полные патчи) папки/файлы из команды DIR, так как DIR будет перечислять все содержимое полностью патированной папки отдельно (что не требуется). т.е. VAR = "C: \ users \ admin \ documents \" "мои файлы *" ".myo" "backups" "history." msgstr "все accounts.txt". Команда DIR перечислит все содержимое «C: \ users \ admin \ documents \», что не требуется. Извините за отсутствие ясности в OP, я сейчас его обновил. – jkeys