msdos force files example windows command-line copy executable

windows - force - Ocultar ventana de comando del archivo.BAT que ejecuta otro archivo.EXE



copy folder cmd (13)

O puede usar:

Start /d "the directory of the executable" /b "the name of the executable" "parameters of the executable" %1 (% 1 es si un archivo, se pasa a su ejecutable, por ejemplo, notepad.exe foo.txt , aquí% 1 es "foo.txt".

Los parámetros / b del comando de inicio hacen esto: "Inicia una aplicación sin abrir una nueva ventana de símbolo del sistema. El manejo de CTRL + C se ignora a menos que la aplicación habilite el procesamiento CTRL + C. Use CTRL + BREAK para interrumpir la aplicación". Que es exactamente lo que queremos.

Este es un archivo por lotes en Windows.

Aquí está mi archivo .bat

@echo off copy "C:/Remoting.config-Training" "C:/Remoting.config" "C:/ThirdParty.exe"

Esto funciona bien, excepto que el archivo .bat deja la ventana de comando abierta todo el tiempo que se ejecuta la aplicación "ThirdParty".
Necesito la ventana de comando para cerrar.

Utilizaría el atajo para la aplicación, pero primero debo ejecutar este comando de copia (en realidad cambia qué base de datos y servidor usar para la aplicación).

La aplicación ThirdParty no permite al usuario cambiar la fuente de la base de datos o el servidor de aplicaciones.

Hacemos esto para permitir que los usuarios cambien de un entorno de prueba al entorno de producción.


Prueba esto:

@echo off copy "C:/Remoting.config-Training" "C:/Remoting.config" start C:/ThirdParty.exe exit


Realmente no he encontrado una buena manera de hacerlo de forma nativa, así que solo uso una utilidad llamada hstart que lo hace por mí. Si hay una manera más ordenada de hacerlo, estaría bien.


Usar start funciona bien, a menos que esté usando un lenguaje de scripting. Afortunadamente, hay una salida para Python: simplemente use pythonw.exe lugar de python.exe :

:: Title not needed: start pythonw.exe application.py

En caso de que necesite cotizaciones, haga esto:

:: Title needed start "Great Python App" pythonw.exe "C:/Program Files/Vendor/App/application.py"


ejecutarlo bajo un usuario diferente. suponiendo que se trata de un cuadro de Windows, cree una cuenta de usuario para las tareas programadas. ejecutarlo como ese usuario. El símbolo del sistema solo se mostrará al usuario que esté conectado actualmente.



Gran consejo. Funciona con archivos por lotes que también ejecutan un programa Java.

start javaw -classpath "%CP%" main.Main


Puede crear un script VBS que forzará la ventana a ocultarse.

================... Set WshShell = WScript.CreateObject("WScript.Shell") obj = WshShell.Run("""C:/Program Files (x86)/McKesson/HRS Distributed/SwE.bat""", 0) set WshShell = Nothing ''=====================================...

Luego, en lugar de ejecutar el archivo por lotes, ejecute el script.


Crea un archivo .vbs con este código:

CreateObject ("Wscript.Shell"). Ejecute "your_batch.bat", 0, True

Este .vbs ejecutará your_batch.bat oculto.

Funciona bien para mí


Por favor, use este, lo anterior no funciona. Lo he probado en Windows Server 2003.

@echo off copy "C:/Remoting.config-Training" "C:/Remoting.config" Start /I "" "C:/ThirdParty.exe" exit


Puede que le interese probar mi programa silentbatch , que ejecutará un script .bat / .cmd , suprimirá por completo la creación de la ventana del símbolo del sistema (para que no lo vea y desaparezca) y, opcionalmente, registrará el resultado en un archivo especificado.


Usar el start funciona para mí:

@echo off copy "C:/Remoting.config-Training" "C:/Remoting.config" start C:/ThirdParty.exe

EDIT: Ok, mirando más de cerca, start parece interpretar el primer parámetro como el título de la nueva ventana si se cita. Entonces, si necesita citar la ruta a su ThirdParty.exe, también debe proporcionar una cadena de título.

Ejemplos:

:: Title not needed: start C:/ThirdParty.exe :: Title needed start "Third Party App" "C:/Program Files/Vendor/ThirdParty.exe"


Para hacer que la ventana de comando de un archivo .bat que ejecuta un archivo .exe salga lo más rápido posible, use la línea @start antes del archivo que está tratando de ejecutar. Aquí hay un ejemplo:

(insert other code here) @start executable.exe (insert other code here)

No tiene que usar otro código con @start executable.exe .