Нет, вы не можете предотвратить 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