
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[52.15.72.156] |
![]() |
|
Сообщ.
#1
,
|
|
|
Здравствуйте.
Есть у меня .bat-файл, который выполняет синхронизацию содержимого нескольких папок. Точнее сказать, резервное копирование, а не синхронизацию, т.к. копируются файлы всегда в одностороннем порядке. Вот примерно его содержимое: @echo off @set fromdisk=D: @set todisk=C: @set todir=backup xcopy %fromdisk%\1\*.txt %todisk%\%todir% /d /c /i /Y /h /k /r /s xcopy %fromdisk%\2\*.doc %todisk%\%todir% /d /c /i /Y /h /k /r /s xcopy %fromdisk%\3\*.* %todisk%\%todir% /d /c /i /Y /h /k /r /s xcopy %fromdisk%\4\*.rar %todisk%\%todir% /d /c /i /Y /h /k /r /s @echo. @pause @goto end: Но вот источники для копирования всегда разные и приходится всегда вручную этот .bat-файл корректировать. Хочу несколько автоматизировать эту процедуру. Для этого нужно решить 2 вопроса: 1. Нужно чтобы путь, откуда нужно копировать данные подставлялся из другого файла: path.txt. И в соответствии с заданной директорией и маской для файлов производилось копирование. Каждая строчка в файле path.txt соответствует директории, откуда нужно взять соответствующие файлы для копирования. Вот, например, содержимое этого файла: path.txt D:\Документы\Февраль\*.txt D:\Таблицы\3.05.2012\*.doc D:\Музыка\*.mp3 D:\Архивы\Win\март\*.rar Т.е. нужно открыть файл, считать данные в массив (например, каждая строка = элемент массива) и запустить цикл для каждого элемента массива: xcopy [element0] %todisk%\%todir% /d /c /i /Y /h /k /r /s xcopy [element1] %todisk%\%todir% /d /c /i /Y /h /k /r /s и.т.д. Как это реализовать в .bat-файле? 2. Вторая функция, которую хотелось бы реализовать, должна создавать такую же структуру каталогов, как и в источнике копирования. Рассмотрим на примере 1-го элемента. Есть источник: D:\Документы\Февраль\*.txt Это значит, что мы должны в директории %todisk%\%todir% создать папку "Документы", в ней создать папку "Февраль" и туда скопировать уже все файлы, соответствующие заданной маске. Т.е. весь путь, кроме буквы диска мы должны воссоздать в резервной копии. Конечно же, если эти все папки уже есть (были созданны раннее), то заново их можно не создавать. |
![]() |
Сообщ.
#2
,
|
|
Оно?
![]() ![]() @echo off rem set fromdisk=D: set todisk=C: set todir=backup for /F %%a in (path.txt) do call :doIt %%a echo. pause goto :eof :doIt set curPath=%1 :again if `%curPath%` == `` ( xcopy %1 %todisk%\%todir%\%lastDir% /d /c /i /Y /h /k /r /s goto :eof ) for /F "tokens=1* delims=\" %%b in ("%curPath%") do ( set lastDir=%lastParam% set lastParam=%%b set curPath=%%c goto again ) |