1 (изменено: GRAF, 2013-07-30 06:45:47)

Тема: CMD/BAT: Копирование последних файлов и удаление их в последствие

Вопрос в следующем есть 2 диска C и D на C 1.5к файлов и в день может добавляться до 20 штук нужен батник который будет сканировать на наличие новых файлов в течение всего дня скидывать его на D и в последствии после загрузки  его удалять время генерации файлов неизвестно оно произвольное также как и имя файла.

рассматривал 2 варианта
1)  будет 3 диска C,D,F С и F будут идентичны и при сканирование и нахождение новых файлов на С этот файл помимо копирование на F будет скинут на D и удалён с задержкой в 60 сек.
2) 2 диска С,D копирование будет осуществляться по времени вот тут и возникает вопрос как сделать копирование не по дате то есть копируются файлы за весь день  а по минутное а лучше по секундной например батник будет активироваться каждые 20 секунд в соответствии с этим он должен копировать все файлы которые были сгенерированы от текущего времени на 20 секунд назад и не больше.
из всего что я пака надумал есть тока
set s=С:\*.XLS
set d=D:\
mkdir "%С%" > nul 2>&1
xcopy  /d:%date:~3,2%-%date:~0,2%-%date:~-4% "%s%" "%d%" /С

2

Re: CMD/BAT: Копирование последних файлов и удаление их в последствие

батник будет активироваться каждые 20 секунд

А вы уверены что он за 20 секунд отработать успеет? 1.5к файлов это не так уж мало, при нескольких уровнях вложенности, как раз около полминуты-минуты будет строиться только список файлов. И не забывайте - при таком использовании возможен быстрый выход из строя HDD. Может стоит как-то переработать требования?

3 (изменено: GRAF, 2013-07-30 09:09:17)

Re: CMD/BAT: Копирование последних файлов и удаление их в последствие

UNDYING пишет:

батник будет активироваться каждые 20 секунд

А вы уверены что он за 20 секунд отработать успеет? 1.5к файлов это не так уж мало, при нескольких уровнях вложенности, как раз около полминуты-минуты будет строиться только список файлов. И не забывайте - при таком использовании возможен быстрый выход из строя HDD. Может стоит как-то переработать требования?


да собственно это тока при первой обработки будет подгружено 1.5к патом та должны обрабатываться токо те которых нету короче вот что вышла
@echo off
set "first=W:\"
set "a=D:\qwe"
set "b=D:\qwer"
for %%i in (*.P1) do if not exist "%b%\%%i" copy "%%i" "%a%\%%i"
for %%i in (*.P1) do if not exist "%b%\%%i" copy "%%i" "%b%\%%i"
exit
нужна тока зациклит на обработке эта по 1 варианту

объясняю цель. У нас проходит ""объект"" через завод скорость поступления каждого объекта гдето 1 в 10-20 сек, пакет генерируется на входе и нужна чтобы на выходе данные были уже в 1с загружены подгружать можно туда по 1 файлу так как фартам файла .bin перекодирован в .P1 поставщиком оборудования

4

Re: CMD/BAT: Копирование последних файлов и удаление их в последствие

GRAF, пишите предложения с заглавной буквы и используйте знаки препинания.

5 (изменено: alexii, 2013-08-21 09:09:38)

Re: CMD/BAT: Копирование последних файлов и удаление их в последствие

Доброго времени суток возникла проблема с работой батника

@echo off
:loop
set "first=D:\q"
set "a=D:\qwe"
set "b=D:\qwer"
for %%i in (*.P1) do if not exist "%b%\%%i" copy "%%i" "%a%\%%i"
for %%i in (*.P1) do if not exist "%b%\%%i" copy "%%i" "%b%\%%i"
goto loop
exit

Проблема в следующем, когда появляется файл в каталоге D:\q  то он в 100% уходит в D:\qwer и из 10 файлов где то 1-2 файла бывает не падает в каталог D:\qwe если удалить его в D:\qwer то он скидывается в обе папки через несколько секунд в чём может быть проблема.
При едином запуски всё в порядке.
При запуски на обработку батника возникала данная ошибка

6

Re: CMD/BAT: Копирование последних файлов и удаление их в последствие

GRAF пишет:

... в чём может быть проблема.

Видимо в том, что проверка на существование файла производится не совсем корректно:

set "a=D:\qwe"
set "b=D:\qwer"

for %%i in (*.P1) do if not exist "%b%\%%i" copy "%%i" "%a%\%%i"
for %%i in (*.P1) do if not exist "%b%\%%i" copy "%%i" "%b%\%%i"

Попытайтесь словами описать действия скрипта:
если файла C:\1.txt нет в корне диска E:\ то копирую C:\1.txt в D:\1.txt
если файла C:\1.txt нет в корне диска E:\ то копирую C:\1.txt в E:\1.txt

По существу есть вопросы:
1. Папка D:\qwe полностью соответствует по содержимому папке D:\qwer?
2. В папку D:\q только добавляются файлы?

Т.е. в конце работы скрипта содержимое всех 3-х папок одинаково? Или нет?

7 (изменено: GRAF, 2013-08-21 06:23:44)

