входной параметр для команды требует ручного ввода в пакетном программировании - PullRequest
2 голосов
/ 24 марта 2011

Я использую пакетное программирование Windows для создания FTP-соединения с FTP-хостом для автоматической загрузки файла на этот хост.Однако у команды ftp нет параметра для получения имени пользователя и пароля в команде, и я должен ввести его в следующей команде.Как пакетный файл мог ожидать установления соединения ftp, а затем повторить имя пользователя и пароль для следующей команды ftp?Спасибо за помощь.

Ответы [ 2 ]

1 голос
/ 24 марта 2011

На самом деле есть другой способ сделать это.

Windows ftp принимает аргумент "-s: имя файла", содержащий команды для запуска. Вы можете сохранить имя пользователя / пароль там в формате «USER username \ nPASSWD», и они будут запущены в первую очередь, когда соединение будет установлено.

Обязательно удалите файл позже, или, что еще лучше, используйте временный файл, который не попадает на диск;)

РЕДАКТИРОВАТЬ: Уточнение для coolkid. Этот действительно ваш ответ (спасибо за поддержку Джои).

Чтобы быть точным, вот и вы.

Содержимое upload.cmd:

@echo off 
set /p name= Username?
set /p pass= Password?

REM Give dummy data to the human-friendly FTP prompts
REM We will pass actual FTP commands in the next stanza
echo dummy > ftp_commands.txt
echo dummy >> ftp_commands.txt

echo USER %name% >> ftp_commands.txt
echo PASS %pass% >> ftp_commands.txt
echo PUT ftp_commands.txt >> ftp_commands.txt

ftp -s:ftp_commands.txt ftp.mydomain.com

Бег upload.cmd:

C:\>upload.cmd
 Username?anonymous
 Password?foobar
Connected to ftp.mydomain.com.
220 2k-32-71-e Microsoft FTP Service (Version 5.0).
User (ftp.mydomain.com:(none)):
331 Password required for dummy .

530 User dummy  cannot log in.
Login failed.
ftp> USER anonymous
331 Anonymous access allowed, send identity (e-mail name) as password.

230 Anonymous user logged in.
ftp> PUT ftp_commands.txt
200 PORT command successful.
1 голос
/ 24 марта 2011

Вы можете отобразить некоторые данные во временный файл, а затем перенаправить этот файл на стандартный ввод команды ftp.Например:

>file  echo USERNAME
>>file echo.
>>file echo PASSWORD
>>file echo.
ftp < file
rem Now we can delete the file
del file

Если вам не нужно было вводить новые строки (необходимо имитировать нажатие клавиши ENTER, когда программа ftp запрашивает учетные данные), тогда вы могли бы обойтись без временного файла:

echo USERNAME | ftp
...