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

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

treevalera 13-02-2012 15:46 1857758

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

El Sanchez 13-02-2012 16:47 1857797

treevalera,
Код:

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

treevalera 14-02-2012 08:46 1858286

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

Instant_SR 25-07-2013 16:15 2190525

Подниму тему, дабы не плодить лишние.
Есть конструкция:

Код:

@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 2190537

Instant_SR, ознакомьтесь, пожалуйста, с тэгом [code].

Iska 25-07-2013 17:22 2190569

Цитата:

Цитата Instant_SR
Iska, ознакомился, »

Пока сие незаметно.

El Sanchez 25-07-2013 18:20 2190620

Цитата:

Цитата Instant_SR
SET path=%PathLocal%\Sirene\%COMPUTERNAME% »

Instant_SR, на время выполнения сценария вы переназначили системную переменную PATH, поэтому и xcopy не нашлась.

Instant_SR 25-07-2013 18:42 2190641

Iska, исправлял только часть кода. во время проверки, видимо. слетели исправления... жду ответа по сути?

Instant_SR 25-07-2013 19:03 2190651

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 2190661

решил проблему:
Код:

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



Время: 07:44.

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