Как не менять заголовок с помощью WinSCP в командном файле

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

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

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

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

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

1 ответ

Решение

Нет, вы не можете предотвратить winscp.com от изменения заголовка окна консоли.


Обратите внимание, что заголовок окна консоли изменяется на winscp.com Единственное, чья единственная цель - это консольное приложение. Как консольное приложение, оно наследует консоль родительского консольного приложения (если оно есть), например, cmd.exeпри выполнении из командного файла. Затем он может записать свой вывод вместо открытия отдельного консольного окна, что в противном случае было бы эквивалентно winscp.exe /console позвонить сделать (winscp.exe приложение GUI, поэтому оно не может наследовать консольное окно родительского процесса). Читайте об исполняемых файлах 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
Другие вопросы по тегам