Если мы рассмотрим общие сценарии, в которых может быть выбрано это исключение, доступ к свойствам с объектом вверху.
Пример:
string postalcode=Customer.Address.PostalCode;
//if customer or address is null , this will through exeption
здесь, если адрес имеет значение null, то вы получите NullReferenceException.
Итак, в качестве практики мы всегда должны использовать проверку нуля, прежде чем обращаться к свойствам в таких объектах (особенно в общих)
string postalcode=Customer?.Address?.PostalCode;
//if customer or address is null , this will return null, without through a exception
Вы можете сгенерировать файл 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
Я не думаю, что FTP-клиент командной строки в окнах достаточно умен, чтобы выполнять интерполяцию переменных среды / оболочки в командах. Но вы можете заставить управляющий файл .bat генерировать сценарий ftp динамически и делать переменную, пока вы все еще на уровне оболочки.
Чтобы обновить ответ, вот обновленный командный файл. Обратите внимание на исключение пробела после имени пользователя и пароля (при прохождении пробела на 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