Показать полную графическую версию : [решено] Создать батник с логом копирования и проверкой.
Требуется создать батник, который бы копровал из 3-х папок файлы в 1, записывая в текстовый файл имена скопированых файлов и при следующем запуске не копировал бы их. (папка переодически отчищается другой программой).
Заранее спасибо.
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
можно не txt с именами обновлять, а использовать предназначенный специально для этого атрибут файла "archive"
Почти то что нужно, только нужно чтобы не копировал уже ранее скопированные файлы. Чтобы проверял проверял в отчете report.txt копировался ли этот файл раньше, если да, то не копировать, если нет, то скопировать. Этот алгоритм если удалить из папки d:\fin уже скопированный файл, копирует его туда опять.
TupaH, я сам слабо разбираюсь во всем этом деле не знаю как сравнить переменную с каждой строчкой из файла, может другие товарищи подскажут... если нет, то смогу предложить то что и я смогу сделать, создать в папке fin директорию temp и создавать там файлы с именами скопированных и размером 0 байт и проверка будет такая:
если файл с таким именем есть в папке d:\fin\temp - есть то копирования не будет...
megaloman
15-01-2012, 22:42
@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%
)
)
Немного не понятно, не работает на WinServer 2003, не пишет лог файлов, сам файл создает, на XP все без проблем.
Один и тотже батник, в одной и тойже папке на ХР работает, на 2003 нет. Проблема не с доступом, если убираю условие приверки скопирован ли файл Set nfil=%%n
Set nFil=!nFil:~-2!
If !nFil!==1. »
, то лог пишется все время, был скопирован или нет Echo %%~nxf>>%LogFile% »
такчто трабл не в путях и не в доступе:(
и недо конца поны эти строчки, поясните плиз, особенно 2-я и 3-я
Set nfil=%%n
Set nFil=!nFil:~-2!
If !nFil!==1. »
megaloman
23-01-2012, 19:18
Я в недоумении: в 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 имеющийся батник
Понял проблему, Win2003 у меня инглиш версия и инфу о скопированных файлах он пишет по другому, количество не в конце строки, а в начале, бросаю оба файла, с ХР и 2003. Исправьте плиз, ото как раз эта строчка мне и не понятна, как она убирает текст и оставляет цифру.
megaloman
24-01-2012, 13:34
Проверить мне не на чем, у меня на Win2003 с MUI. Попробуйте заменить фрагмент батника Set nFil=!nFil:~0,1!
rem ------------------------------------------
Echo %%n !nFil! >>kuku
rem ------------------------------------------
If !nFil!==1 Echo %%~nxf>>%LogFile%
Set nFil=!nFil:~0,1! вырезает в начале строки символ. Подробнее читайте в помощи к Set, например, чтобы сохранить подсказку в файл, запустите из ком строки
Set /? >D:\_set_help
Если прокатит, удалите строки между rem в двух местах, где пишутся отлад печати и пользуйтесь на здоровье
А вообще-то теперь буду думать как сделать задачу по другому
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.