Cómo no cambiar el título con WinSCP en archivo por lotes


1

Estoy usando WinSCP en mi archivo por lotes (la versión portátil) para descargar archivos FTP, sin embargo, cada vez que lo ejecuto desde un archivo por lotes cambia el título de la ventana . ¿Hay alguna forma de evitar eso?

Mi guión completo está aquí en github

Pero para resumir mi uso de WinSCP, básicamente genera un archivo de script temporal, lo ejecuta winscp.com, redirige su salida a otro archivo temporal y analiza la salida de algunas palabras clave.

Un ejemplo de ejecución:

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

Es un programa de chat. Un trabajo.
Mark Deven

Solo cambia el título. Yo manejo la salida.
Mark Deven

Puedes mirarlo y ver ...
Mark Deven

Respuestas:


2

No, no puede evitar winscp.comcambiar el título de la ventana de la consola.


Tenga en cuenta que winscp.comsolo se cambia el título de la ventana de una consola , cuyo único propósito es que sea una aplicación de consola . Como aplicación de consola, hereda una consola de la aplicación de consola principal (si existe), como la de cmd.execuando se ejecuta desde un archivo por lotes. Luego puede escribir su salida en él, en lugar de abrir una ventana de consola separada, lo que de otra manera sería winscp.exe /consolehacer una llamada equivalente ( winscp.exees una aplicación GUI, por lo que no puede heredar una ventana de consola del proceso padre). Lea sobre los ejecutables de WinSCP .

Pero parece que también quieres evitar que los usuarios vean la salida de winscp.com. Solo abusa de la salida (oculta) para la comprobación de errores. Ese no es un enfoque muy confiable. Es mejor usar el código de salida de WinSCP para verificar si hay errores. Consulte ¿Cómo sé que la secuencia de comandos se completó correctamente? Si necesita una comprobación de errores aún más detallada, puede usar el registro XML .

Una vez que se deshaga de su abuso de la salida de WinSCP, puede cambiar winscp.execon los mismos argumentos. Cuando winscp.exese llama con /commandswitch, pero sin /consoleswitch, ejecuta los comandos completamente en silencio (y no cambia el título de la consola).

Aunque para un uso tan complicado, debe cambiar de secuencias de comandos WinSCP simples al ensamblado WinSCP .NET y PowerShell . Su código será mucho más limpio y robusto.


Para una solución rápida, puede ejecutar winscp.comen su propia consola oculta.
Consulte Ejecutar un archivo por lotes de forma completamente oculta .
(aunque contrario a la mayoría de los ejemplos, desea establecer el bWaitOnReturnargumento en True).

Necesita su archivo por lotes para generar un .vbsscript como este:

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

Y luego ejecútelo desde el archivo por lotes como:

cscript runwinscp.vbs

Bueno, manejo individualmente la salida de muchos de los comandos. Por ejemplo, con la sección para compartir archivos de mi código ( :fileman), manejo los resultados del lscomando para obtener una lista de nombres de archivos sin descargar todos los archivos. ¿Hay alguna manera de ejecutar winscp.exe /commandy enviar resultados a un archivo de texto?
Mark Deven

No. No debe analizar la salida de WinSCP de todos modos. Si necesita resultados detallados, analice el archivo de registro XML. Incluso hay un ejemplo para recuperar el listado del registro - winscp.net/eng/docs/logging_xml#xslt
Martin Prikryl

Sin embargo, no hay un analizador xml nativo en el código de lote.
Mark Deven

Puede descargar Microsoft msxsl(como puede ver en el artículo vinculado), aunque no es una buena idea hacer secuencias de comandos tan complejas en un archivo por lotes.
Martin Prikryl

Busqué algo así el año pasado durante semanas y no encontré nada: /. Gracias.
Mark Deven
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.