Как можно скопировать все файлы с FTP-сервера в сетевую папку, используя командную строку?

Я уже задавал вопрос о том, как написать скрипт для копирования файлов из FTP в сетевую папку. Однако я не совсем понимаю, как можно копировать файлы, используя командную строку FTP. Как мне скопировать все файлы из FTP в сетевую папку? 

Я пытаюсь добавить файлы из FTP в сетевую папку следующим образом:
<pre><code class="bash">@Echo Off
:: ~Параметры соединения
Set server=IP
Set user=tuser
Set pass=tpassword
:: ~Что и куда копируем
:: SET $SRC=/tdir/*.xml
SET src=/tdir
SET dst=\\tdomain.ru\tdir\
:: Формат текущей даты
SET dd=%date:~0,2%
SET mm=%date:~3,2%
SET yyyy=%date:~6,4%
SET curdate=%dd%_%mm%_%yyyy%
:: ~Временные файлы
::Set $FFtp=%~dpn0.cfg
:: Готовим CFG-файл
Echo open %server%&gt;tempfile.txt
Echo %user%&gt;&gt;tempfile.txt
Echo %pass%&gt;&gt;tempfile.txt
Echo lcd %dst%&gt;&gt;tempfile.txt
Echo cd %src%&gt;&gt;tempfile.txt
Echo mget *.xml&gt;&gt;tempfile.txt
Echo bye&gt;&gt;tempfile.txt
:: Выполняем команду
FTP -s:tempfile.txt
:: Добавим в архив скопированные файлы
"C:\Program Files\7-Zip\7z.exe" a -tzip \\tdomain.ru\tdir\Test_%curdate%.zip \\tdomain.ru\tdir\*.xml
:: Удалим лишние файлы
del \\tdomain.ru\tdir\*.txt
rem exit
pause</code></pre>

Проблема в том, что команда mget запрашивает подтверждение Y для каждой загрузки. Возможно ли как-то запустить эту команду с автоматическим подтверждением, или существуют другие способы помимо использования mget?
  • 8 сентября 2024 г. 4:12
Ответы на вопрос 2
Да, вы можете использовать FTP с автоматическим подтверждением, чтобы избежать запроса подтверждения для каждой загружаемой машины. Один из способов сделать это — включить режим без подтверждения с помощью команды `prompt`. Включение этой команды перед `mget` отключит запросы на подтверждение.

Кроме того, ваш скрипт может быть немного улучшен для лучшего управления и организации. Вот обновленный вариант вашего батника:

```bat
@Echo Off
:: ~Параметры соединения
Set server=IP
Set user=tuser
Set pass=tpassword
:: ~Что и куда копируем
SET src=/tdir
SET dst=\\tdomain.ru\tdir\
:: Формат текущей даты
SET dd=%date:~0,2%
SET mm=%date:~3,2%
SET yyyy=%date:~6,4%
SET curdate=%dd%_%mm%_%yyyy%
:: ~Временные файлы
Set tempfile=tempfile.txt

:: Готовим CFG-файл
(
    Echo open %server%
    Echo %user%
    Echo %pass%
    Echo prompt
    Echo lcd %dst%
    Echo cd %src%
    Echo mget *.xml
    Echo bye
) > %tempfile%

:: Выполняем команду
FTP -s:%tempfile%

:: Добавим в архив скопированные файлы
"C:\Program Files\7-Zip\7z.exe" a -tzip "%dst%Test_%curdate%.zip" "%dst%*.xml"

:: Удалим лишние файлы
del "%dst%*.txt"
:: exit
pause
```

### Основные изменения:
1. **Prompt**: Я добавил команду `Echo prompt` в конфигурационный файл. Это отключает взаимодействие (запросы на подтверждение).
2. **Сохранение временного файла**: Я изменил способ записи в временный файл, улучшив читаемость.
3. **Путь к архиву**: Убедитесь, что вы используете правильный путь для сохранения архива.

### Для альтернативных подходов:
Если вы хотите избежать использования встроенной программы FTP, вы можете использовать более мощные инструменты, такие как `WinSCP`, которые предоставляют более гибкий интерфейс для работы с FTP-серверами и могут автоматически загружать файлы без подтверждения. `WinSCP`, например, имеет возможность управлять загрузками через скрипты и позволяет создавать более сложные сценарии.
Использовать wget, ключ -l 1 -r или -m (осторожно, по умолчанию будет качать все каталоги, смотри опции ограничения в пути). 

Ещё лучше, уйти от ftp, как устаревшего протокола, с кучей проблем. И использовать штатный встроенный функционал ssh - scp/sftp , которым может пользоваться как стандартный scp так и rsync, у которых возможностей и удобства на порядок больше.

Ssh сервер идёт с любым linux штатно, а также с windows устанавливается ее штатным инструментарием
Похожие вопросы