Войти

Показать полную графическую версию : помогите правильно составить bat файл с командой xcopy


treevalera
13-02-2012, 15:46
необходимо автоматизировать копирование файлов из директории C: (папка stam) на флешку D: (папка gibuy)
создал bat файл, в нем написал xcopy "C:\stam\*.*" "D:\gibuy\*.*" - работает нормально.
Дальше надо усложнить задачу.
На компе (xp) работает прога, для которой каждый день создается бэкап (размер около 50 мб) и сохраняется с расширением .rar прямо на C: (изменить место сохранения невозможно). Как правильно использовать команду xcopy, т.е. с какими параметрами, чтобы из C: копировались только файлы с расширением rar на флешку, и чтобы повторно не копировались старые файлы.
Спасибо заранее!

El Sanchez
13-02-2012, 16:47
treevalera,

xCopy /YD "C:\*.rar" "D:\gibuy\"

treevalera
14-02-2012, 08:46
El Sanchez, спасибо! Еще вопрос, поставил этот файл в планировщик, еще один планировщик на выключение компа (shutdown -s) стоит на 5 минут позже. А нельзя-ли объединить эти два bat файла в один, чтобы сработали последовательно, сразу же после выполнения копирования комп выключался?

Instant_SR
25-07-2013, 16:15
Подниму тему, дабы не плодить лишние.
Есть конструкция:


@ECHO off
@COLOR 3
@CHCP 866
SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
CLS
:Start
ECHO ==================================
ECHO 5 -Sirene
ECHO 0 -Выход
ECHO ==================================
SET PathLocal=\\MyPC\Data\Programms
SET /p variant=Ваш выбор =
::IF /i %variant%==5 GOTO Test
IF /i %variant%==5 GOTO Sirene
IF /i %variant%==0 EXIT
GOTO :error
:Sirene
CLS
IF EXIST %PathLocal%\Sirene\%COMPUTERNAME% (
SET path=%PathLocal%\Sirene\%COMPUTERNAME%
FOR /f "TOKENS=*" %%i IN ('DIR /b "!path!"') DO (
SET result=%%i
if "!result:~0,4!"=="gfum" (
xcopy %PathLocal%\Sirene\%COMPUTERNAME% C:\%result%\/e/i/q/h/y
Pause
)
cls
)
GOTO :Start
)
ECHO Для вашего ПК нет терминала Sirene, обратитесь к руководителю
GOTO :Start

В таком варианте xcopy не хочет работать:
отвечает " 'xcopy' is not recognized as internal or external command, operable program or bach file..."

НО, если переместить эту же команду в отдельную точку входа :Test (Специально оставил как комент в листинге) с необходимым указанием всех переменных -все копируется исправно.
Вот отдельный пример конструкции для проверки:
:Test
set result=gfum33
xcopy %PathLocal%\Sirene\%COMPUTERNAME% C:\%result%\/e/i/q/h/y
pause
Проверяю на локальной машине, по сути есть на сервере папка в которой содержатся папки с названиями, идентичными именам машин в сети, при работе файла он опрашивает по адресу "свою папку" и берет от туда нужную для себя копию папки. копии отличаются только по номерам, основание одно "gfum" все опознается, находится, но вот при вхождении в цикл для копирования - ошибка поправьте, где ошибся пожалуйста.
внутрь цикла причем попадает Pause срабатывает исправно, просто ограничение ф-ции какое-то, которое я не понимаю.

Iska
25-07-2013, 16:30
Instant_SR, ознакомьтесь, пожалуйста, с тэгом [code] (http://forum.oszone.net/misc.php?do=bbcode#code).

Iska
25-07-2013, 17:22
Iska, ознакомился, »
Пока сие незаметно (http://forum.oszone.net/post-2190525.html#post2190525).

El Sanchez
25-07-2013, 18:20
SET path=%PathLocal%\Sirene\%COMPUTERNAME% »
Instant_SR, на время выполнения сценария вы переназначили системную переменную PATH, поэтому и xcopy не нашлась.

Instant_SR
25-07-2013, 18:42
Iska, исправлял только часть кода. во время проверки, видимо. слетели исправления... жду ответа по сути?

Instant_SR
25-07-2013, 19:03
El Sanchez, спасибо за наводку, теперь вопрос по обходу политик:
с первого раза не создается директория, повторно выполняешь операцию - создается нужная директория и файлы копируются, попробовал в цикле поставить "костыль" сделал копию процедуры копирования - не получилось, необходим именно повторный заход в процедуру...


:Sirene
CLS
IF EXIST %PathLocal%\Sirene\%COMPUTERNAME% (
FOR /f "TOKENS=*" %%i IN ('DIR /b "%PathLocal%\Sirene\%COMPUTERNAME%"') DO (
SET result=%%i
if "!result:~0,4!"=="gfum" (
xcopy %PathLocal%\Sirene\%COMPUTERNAME%\%result% C:\%result%/e/i/q/h/y
)
cls
)
GOTO :Start
)
ECHO Для вашего ПК нет терминала Sirene, обратитесь к руководителю
GOTO :Start

Instant_SR
25-07-2013, 19:25
решил проблему:

if "!result:~0,4!"=="gfum" (
xcopy %PathLocal%\Sirene\%COMPUTERNAME%\!result! C:\!result!\/e/i/q/h/y
)




© OSzone.net 2001-2012