Скрипт для обмена файлами через ftp-сервер

Когда-то «я работал в маленькой психиатрической клинике» крупной торговопроизводственной компании, занимающейся торговлей и производством всякой всячины. Компания эта имела разветвленную сеть филиалов и руководство, страдающее паранойей. Поэтому каждый филиал (согласно распоряжениям руководства) делал вид, что он есть самая независимая из независимых контор и никакого отношения не имеет ни к головному предприятию, ни к другим филиалам. В связи с вышеизложенным, никакой единой сетевой инфраструктуры у головной конторы и филиалов не наблюдалось, а обмениваться информацией все-таки как-то было необходимо… Посему родился следующий «лирический и нежный» скрипт, который позволяет выполнять обмен файлами через FTP-сервер. Применялся он для организации автообмена в 1c, но вполне сгодится и для автоматизации обмена любыми файлами.

 

rem @echo off
rem ****************************************************************************
rem
rem 20051212 ShS
rem
rem Командный файл для заливки файлов на FTP-сервер v 0.02
rem
rem *****************************************************************************
rem ======================= Определяем переменные ============================
rem
rem ======================= DialUp variables
rem
rem DUConnectionName    - имя соединения
rem если вы не используете DialUp для установления связи с провайдером,
rem то DUConnectionName должно содержать пустую строку (set DUConnectionName="")
rem DUUserName        - имя пользователя DialUp
rem DUUserPasswor    - пароль пользователя DialUp
    set DUConnectionName=""
    set DUUserName=dpguest
    set DUUserPassword=dppass
rem
rem ======================= FTP variables
rem
rem FTPUserName     - имя пользователя
rem FTPUserPassword     - пароль пользователя
rem FTPIPAddress     - IP-адрес FTP-сервера
rem LocalSourcePath     - локальная папка, которая содержит файлы для загрузки на FTP-сервер
rem FTPDestinationPath     - директория на FTP-сервере, куда будут загружены файлы
rem FTPCmdFileName     - путь к файлу с набором команд для загрузки файлов на FTP
rem
    set FTPUserName=xxx
    set FTPUserPassword=yyy
    set FTPIPAddress=zzz
    set LocalSourcePath=\TEMP\Scripts\sc
    set FTPDestinationPath=1c
    set FTPCmdFileName=.\FTPcommands.txt
rem ==========================================================================
rem
rem Проверяем необходимость дозвона до провайдера
rem если вы не используете DialUp для установления связи с провайдером,
rem то DUConnectionName должно содержать пустую строку (set DUConnectionName="")
rem
    if %DUConnectionName%=="" goto FTPDownLoad
rem
rem ======================== Дозвон до провайдера ============================
rem
:DIAL
    rasdial %DUConnectionName% %DUUserName% %DUUserPassword%
    if "%errorlevel%"=="0" goto FTPDownLoad
    set /P answer=Дозвониться до провайдера не удалось. Повторить попытку дозвона?(Y/N)
    if /I "%answer%"=="Y" goto DIAL
    goto END
:FTPDownLoad
rem ======================== Забираем файлы с FTP ============================
rem
rem ===== удаляем cтарые версии файлов обмена, перед загрузкой новых с FTP
    del /q %LocalSourcePath%\*.zip
pause
rem ======================== подготовка файла с набором команд для FTP
rem
    echo %FTPUserName%>%FTPCmdFileName%
    echo %FTPUserPassword%>>%FTPCmdFileName%
    echo lcd %LocalSourcePath%>>%FTPCmdFileName%
    echo cd %FTPDestinationPath%>>%FTPCmdFileName%
    echo type binary>>%FTPCmdFileName%
    echo mget fsc*.zip>>%FTPCmdFileName%
    echo quit >>%FTPCmdFileName%
rem ======================== Выполняем подготовленный набор команд
    ftp -s:%FTPCmdFileName% -i %FTPIPAddress%
rem
rem ======================== Обработка загруженных файлов в 1c ===============
rem ==========================================================================
rem ======================== Выкладываем файлы на FTP-сервер =================
rem
rem ======================== подготовка файла с набором команд для FTP
rem
    echo %FTPUserName%>%FTPCmdFileName%
    echo %FTPUserPassword%>>%FTPCmdFileName%
    echo lcd %LocalSourcePath%>>%FTPCmdFileName%
    echo cd %FTPDestinationPath%>>%FTPCmdFileName%
    echo type binary>>%FTPCmdFileName%
    echo mput *ou.zip>>%FTPCmdFileName%
    echo quit >>%FTPCmdFileName%
rem ======================== Выполняем подготовленный набор команд
    ftp -s:%FTPCmdFileName% -i %FTPIPAddress%
:END

Скрипт построен по следующему принципу:

  1. в самое начало скрипта вынесено определение всех переменных, которые в нем используются. Измените их значения так, как вам требуется
  2. сначала, при необходимости, выполняется соединение с внешним миром (дозвон до провайдера и/или соединение с vpn-сервером)
  3. затем, чистим локальную временную рабочую папку и формируем файл с набором команд, которые будут выполнены внешней утилитой (входящей в стандартную поставку windows) ftp.exe. Именно этот набор команд и выполняет загрузку файлов с ftp-сервера.
  4. обработка загруженных файлов в данном скрипте опущена (ведь, обработка может быть разной от случая к случаю), от нее оставлен лишь комментарий «Обработка загруженных файлов в 1c»
  5. ну, и напоследок, если в  этом есть необходимость, мы выгружаем обработанные данные обратно на ftp-сервер. Делается это так же, как в п.2: формируем набор команд и «скармливаем» его утилите ftp.exe

