Нет, вы не можете предотвратить winscp.com от изменения заголовка окна консоли.
Обратите внимание, что заголовок окна консоли может быть изменен только на winscp.com , единственная цель которого - это консольное приложение. Как консольное приложение, оно наследуется консолью родительского консольного приложения (если оно есть), например, cmd.exe , при запуске из командного файла. Затем он может записать свой вывод в него, вместо того, чтобы открывать отдельное консольное окно, что в противном случае эквивалентно winscp.exe /console (winscp.exe является приложением с графическим интерфейсом, поэтому он не может наследовать консольное окно родительского процесса). Читайте об исполняемых файлах WinSCP.
Но вы, похоже, хотите, чтобы пользователи тоже не видели выход winscp.com . Вы используете только (скрытый) вывод для проверки ошибок. Это не очень надежный подход. Вам лучше использовать код выхода WinSCP для проверки на наличие ошибок. См. Как я узнаю, что скрипт успешно выполнен? Если вам нужна еще более детальная проверка ошибок, вы можете использовать XML-логи .
Как только вы избавитесь от злоупотребления выводом WinSCP, вы можете переключиться на winscp.exe с теми же аргументами. Когда winscp.exe вызывается с параметром /command , но без параметра /console , он выполняет команды полностью без вывода сообщений (и не меняет заголовок консоли).
Хотя для такого сложного использования вы должны перейти от простого сценария WinSCP к сборке WinSCP .NET и PowerShell. Ваш код будет намного чище и надежнее.
Для быстрого решения вы можете запустить winscp.com в своей собственной скрытой консоли.
См. Запуск командного файла полностью скрытым способом.
(хотя в отличие от большинства примеров вы хотите установить для аргумента bWaitOnReturn значение True).
Вам нужен ваш командный файл, чтобы сгенерировать скрипт .vbs следующим образом:
Set oShell = CreateObject ("Wscript.Shell")
Dim strArgs
strArgs = "cmd.exe /c ""C:\some\path\winscp.com"" /ini=nul /script=temp.ftp ftp://username:password@host > output.txt"
oShell.Run strArgs, 0, true
А затем запустите его из командного файла, как:
cscript runwinscp.vbs