如何在批处理文件中使用 WinSCP 不更改标题

如何在批处理文件中使用 WinSCP 不更改标题

我在用着温SCP在我的批处理文件(便携版)中下载 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使用/commandswitch 调用时,但不使用/consoleswitch,它会完全静默地运行命令(并且不会更改控制台标题)。

虽然对于如此复杂的用途,你应该从简单的 WinSCP 脚本切换到WinSCP .NET 程序集和 PowerShell。您的代码将更加清晰,更加健壮。


为了快速解决问题,您可以winscp.com在其自己的隐藏控制台中运行。
请参阅以完全隐藏的方式运行批处理文件.
(尽管与大多数示例相反,您想要将参数设置bWaitOnReturnTrue)。

您需要批处理文件来生成.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

相关内容