![如何在批处理文件中使用 WinSCP 不更改标题](https://linux22.com/image/1577553/%E5%A6%82%E4%BD%95%E5%9C%A8%E6%89%B9%E5%A4%84%E7%90%86%E6%96%87%E4%BB%B6%E4%B8%AD%E4%BD%BF%E7%94%A8%20WinSCP%20%E4%B8%8D%E6%9B%B4%E6%94%B9%E6%A0%87%E9%A2%98.png)
我在用着温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
使用/command
switch 调用时,但不使用/console
switch,它会完全静默地运行命令(并且不会更改控制台标题)。
虽然对于如此复杂的用途,你应该从简单的 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