Re: CMD/BAT: Копирование последних файлов и удаление их в последствие

Суть скрипта была в следующем есть 1 папка (D:\q) условна" в ней группа файлов в количестве 1.5 тысяч
её нужно зеркалом вынести в (D:\qwer) причём в случаи удаления файлов в D:\qwer они должны авто восстановиться.
А в D:\qwe должен скинуться самый свежей файл, который в свою очередь будет удалён в дальнейшем.
И того в папке  (D:\qwe) должен быть всегда тока самые свежие файлы, а D:\qwer должно быть зеркалом для сравнения.

так понятней))

8

Re: CMD/BAT: Копирование последних файлов и удаление их в последствие

GRAF пишет:

Суть скреп та была в следующем есть 1 папка (D:\q) "условна" в ней группа файлов в кол во где то около 1.5 к
её нужна зеркалом вынести в (D:\qwer) причём в случаи удаления файлов в D:\qwer они должны авто восстановиться.
А в D:\qwe должен скинуться самый свежей файл который в свою очередь будет удалён в дальнейшем.

И того в папке  D:\qwe должен быть всегда тока самые свежие файлы и в случае их удаления не должны восстанавливаться из D:\q, а D:\qwer должно быть зеркалом для сравнения. Может есть приложения по другому написать данное действия.

Проста у меня идей уже нет))

Пожалуйста, исправьте грамматические и пунктуационные ошибки - я ничерта не понял.

9 (изменено: GRAF, 2013-08-21 06:11:52)

Re: CMD/BAT: Копирование последних файлов и удаление их в последствие

Я так понял проста батник зависает на строчки
for %%i in (*.P1) do if not exist "%b%\%%i" copy "%%i" "%b%\%%i",
а можно как то сделать приоритет выполнения то есть если
for %%i in (*.P1) do if not exist "%b%\%%i" copy "%%i" "%a%\%%i"  выполнено то тока тогда делает
for %%i in (*.P1) do if not exist "%b%\%%i" copy "%%i" "%b%\%%i"

10

Re: CMD/BAT: Копирование последних файлов и удаление их в последствие

GRAF пишет:

так понятней))

Не особо, но нужные моменты, я, надеюсь, понял


@echo off
:loop
set "first=D:\q"
set "second=D:\qwe"
set "third=D:\qwer"
for /f "tokens=4*" %a in ('robocopy %first% %third% *.p1 /mir /np ^| find /i "new file"') do (copy /y %first%\%a %second%\)
goto loop
exit

Если возникнут проблемы с пробелами в именах, то поизучайте справку к for, конкретно данный момент:

for /f "tokens=4*" ...

И ещё -  robocopy нет в Windows XP и 2003 по умолчанию.

11 (изменено: GRAF, 2013-08-21 07:10:06)

Re: CMD/BAT: Копирование последних файлов и удаление их в последствие

Момент я чёт не догоню смотрите
во первых
не понял с for /f "tokens=4*"  но переменные действуют тока через %%а
во вторых
('robocopy %first% %third% *.p1 /mir /np ^| find /i "new file"') эта я так понял синхронизация D:\q и D:\qwer
через (robocopy) но эти два каталога у меня и так идеальна проходили.
а вот с (copy /y %first%\%a %second%\) я чёт не понял можно подробней. Это копирования с параметром /y из D:\q в D:\qwe переменной %а?
или я ошибаюсь 
так и функция for /f "tokens=4*" должна каким то образом регулировать копирование так?

Можно объяснить на пальцах я проста не разу не сталкивался с токином.

12 (изменено: GRAF, 2013-08-21 07:25:19)

Re: CMD/BAT: Копирование последних файлов и удаление их в последствие

Можно ли сделать из строки
for /f "tokens=4*" %%a in ('robocopy %first% %third% *.p1 /mir /np ^| find /i "new file"') do (copy /y %first%\%%a %second%\)
копирование в D:\qwe тока однократный?

13 (изменено: alexii, 2013-08-21 09:10:42)

Re: CMD/BAT: Копирование последних файлов и удаление их в последствие

Сделаем проще скажите как сделать проста зависимость батников например
если он сделан

@echo off
:loop
set first=D:\q
set a=D:\qwe
set b=D:\qwer
for %%i in (*.P1) do if not exist "%b%\%%i" copy "%%i" "%a%\%%i"
goto loop
exit

то тогда тока

@echo off
:loop
set "first=D:\q"
set "second=D:\qwe"
set "third=D:\qwer"
for /f "tokens=4*" %%a in ('robocopy %first% %third% *.p1 /mir /np ^| find /i "new file"') do (copy /y %first%\%%a %second%\)
goto loop
exit

будет сделан
и по кругу

14

Re: CMD/BAT: Копирование последних файлов и удаление их в последствие

не понял с for /f "tokens=4*"  но переменные действуют тока через %%а

Так исправьте на %%a.

но эти два каталога у меня и так идеальна проходили.

robocopy в данном случае указывает т.н. "новые" файлы.

Можно объяснить на пальцах я проста не разу не сталкивался с токином.

robocopy при "зеркалировании" директории выдаст в консоль:


