Я уже задавал вопрос о том, как написать скрипт для копирования файлов из 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%>tempfile.txt Echo %user%>>tempfile.txt Echo %pass%>>tempfile.txt Echo lcd %dst%>>tempfile.txt Echo cd %src%>>tempfile.txt Echo mget *.xml>>tempfile.txt Echo bye>>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?
Да, вы можете использовать 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 устанавливается ее штатным инструментарием