Как не менять заголовок с помощью 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