Можно ли передать переменную в файл Windows FTP script?

У меня есть пакет script, который динамически создает некоторые файлы и генерирует четыре файла с несколькими случайными именами файлов на основе времени, даты и т.д. Затем ему необходимо загрузить этот файл на сервер через FTP.

Как сейчас, в моем .bat файле есть строка, подобная "ftp -s: ftp.txt". Ftp.txt содержит довольно простой файл FTP script: что-то вроде этого -

open ftp.myserver.com
username
password
put filename1.dat
put filename2.dat
put filename3.dat
put filename4.dat

То, что я хотел бы сделать, это передать имена файлов, которые необходимо загрузить, а затем заменить "put filename1.dat" на "put% file1%" - где% file1% - это переменная имени файла, передаваемая в.

Возможно ли это? Кто-нибудь знает, как это сделать? Или мой подход неправильный?

Ответ 1

Вы можете сгенерировать файл ftp.txt на лету с вашим файлом bat. Просто сделайте что-нибудь вроде:

echo ftp.myserver.com>ftp.txt
echo username>>ftp.txt
echo password>>ftp.txt
echo put filename1.dat>>ftp.txt
echo put filename2.dat>>ftp.txt
echo put filename3.dat>>ftp.txt
echo put filename4.dat>>ftp.txt
ftp -s:ftp.txt

Конечно, теперь, когда вы находитесь в файле bat, вы можете использовать переменные среды и другие вещи вместо "filenameX.dat"

Например:

echo put %file1% >>ftp.txt

Ответ 2

Чтобы обновить ответ, здесь обновлен командный файл. Обратите внимание на исключение пробела после имени пользователя и пароля (при прохождении пробела на ftp-сайт). Это также будет использовать аргумент, переданный пакетному файлу.

echo open ftp.myserver.com>ftp.txt
echo username>>ftp.txt
echo password>>ftp.txt
echo put %1>>ftp.txt
echo quit>>ftp.txt
ftp -s:ftp.txt

Ответ 3

Я не думаю, что FTP-клиент командной строки в Windows достаточно умен, чтобы выполнять интерполяцию переменных среды/оболочки в командах. Но вы можете заставить управляющий файл .bat генерировать ftp script динамически и делать переменную, пока вы все еще находитесь на уровне оболочки.