1

Я использую WinSCP в своем пакетном файле (портативная версия) для загрузки файлов FTP, однако всякий раз, когда я запускаю его из пакетного файла, он меняет заголовок окна. Есть ли способ, которым я могу избежать этого?

Мой полный скрипт здесь на github

Но, чтобы подвести итог моему использованию WinSCP, он в основном генерирует временный файл сценария, выполняет его с winscp.com , перенаправляет его вывод в другой временный файл и анализирует вывод для некоторых ключевых слов.

Пример исполнения:

WinSCP.com /open /script=t.ftp /ini=nul ftp://%ftpusr%:%ftppass%@%server% >test.ftp

1 ответ1

2

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .