Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Автосоздание папок и копирование в них с других ПК из лок.сети (http://forum.oszone.net/showthread.php?t=146661)

Nuritdin 30-07-2009 16:24 1181609

Автосоздание папок и копирование в них с других ПК из лок.сети
 
Здравствуйте!
В локалке есть ПК, на одном из разделов HDD которого находится папка Backup, куда каждый ВРУЧНУЮ копируются различные файлы за пред. день или текущие с разных ПК из локалки. Затем делается резервное копирование на стриммер. В папке Backup уже есть подпапки, имена которых совпадают с именами ПК-в с которых копируются файлы, например: PC1, PC2 и т.д. В каждой такой папке ВРУЧНУЮ делается папка с именем совпадающим с текущей датой создания оной, куда и купируютс вышеупомянутые файлы.
Как сделать так, чтобы каждый день, скажем утром, эти папки (совпадающие с текущей датой) создавались автоматом и в них копировались с соотв-х ПК соотв-е файлы.

amel27 30-07-2009 17:19 1181649

Nuritdin, про "соотв-х ПК" понятно - список имен ПК по-видимому совпадает со списком подкаталогов папки Backup, а откуда брать "соотв-е файлы"?.. этот список файлов, подлежащих копированию, у каждого ПК свой или один на всех?.. как он называется, где лежит и хорошо-бы пример содержимого в несколько строк. Какой формат даты применяется для именования подпапок?.. "ДД-ММ-ГГГГ" или какой другой?.. Наконец, где лежит сама папка Backup - для конкретики желательно указывать полный путь.

Nuritdin 30-07-2009 18:26 1181714

amel27, спасибо!
Пусть ПК на который собираются файлы с других ПК называется Mif-s. Локальный путь к папке Backup на Mif-s это E:\Backup, сетевой путь это - \\Mif-s\E$\Backup. В этой папке Backup есть подпапки Backup_PC1, Backup_PC2 и т.д., в которых должны создаваться подпапки с форматом текущей даты ДДММГГГГ.
У каждого PC1, PC2 и т.д. свои уникальные файлы, подлежащих копированию в свои соответствующие папки на Mif-s. Например, в папку E:\Backup\Backup_PC1\30072009(текущая дата) должны скопироваться 2 файла с компа PC1, находящиеся в \\PC1\C$\Folder1\file1.txt и \\PC1\C$\Folder1\file2.txt. А в папку E:\Backup\Backup_PC2\30072009 должны скопироваться 15 файлов с компа PC2, находящиеся в \\PC2\D$\Folder\file1.txt-file15.txt (15 штук). И т.д... Наконец с PC_N должны скопироваться другое кол-во файлов в E:\Backup\Backup_PC_N\30072009\files.txt.

Я написал элементарный батик для копирования всех файлов c PC1 на Mif-s, положил его в планировщик Scheduled Tasks на Mif-s, и он работает, вот он:
copy \\PC1\D$\Shared\data\Database\Fo_data\BACKUP\*.* F:\backup\backup_fo\1_2009\fo_backup

Мне же нужно чтобы копируемые данные с ПК на Mif-s сохранялись каждый день в новой папке с назв. текущей даты...

NiOl 30-07-2009 19:50 1181779

1. Использовать служебные шары типа "C$" не красиво, но может в данном случае разумно - 99% пользователей не смогут отключить шару.
2. Формат даты ДДММГГГГ хорош только когда таких каталогов не больше десятка-другого. В остальных случаях гораздо удобнее использовать дату в формате YYYYMMDD. Как-нибудь попробуйте и убедитесь в этом (в батнике генерация даты в этом формате имеется, надо только ее включить взамен Вашего варианта)
3. В списке копируемых ресурсов каталоги не должны заканчиваться символом "\", иначе ошибка гарантирована (но можно добавить операцию проверки)
4. Любой бэкап должен вести лог-файл. Подредактируйте его внешний вид под себя.

Код:

@echo off
SetLocal EnableDelayedExpansion

rem Дата в формате YYYY-MM-DD для региона "Россия"
rem set D=%date:~6,4%-%date:~3,2%-%date:~0,2%

rem Дата в формате DDMMYYYY для региона "Россия"
set D=%date:.=%

rem Размещение и имя файла со списком копируемых данных
set List=C:\BackUp.lst

rem Для каталога Бэкапа нужно указать абсолютный путь
set BackUp=E:\BackUp\

rem Префикс для названия папок компьютеров, дописывается перед именем компа
set Pref=Backup_

set Log=%~dpn0.log

echo.>>%Log%
echo %date% %time% ==== Запуск процедуры копирования ====>>%Log%
if not Exist %List% (
echo Отредактируйте список с путями копируемых данных в файле %List%
echo # Это коментарий>%List%
echo.>>%List%
echo # А это сетевый пути для бэкапа:>>%List%
echo \\PC1\C$\Folder1>>%List%
echo \\PC2\D$\Folder\file*.txt>>%List%
echo Список для копирования пуст, создан пример, см: %List%>>%Log%
echo.>>%Log%
exit
)

rem переход на диск с бэкапом
%BackUp:~0,2%
echo %CD%>>%Log%

for /F "usebackq eol=# tokens=1* delims=\" %%P in ("%List%") do (
cd %BackUp%
if not exist %Pref%%%P md %Pref%%%P
cd %Pref%%%P
if not exist %D% md %D%
cd %D%
md %%Q
cd %%Q
title Копирование \\%%P\%%Q
set Txt=!date! !time! Копирование \\%%P\%%Q
rem Если подкаталоги копировать не надо, то убираем ключ "/S".
xcopy \\%%P\%%Q /C /Q /G /H /K /Y /O /S
set Err=!ErrorLevel!
if !Err!==0 (set Txt=!Txt! прошло успешно) else (set Txt=!Txt! закончилось с ошибкой N!Err!)
echo !Txt!>>%Log%
)

ЗЫ: В скрипте включена опция "EnableDelayedExpansion" - из-за этого использование символов "!" в путях ЗАПРЕЩЕНО!


Время: 19:07.

Время: 19:07.
© OSzone.net 2001-