Перебрать набор файлов в одной папке - PullRequest
3 голосов
/ 08 сентября 2011

У меня есть требование циклически перебирать определенные файлы в папке и объединять их в один файл, и я хочу, чтобы это было достигнуто с помощью командного файла. Мои файлы выглядят как показано ниже.

ILCY_NEW_20110908123008
ILCY_NEW_20110908123009
ILCY_NEW_20110908123010

означает, ILCY_NEW_<i>timestamp</i>. В папке будут и другие файлы, но мне нужны только те, которые имеют текущую метку времени. Поэтому я написал следующий код для циклического перебора всех файлов и объединения имен в переменную CL.

set tt=%yyyy%%mm%%dd%
for %%f in (ILCY_NEW_%tt%* . *) do set cl=%cl%+%%f 
set cl=%cl:~1%
echo %cl%
copy %cl% ILCY_NEW_CQ.csv

Но при этом выбирается только последний файл, и он копируется только в ILCY_NEW_CQ.csv, игнорируя все предыдущие файлы, даже если в названии есть метка времени сегодняшнего дня. Может ли кто-нибудь помочь мне здесь, пожалуйста?

Ответы [ 3 ]

1 голос
/ 08 сентября 2011

Команда копирования может обрабатывать символы подстановки самостоятельно:

set tt=%yyyy%%mm%%dd%    
copy ILCY_NEW_%tt%*.* ILCY_NEW_CQ.csv
1 голос
/ 08 сентября 2011

Я не могу заставить вашу логику дат работать на моей машине, но, предполагая, что ваш цикл for правильно получает правильные имена файлов, вы можете сделать что-то вроде этого:

set tt=%yyyy%%mm%%dd%
for %%f in (ILCY_NEW_%tt%*.*) do type "%%f" >> ILCY_NEW_CQ.csv

'>>' добавится к файлу (в отличие от '>', что перезапишет его). См. эту страницу для справки.

0 голосов
/ 08 сентября 2011

Если вам нужна отметка времени на сегодня автоматически, используйте этот маленький цикл for с командой копирования serg:

FOR /F "USEBACKQ tokens=2-4 delims=/ " %%A IN (`date /t`) DO (
 SET tt=%%C%%A%%B & copy /y "ILCY_NEW_%tt%*.*" "ILCY_NEW_CQ.csv"
)
...