E:\tmp>robocopy 1 2 *.p1 /mir /np

------------------------------------------------------------------------------
   ROBOCOPY     ::     Robust File Copy for Windows     ::     Version XP010
------------------------------------------------------------------------------

  Started : Wed Aug 21 07:17:35 2013

   Source : E:\tmp\1\
     Dest : E:\tmp\2\

    Files : *.p1

  Options : /S /E /COPY:DAT /PURGE /MIR /NP /R:1000000 /W:30

------------------------------------------------------------------------------

                          10    E:\tmp\1\
            New File                   2        1.p1
            New File                   2        10.p1
            New File                   2        2.p1
            New File                   2        3.p1
            New File                   2        4.p1
            New File                   2        5.p1
            New File                   2        6.p1
            New File                   2        7.p1
            New File                   2        8.p1
            New File                   2        9.p1

------------------------------------------------------------------------------

                Total    Copied   Skipped  Mismatch    FAILED    Extras
     Dirs :         1         0         1         0         0         0
    Files :        10        10         0         0         0         0
    Bytes :        20        20         0         0         0         0
    Times :   0:00:00   0:00:00                       0:00:00   0:00:00

    Speed :                 645 Bytes/sec.
    Speed :               0.036 MegaBytes/min.

    Ended : Wed Aug 21 07:17:35 2013

find /i "new file" 

Сократит изначальный вывод robocopy до:


            New File                   2        1.p1
            New File                   2        10.p1
            New File                   2        2.p1
            New File                   2        3.p1
            New File                   2        4.p1
            New File                   2        5.p1
            New File                   2        6.p1
            New File                   2        7.p1
            New File                   2        8.p1
            New File                   2        9.p1

Который и будет обрабатываться в цикле.

Токен (лексический анализ) — последовательности символов в лексическом анализе в информатике, соответствующий лексеме.
При указании опции "tokens=..." мы указываем какие лексемы (слова или подстроки) будут ипользоваться нами. Стандартный разделитель - знаки пробела или табуляции.
Т.о. "tokens=4*" говорит то, что мы используем 4-ю (цифра 4 в "tokens=4*") и все оставшиеся в строке символы (*, астериск в "tokens=4*") в качестве содержимого переменной %%a.
Из строки:


            New File                   2        9.p1

В переменную %%a попадёт:


9.p1

Подробнее вбивайте for /? в консоли и медитируйте.

Сделаем проще скажите как сделать проста зависимость батников например

Что такое зависимость? Что вы понимаете под зависимостью?

копирование в D:\qwe тока однократный?

Всмысле однократный? - копируются всё, чего в конечной папки нет.

15 (изменено: alexii, 2013-08-21 09:11:07)

Re: CMD/BAT: Копирование последних файлов и удаление их в последствие

Всё сделал проще

@echo off
:loop
ping -n 1 -w 10000 192.168.254.254 >nul
set first=D:\q
set a=D:\qwe
set b=D:\qwer
for %%i in (*.P1) do if not exist "%b%\%%i" copy "%%i" "%a%\%%i"
for %%i in (*.P1) do if not exist "%b%\%%i" copy "%%i" "%b%\%%i"
goto loop

)) всё робит

16

Re: CMD/BAT: Копирование последних файлов и удаление их в последствие

GRAF, пора научиться пользоваться тэгом «code».

17

Re: CMD/BAT: Копирование последних файлов и удаление их в последствие

Под зависимостью понимал выполнения 2 батников пример

1.bat

@echo off
set first=D:\q
set a=D:\qwe
set b=D:\qwer
for %%i in (*.P1) do if not exist "%b%\%%i" copy "%%i" "%a%\%%i"

2.bat

@echo off
set first=D:\q
set a=D:\qwe
set b=D:\qwer
for %%i in (*.P1) do if not exist "%b%\%%i" copy "%%i" "%b%\%%i"

и они выполняются последовательно

18

Re: CMD/BAT: Копирование последних файлов и удаление их в последствие

GRAF, повторяю ещё один раз: научитесь пользоваться тэгом «code». Жду исправления в оформлении Вашего последнего поста.

19

Re: CMD/BAT: Копирование последних файлов и удаление их в последствие

Гляньте может кто ошибки найдёт
@echo off
:loop
ping -n 1 -w 15000 192.168.254.254 >nul
set first=D:\q
set a=D:\qwe
set b=D:\qwer
for %%i in (*.P1) do if not exist "%b%\%%i" copy "%%i" "%a%\%%i"
for %%i in (*.P2) do if not exist "%b%\%%i" copy "%%i" "%a%\%%i"
:test
if exist D:\qwe\*.P1 goto go
if exist D:\qwe\*.P2 goto go
goto test
:go
ping -n 1 -w 1000 192.168.254.254 >nul
for %%i in (*.P1) do if not exist "%b%\%%i" copy "%%i" "%b%\%%i"
for %%i in (*.P2) do if not exist "%b%\%%i" copy "%%i" "%b%\%%i"
goto loop

20

Re: CMD/BAT: Копирование последних файлов и удаление их в последствие

Коллега GRAF на три дня отправляется на изучение Правил форума и оформления кода тэгом «code».