Каждая строка командного файла будет выполнена; но только после завершения предыдущей строки. В вашем случае, как только он попадет на ftp-линию, программа ftp начнет и возьмет на себя ввод пользователя. Когда он будет закрыт, остальные строки будут выполнены. Это означает, что имя пользователя / пароль никогда не отправляются в программу FTP и вместо этого будут отправлены в командную строку, когда программа ftp будет закрыта.
Вместо этого вам нужно передать все, что вам нужно, в командной строке ftp. Что-то вроде:
@echo off
echo user MyUserName> ftpcmd.dat
echo MyPassword>> ftpcmd.dat
echo bin>> ftpcmd.dat
echo put %1>> ftpcmd.dat
echo quit>> ftpcmd.dat
ftp -n -s:ftpcmd.dat SERVERNAME.COM
del ftpcmd.dat