Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Создать батник с логом копирования и проверкой.

Ответить
Настройки темы
CMD/BAT - [решено] Создать батник с логом копирования и проверкой.

Новый участник


Сообщения: 7
Благодарности: 1

Профиль | Отправить PM | Цитировать


Изменения
Автор: TupaH
Дата: 18-01-2012
Требуется создать батник, который бы копровал из 3-х папок файлы в 1, записывая в текстовый файл имена скопированых файлов и при следующем запуске не копировал бы их. (папка переодически отчищается другой программой).
Заранее спасибо.

Отправлено: 11:41, 13-01-2012

 

Аватара для zion87

Старожил


Сообщения: 263
Благодарности: 69

Профиль | Отправить PM | Цитировать


TupaH, можно попробовать вот так(копирует файлы *.ini из каталогов d:\1, d:\2, d:\3 в каталог d:\fin так же ведется отчет о скопированных файлах в report.txt)
Код: Выделить весь код
@echo off
set put1=d:\1
set put2=d:\2
set put3=d:\3
set finP=d:\fin
set report=d:\report.txt
for /f %%a in (' dir /b %put1%\*.ini ') do if not exist %finP%\%%a echo %%a>>%report% && (
  echo n|copy /-y %put1%\%%a %finP%\
)
for /f %%b in (' dir /b %put2%\*.ini ') do if not exist %finP%\%%b echo %%b>>%report% && (
  echo n|copy /-y %put2%\%%b %finP%\
)
for /f %%c in (' dir /b %put3%\*.ini ') do if not exist %finP%\%%c echo %%c>>%report% && (
  echo n|copy /-y %put3%\%%c %finP%\
)
goto:eof

Последний раз редактировалось zion87, 13-01-2012 в 21:55.


Отправлено: 20:09, 13-01-2012 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Сообщения: 3806
Благодарности: 824

Профиль | Отправить PM | Цитировать


можно не txt с именами обновлять, а использовать предназначенный специально для этого атрибут файла "archive"

Отправлено: 23:36, 13-01-2012 | #3


Новый участник


Сообщения: 7
Благодарности: 1

Профиль | Отправить PM | Цитировать


Почти то что нужно, только нужно чтобы не копировал уже ранее скопированные файлы. Чтобы проверял проверял в отчете report.txt копировался ли этот файл раньше, если да, то не копировать, если нет, то скопировать. Этот алгоритм если удалить из папки d:\fin уже скопированный файл, копирует его туда опять.

Отправлено: 15:07, 15-01-2012 | #4


Аватара для zion87

Старожил


Сообщения: 263
Благодарности: 69

Профиль | Отправить PM | Цитировать


TupaH, я сам слабо разбираюсь во всем этом деле не знаю как сравнить переменную с каждой строчкой из файла, может другие товарищи подскажут... если нет, то смогу предложить то что и я смогу сделать, создать в папке fin директорию temp и создавать там файлы с именами скопированных и размером 0 байт и проверка будет такая:
если файл с таким именем есть в папке d:\fin\temp - есть то копирования не будет...

Отправлено: 18:05, 15-01-2012 | #5


Ветеран


Contributor


Сообщения: 2728
Благодарности: 1697

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
@Echo Off

SETLOCAL ENABLEEXTENSIONS
SETLOCAL ENABLEDELAYEDEXPANSION

Set From="E:\DelTmp\Dir 1" "E:\DelTmp\Dir 2" "E:\DelTmp\Dir 3" 
Set To=E:\DelTmp\Dir 4 

Set LogFile=E:\DelTmp\Log.txt
If Not Exist %LogFile% cd / >%LogFile%

FOR %%d IN (%From%) DO For %%f In ("%%~d\*.*") Do (
   FOR /F "usebackq delims=" %%n IN (`xcopy "%%f" "%To%\" /EXCLUDE:%LogFile% /Q`) DO (
      Set nfil=%%n
      Set nFil=!nFil:~-2!
      If !nFil!==1. Echo %%~nxf>>%LogFile%
   )
)

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 15-01-2012 в 23:47.

