Компьютерный форум 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=180460)

Trinux 13-07-2010 09:43 1452309

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

Вот скрипт, который работает сейчас.

@echo off
set bkroot=\\192.168.0.199\bk
D:
cd D:\SQL_BACKUP
for /d %%i in (*) do (
cd %%i
call :vmove %%i
cd ..
)

goto :eof

:vmove
set bkdir=%bkroot%\sql\%1
md %bkdir% 2>nul
for %%F in (*) do (
xcopy /Y %%F %bkdir% && del %%F
)

NiOl 13-07-2010 14:49 1452512

1. Поменяйте местами "D:" и "cd D:\SQL_BACKUP" - если текущим для диска D: окажется уже не существующий каталог, то перехода в нужный каталог может не произойти, поэтому сначала назначается каталог, а затем осуществляется переход на диск (в свежих версиях винды переход произойдет еще при смене каталога)
2. Уточните, плиз, что Вы подразумеваете под "добавлением"? Ваша команда xcopy должна именно заменять уже имеющиеся файлы! :dont-know
* Если речь идет о том, чтобы файлы в бэкапе, скопированные ранее и уже несуществующие в исходнике также удалялись, то вполне достаточно (имхо) перед "md %bkdir% 2>nul" добавить удаление этого самого каталога: rd /s /q %bkdir% 2>nul

Iska 14-07-2010 20:11 1453378

Цитата:

Цитата NiOl
в свежих версиях винды переход произойдет еще при смене каталога »

Начиная с каких версий ОС появилось такое поведение?

NiOl 16-07-2010 00:39 1454204

Iska, точно сказать не могу, еще с w98 приучил себя в батниках сначала менять путь, а потом уже переходить на диск, а тут случайно обнаружил (уже на XP SP2), что при выполнении "CD Disk:\Path" сменился текущий диск.

El Scorpio 16-07-2010 06:05 1454263

Цитата:

Цитата Trinux
Подскажите как батником скопировать папку по сети, но не добавлять, а заменять. »

xcopy ЧТО КУДА /I /E /Y /U /D /H /C
- копировать в папку
- копировать файлы из подкаталогов
- перезаписывать файлы
- копировать только файлы, уже существующие в конечной папке (оно?)
- копировать только новые файлы
- копировать скрытые/системные файлы
- продолжать копирование при ошибках

El Sanchez 17-07-2010 11:02 1454896


Цитата:

Цитата NiOl
Iska, точно сказать не могу, еще с w98 приучил себя в батниках сначала менять путь, а потом уже переходить на диск, а тут случайно обнаружил (уже на XP SP2), что при выполнении "CD Disk:\Path" сменился текущий диск. »

NiOl, для одновременной смены диска и каталога еще с WinNT для команды CD придуман параметр /D. :secret:

El Scorpio, еще бы ключ /Z добавить - специально для сети. :)

kyle21 21-07-2010 10:04 1457353

нужно скопировать папку через сеть на другую машину, дайте плиз исходник.

El Scorpio 23-07-2010 01:05 1458866

kyle21, скопировать папку по сети можно двумя способами
1. Просто указать UNC-путь - xcopy ЧТО \\ИМЯ_КОМПЬЮТЕРА\КУДА ПАРАМЕТРЫ
2. Примонтировать сетевую папку, как сетевой диск командами subst или net use, скопировать файлы и отмонтировать сетевой диск

Код:

subst \\NAME\Folder z:
xcopy ЧТО КУДА
subst z: /d


NiOl 23-07-2010 18:50 1459364

Если копируем с локального диска на сетевую шару, то можно воспользоваться такой вкусностей, как PushD/PopD - тем более, что сохранненные ею пути стеккируются:
Код:

@Echo off
set Src=<адрес Откуда>
set Dst=<адрес Куда>

Pushd %Src%
set Src=%CD%
Push %Dst%
xcopy %Src% /I /E /Y /U /D /H /C /Z
Popd
Popd

А если копируете с сервера на сервер и много, то такой вариант плох:
1. Вы качаете по сети (возможно даже по перегруженной сети) данные к себе, а затем от себя
2. Серваки частенько соединены между собой более шустрым свичем, а то и имеют дополнительную, отдельную сеть (для скорости) - уточните у Вашего админа.
Поэтому удобнее копировать по сети ТОЛЬКО ОДИН раз: сразу с сервера на сервер, минуя Ваш комп.
для этого надо:
1. Соответствующие права на серваках
2. Скачать с сайта "мелкомягких" PSExec из набора PSTools.
Этот же батник запускаете удаленно с любого из серверов: psExec \\Server -u Admin -p Password -c -v MyBatchFile.bat MyBatchFile.bat


Время: 18:42.

Время: 18:42.
© OSzone.net 2001-