Вот, собственно говоря, и все.

17 Comments

    • Приветы ;)
      С кодом вообще интересно получилось. Сначала я решил у тебя подсмотреть и обнаружил, что можно пользовать тег pre, затем у тебя же увидел тег code и нашел соответствующую кнопку редактора, а потом, таки решил начать «читать эту чертову документацию» ;))) и наткнулся на следующее: http://en.support.wordpress.com/code/posting-source-code/
      чуть более трудоемко, чем «тыркнуть» в кнопку редактора, но результат того стоит, IMHO ;)

    • Попробовал вставить код на PoSh, используя теги sourcecode … /sourcecode, получилось УГ :( Цветовая разметка, мягко говоря, сомнительная, коментари от кода практически неотличимы.

      Василий, а ты как код вставляешь? Колись ;)

      • Либо тег pre (если текст из консоли), либо из PowerShell ISE копипастю с помощью спецмодуля :) Еще отлично в PowerGUI Script Editor сделано.

      • >Либо тег pre (если текст из консоли)
        в этом случае он будет не раскрашенным, я правильно понимаю?

        >либо из PowerShell ISE копипастю с помощью спецмодуля :)
        это я нагуглил уже, но возиться не хочется ;)

        >Еще отлично в PowerGUI Script Editor
        а вот тут поподробнее, если можно. Ты его просто копипастишь из PowerGUI Script Editor или что-то еще делаешь?

      • Ага, спасибо, за наводку, сделал при помощи PowerGUI Script Editor:

        “Правка” -> “Копировать текст, как” -> “HTML”

      • Н-да…, посмотрел, на результат постинга, выполненого через PowerGUI Script Editor глазами GoogleBot
        Результат хуже, чем при использовании тегов sourcecode

        В общем, дилемма: или делать страницу более пригодной для индексирования (используя теги sourcecode), либо для визуального восприятия, используя PowerGUi Script Editor…, либо попросить администрацию wordpress настроить таки инструментарий, который они испольуют для тегов sourcecode и отойти от дефолтной (и крайне неудачной) цветовой палитры, используемой для отображения кода на PowerShell

      • Ну честно говоря меня меньше всего волнует как будет читать мой код гуглбот, гораздо важнее как его будут читать пользователи. А поисковики пусть индексируют текст поста и заголовки – это будет более релевантно IMHO.
        Я сильно сомневаюсь что авторы WordPress будут заниматься дотачиванием подсветки кода. Тем более что она вообще вроде не их, а сторонняя, и тоже опенсурсная :) Тем более что реализовать 100% правильную подсветку PS практически нереально без использования движка, что для вебсредств не вариант. А даже для 95% приходится прикладывать очень много усилий.

        • >Я сильно сомневаюсь что авторы WordPress будут заниматься дотачиванием подсветки кода

          IIUC, вся “доточка” состоит в настройке инструмента, а не в тупой дефолтной установке. Ничего дописывать не надо, надо всего-лишь, банально настроить. Хотя, конечно, у меня так же большие сомнения, в том, что wordpress будет этим заниматься ;))

          >Тем более что реализовать 100% правильную подсветку PS практически нереально без использования движка, что для вебсредств не вариант. А даже для 95% приходится прикладывать очень много усилий.

          это не их забота, а забота автора опенсорсной разработки. Все что требуется от wordpress – грамотно использовать чужую разработку, т.е. изменить дефолтную палитру для PoSh (что предусмотренно автором разработки). Ведь, когда комментарии почти не отличимы от кода, это совсем не православно :(

          > А поисковики пусть индексируют текст поста и заголовки – это будет более релевантно IMHO

          не вижу ничего плохого в добавлении релевантности путем хорошей индексации текста исходнидников ;)

          • >не вижу ничего плохого в добавлении релевантности путем хорошей индексации текста исходнидников ;)
            Релевантность от этого только ухудшится.
            Если я использую в тексте или заголовке Select-string – мой пост 95% о select-string
            Если я использую select-string в коде – 99% что мой пост не о select-string :)

            • очень странное понимание релевантности, IMHO ;)
              с таким же успехом можно выдернуть любое слово из текста, которое ты публикуешь, и утверждать, что оно никак не коррелирует с оставшимся текстом ;)

              Речь идет о другом – копипаст кода через PowerGUI добавляет в публикуемый текст “мусор”, который вообще никак не коррелирует ни с твоим кодом, ни с остальным текстом. Релевантность любого блока текста, несущего смысловую нагрузку, от этого, IMHO, никак повысится не может. ;)

  1. Pingback: Вставка кода в wordpress « Retifff's Blog

    • а смысл? IMHO, скрипт на PoSh (в данном конкретном случае) мало чем будет отличаться от оригинала и не даст каких-либо преимуществ и/или улучшений.

      • Столкнулся с тем что в Windows 7 без ковыряния в политике безопастности и файерволе так просто он не работает. А выполнение тех же команд из PS проходит на ура

        • Всю работу по передаче файлов выполняет “ftp.exe”. IMHO, все равно откуда он запускается из PoSh или cmd.
          Что конкретно не работает?

Leave a Reply

Your email address will not be published. Required fields are marked *

Notify me of followup comments via e-mail. You can also subscribe without commenting.