На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Коротко о разделе:
Здесь разрешается создавать темы, относящиеся к любому языку программирования, для которого не существует раздела на форуме (например, Lisp, Tcl/Tk, FORTRAN и т.д.). Если раздел для нужного Вам языка есть, большая просьба создавать тему в нем.
Вопросы, связанные с JScript, Perl, PHP обсуждаются в разделе WWW Masters.

Обратите внимание:
1. Прежде чем задать вопрос, воспользуйтесь поиском. Возможно, Ваш вопрос уже обсуждали.
2. Если Ваш вопрос связан с конкретным языком программирования, обязательно укажите название языка в имени темы.
3. Постарайтесь давать темам информативные названия. Темы с названиями типа "Помогите, горю" будут удалены.
4. Помните, чем грамотней будет задан Ваш вопрос, тем больше будет у Вас шансов получить на него ответ. Как правильно задавать вопросы
5. Ипользуйте тег [ code ] ...текст программы... [ /code ] для выделения текста программы.

Просьбы выполнить какую-либо работу за автора в этом разделе не обсуждаются. Темы с подобными просьбами будут перемещены или удалены. Для заказов у нас существуют специальные разделы: Разовые заказы и подработка, ПОМОЩЬ СТУДЕНТАМ.

Если кто не понял (а такие есть) — чтобы за вас решали ваши задачки, идите на другие ресурсы.

Полезные ссылки:
Есть. ;)
Наши Исходники | GPSS (en), GPSS (ru) (!) | Common Lisp | Tcl/Tk | Haskell | Lua
Модераторы: B.V.
  
> синхронизация через .bat-файл , нужно задать цикл для каждой строки текстового файла
    Здравствуйте.
    Есть у меня .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% создать папку "Документы", в ней создать папку "Февраль" и туда скопировать уже все файлы, соответствующие заданной маске. Т.е. весь путь, кроме буквы диска мы должны воссоздать в резервной копии. Конечно же, если эти все папки уже есть (были созданны раннее), то заново их можно не создавать.
      Оно?
      ExpandedWrap disabled
        @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
        )
      Сообщение отредактировано: Qraizer -
      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
      0 пользователей:


      Рейтинг@Mail.ru
      [ Script execution time: 0,0179 ]   [ 15 queries used ]   [ Generated: 30.04.24, 12:13 GMT ]