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
batch-file
winscp
Mark Deven
fuente
fuente
Respuestas:
No, no puede evitar
winscp.com
cambiar el título de la ventana de la consola.Tenga en cuenta que
winscp.com
solo 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 decmd.exe
cuando 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íawinscp.exe /console
hacer una llamada equivalente (winscp.exe
es 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.exe
con los mismos argumentos. Cuandowinscp.exe
se llama con/command
switch, pero sin/console
switch, 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.com
en 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
bWaitOnReturn
argumento enTrue
).Necesita su archivo por lotes para generar un
.vbs
script como este:Y luego ejecútelo desde el archivo por lotes como:
fuente
:fileman
), manejo los resultados dells
comando para obtener una lista de nombres de archivos sin descargar todos los archivos. ¿Hay alguna manera de ejecutarwinscp.exe /command
y enviar resultados a un archivo de texto?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.