2016-02-11 1 views
0

Этот сценарий обеспечивает raccoozie работ, как описано:объединить несколько CSV, созданный на прошлой неделе

@echo off 
setlocal 
set first=1 
set fileName="combinedFiles.csv" 
>%fileName% (
    for %%F in (*.csv) do (
    if not "%%F"==%fileName% (
     if defined first (
     type "%%F" 
     set "first=" 
    ) else more +1 "%%F" 
    ) 
) 
) 

Теперь я хочу, чтобы добавить критерии выбрать только файлы, созданные за последние 7 дней.

Проблема заключается в том, что программа не создает 1 файл ежедневно, но может создавать 7, 5, 9 или 0 файлов в определенные дни.

С чего начать?

ответ

1

Чтобы слить последний созданный .csv:

@echo off 
setlocal enabledelayedexpansion 
set /a $c=1 
set "fileName=combinedFiles.csv" 

>"%filename%" (for /f "delims=" %%F in ('dir/b/a-d/od *.csv') do (
    if not "%%F"=="%fileName%" if !$c! LEQ 7 (
    type "%%F" 
    set /a $c+=1) 
)) 

EDIT: Чтобы объединить все .csv файлы, созданные за последние 7 дней и сортируются по дате

@Echo off 
::Get current Date -7 days with VBS 
echo wscript.echo DateAdd("d", -7, date(^)^) >GetDate.vbs 
for /f "delims=" %%a in ('cscript //nologo GetDate.vbs') do set "$Limit=%%a" 
for /f "tokens=1-3 delims=/" %%a in ('echo %$Limit%') do set /a $Limit=%%c%%b%%a 
Del GetDate.vbs 2>nul 

setlocal enabledelayedexpansion 

set "fileName=combinedFiles.csv" 

(for /f "delims=" %%a in ('dir/b/a-d/o-d "*.csv"') do (
    for /f "tokens=1-3* delims=/ " %%b in ('dir /TC "%%a" ^| find "/"') do set "$DateTest=%%d%%c%%b" 
    if not "%%F"=="%fileName%" if !$DateTest! GEQ %$Limit% type "%%a" 
) 
)>%fileName%" 

Дата преобразована 11/02/2016 пришло 20160211, чтобы иметь значение логического тестирования (Более поздняя дата всегда будет больше). Таким образом, мы можем протестировать все файлы сортировки (по dir /o-d) для значения, большего как $Limit.

Теперь у нас есть файлы, отсортированные по дате и не старше 7 дней.

+0

не работал, он удалил мой существующий файл csv, но не создал новый.Если я посмотрю на код, похоже, вы переходите в конкретный каталог. Предположим, я запустил файл '.bat' в каталоге, где находятся файлы. – davejal

+0

Извините, я забыл закрытие скобки и два теста двойной кавычки - он снова – SachaDee

+0

oke, теперь он работает, занимает 7 файлов, но берет первый созданный (по дате) Мне нужен последний созданный по дате. Если возможно, это может быть более 7 файлов, но взять файлы, созданные за последние 7 дней. уже +1 для решения – davejal

0
SET "filename1=alreadydone.txt" 
IF NOT EXIST "%filename1%" ECHO x:>>"%filename1%" 
FOR /f "delims=" %%a IN (
'dir /b /a-d /o:d "*.csv" ^|findstr /x /v /g:"%filename1%' 
) DO (
rem do your combine-file [%%a] here 
ECHO %%a>>"%filename1%" 
) 

Эта часть-рутина (генерации %%a вместо %%F, потому что это то, что делает мой шаблон) принимает список каталогов и исключает файлы в filename1. Остальные файлы доставляются в раздел комбайнового файла кода, который вы уже создали, и имя файла записывается в filename1.

Строка if not exist создает фиктивную запись в filename1, так что findstr не жалуется, что файл пуст.

С этой схемой, как только любой файл был обработан, его имя сохраняется в filename1, и оно не будет повторно обрабатываться. Комбинированный код будет комбинироваться только с новыми файлами.

Результат: Нет якоря около «7» или любого другого количества дней. Если вы запустите его на 7 дней, эти 7 дней обработки будут объединены и записаны. Если вы сделаете это в 5 дней в ожидании праздничного дня, он будет сочетать эти 5 дней. Если вы отправитесь в отпуск на 2 недели, то, поскольку никто не будет следовать вашей инструкции, чтобы запустить его, он будет сочетать последние 14 дней. Или вы могли бы запустить его каждый день ...


Так вот объединенная партия

@echo off 
setlocal 
set first=1 
set fileName="combinedFiles.csv" 
SET "filename1=alreadydone.txt" 
IF NOT EXIST "%filename1%" ECHO x:>>"%filename1%" 
>%fileName% (
for /f %%F in ('dir /b /a-d /o:d "*.csv" ^|findstr /x /v /g:"%filename1%"' 
) do (
ECHO %%F>>"%filename1%" 
    if not "%%F"==%fileName% (
     if defined first (
     type "%%F" 
     set "first=" 
    ) else more +1 "%%F" 
    ) 
) 
) 

[Edit:] удален sourcedir в for/f, поскольку не требуется никакого каталога-спецификация (файлы находятся в текущем каталоге)

[Дальнейшее редактирование:] добавьте /f в for и добавьте отсутствующие уши закрывающего кролика.

+0

Мне нравится объяснение, но это не создает объединенный файл – davejal

+0

У меня возникла следующая ошибка: «Система не может найти указанный файл». Если я раскомментирую эхо и запустил его в командной строке – davejal

+0

в уже сделанном файле, я получаю следующий х: 'реж /б/ объявления /о: d | Findstr /х /v /g:"alreadydone.txt' «реж /б /объявление /о: d | findstr /x /v /g:"alreadydone.txt ''реж /б /а-г /о: д | Findstr /х /об /g:"alreadydone.txt' – davejal