Это сообщение посчитали полезным следующие участники:

Отправлено: 22:42, 15-01-2012 | #6


Новый участник


Сообщения: 7
Благодарности: 1

Профиль | Отправить PM | Цитировать


Спасибо, то что нужно!!

Отправлено: 12:45, 18-01-2012 | #7


Новый участник


Сообщения: 7
Благодарности: 1

Профиль | Отправить PM | Цитировать


Немного не понятно, не работает на WinServer 2003, не пишет лог файлов, сам файл создает, на XP все без проблем.

Отправлено: 13:49, 23-01-2012 | #8


Новый участник


Сообщения: 7
Благодарности: 1

Профиль | Отправить PM | Цитировать


Один и тотже батник, в одной и тойже папке на ХР работает, на 2003 нет. Проблема не с доступом, если убираю условие приверки скопирован ли файл
Цитата megaloman:
Set nfil=%%n
Set nFil=!nFil:~-2!
If !nFil!==1. »
, то лог пишется все время, был скопирован или нет
Цитата megaloman:
Echo %%~nxf>>%LogFile% »
такчто трабл не в путях и не в доступе
и недо конца поны эти строчки, поясните плиз, особенно 2-я и 3-я
Цитата megaloman:
Set nfil=%%n
Set nFil=!nFil:~-2!
If !nFil!==1. »

Отправлено: 15:41, 23-01-2012 | #9


Ветеран


Contributor


Сообщения: 2728
Благодарности: 1697

Профиль | Отправить PM | Цитировать


Вложения
Тип файла: rar DelTmp.rar
(2.2 Kb, 6 просмотров)

Я в недоумении: в Win2003 R2 Enterprise всё чудненько работает. Вот немного изменённый батник
Код: Выделить весь код
@Echo Off

SETLOCAL ENABLEEXTENSIONS
SETLOCAL ENABLEDELAYEDEXPANSION

Set From="D:\DelTmp\Dir 1" "D:\DelTmp\Dir 2" "D:\DelTmp\Dir 3"
Set To=D:\DelTmp\Dir 4

Set LogFile=D:\DelTmp\Log.txt
If Not Exist %LogFile% cd "%~dp0" >%LogFile%

rem ------------------------------------------
Echo "%From%">kuku
Echo "%To%">>kuku
Echo "%LogFile%">>kuku
rem ------------------------------------------

FOR %%d IN (%From%) DO For %%f In ( "%%~d\*.*" ) Do (
   FOR /F "usebackq delims=" %%n IN (`xcopy "%%f" "%To%\" /EXCLUDE:%LogFile% /Q /Y`) DO (
      Set nfil=%%n
      Set nFil=!nFil:~-2!
rem ------------------------------------------
Echo %%n  !nFil! >>kuku
rem ------------------------------------------
      If !nFil!==1. Echo %%~nxf>>%LogFile%
   )
)
чуть изменил первый If и добавил для надёжности ключ в Xcopy. Плюс наставил отладочный вывод в файл куку который образуется рядом с батником. Я бы хотел увидеть его содержимое.
Для отладки посылаю Вам свою упакованную папку с примером - распакуйте в корень D: с поддиректориями и выполните внутри папки DelTmp имеющийся батник

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 23-01-2012 в 19:25.


Отправлено: 19:18, 23-01-2012 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Создать батник с логом копирования и проверкой.

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] помагите написать батник для копирования папки robingut Скриптовые языки администрирования Windows 23 04-05-2016 11:22
CMD/BAT - [решено] Батник для поиска и копирования streamrider Скриптовые языки администрирования Windows 10 25-08-2010 20:00
CMD/BAT - [Решено] Написать батник для копирования одного файла во многие папки рекурсивно. Iodine Скриптовые языки администрирования Windows 5 20-05-2010 22:31
CMD/BAT - [решено] батник для копирования файлов из ряда поддиректорий xumuk032 Скриптовые языки администрирования Windows 3 27-04-2010 21:23
CMD/BAT - помогите сделать батник копирования папки siz Скриптовые языки администрирования Windows 7 08-10-2009 11:45




 
Переход