Esta pregunta ya tiene una respuesta aquí:
En Windows XP, ¿puedo ejecutar un archivo por lotes (.bat o .cmd), a través de un acceso directo, sin una "ventana negra"?
Esta pregunta ya tiene una respuesta aquí:
En Windows XP, ¿puedo ejecutar un archivo por lotes (.bat o .cmd), a través de un acceso directo, sin una "ventana negra"?
Respuestas:
Guarde lo siguiente como wscript, por ejemplo, hidecmd.vbs después de reemplazar "testing.bat" con el nombre de su archivo por lotes.
Set oShell = CreateObject ("Wscript.Shell")
Dim strArgs
strArgs = "cmd /c testing.bat"
oShell.Run strArgs, 0, false
El segundo parámetro de oShell.Run
es el intWindowStyle
valor que indica la apariencia de la ventana del programa y el valor cero es para la ventana oculta.
La referencia está aquí http://msdn.microsoft.com/en-us/library/d5fk67ky.aspx
.bat
archivo como administrador o usando este método?
Esto es solo una simplificación de la respuesta de Shaji. Puede ejecutar su script por lotes a través de un script VBScript (.vbs) como este:
'HideBat.vbs
CreateObject("Wscript.Shell").Run "your_batch_file.bat", 0, True
Esto ejecutará su archivo por lotes sin mostrar ninguna ventana de comandos.
.bat
archivo como administrador con este método?
Solo para ampliar las respuestas "Usar secuencias de comandos de Windows" (que considero mejor porque ya está integrado), aquí se explica cómo hacerlo mediante el uso de una secuencia de comandos de envoltura única y pasando el nombre del archivo por lotes "real" como parámetro. Se pasarán parámetros adicionales al archivo por lotes.
If WScript.Arguments.Count >= 1 Then
ReDim arr(WScript.Arguments.Count-1)
For i = 0 To WScript.Arguments.Count-1
Arg = WScript.Arguments(i)
If InStr(Arg, " ") > 0 Then Arg = """" & Arg & """"
arr(i) = Arg
Next
RunCmd = Join(arr)
CreateObject("Wscript.Shell").Run RunCmd, 0, True
End If
Entonces, por ejemplo, guarde el archivo anterior como en NoShell.vbs
algún lugar y luego llame:
NoShell.vbs c:\foo\my_batch_file.bat
Finalmente, si está buscando ejecutar esto desde algún lugar que no entienda el archivo .vbs (como "Herramientas externas" en Visual Studio), querrá llamar C:\Windows\System32\wscript.exe
con el archivo vbs como primer parámetro y su archivo por lotes como el segundo.
"C:\My Files\HideCmd.vbs" c:\foo\my_batch_file.bat
.
"C:\My Files\HideCmd.vbs" c:\my things\my_batch_file.bat
. No importa lo que intente para el camino: comillas dobles alrededor de todo,% 20 en lugar del espacio, o una combinación de esos dos, nada funciona. Recibo un mensaje de error que me dice que no se puede encontrar el archivo o que no sucede nada. ¿Esto se debe a un error del usuario de mi parte, una limitación de Windows con el campo Destino para accesos directos o un problema con el script vbs en el que no maneja las rutas de archivos con espacios correctamente?
Puede cambiar las propiedades del acceso directo para ejecutar minimizado.
Para ejecutarlo de forma completamente invisible, necesitará algo más, como Windows Scripting.
Use comenzar con la opción '/ B'. Por ejemplo:
@echo off
start /B go.bat
start /b
solo ejecutará el programa en la consola actualmente asignada en lugar de generar una nueva. Obtendrá uno nuevo de todos modos ya que el lote debe ejecutarse con cmd (que, a su vez [sorpresa], abre una consola).
SYSTEM
en C / C ++).
cmd /c foo.cmd
. No hay absolutamente ninguna necesidad de usar start
en esos escenarios, y diría que system
no debería usarse a favor CreateProcess
. Al iniciar un archivo por lotes, ya depende de una plataforma, también podría usar las mejores herramientas para el trabajo.
cmd /c
antes. El comando cmd es lo que se necesita en mi caso, pero todas las respuestas que Stackexchange encontrado hasta ahora, acerca de un archivo por lotes se ejecuta otro archivo por lotes, tienen respuestas más a usar el inicio ...
start /b go.bat
no asignará una nueva consola (es decir, una instancia de conhost.exe, o un hilo en csrss.exe antes de Windows 7). Sin embargo, hará un desastre ya que el script por lotes se ejecuta con una nueva instancia de cmd.exe que está conectada a la misma consola . Ambas instancias del shell competirán para leer la entrada de la consola, generalmente alternando. Necesita /w
(por ejemplo start /b /w go.bat
) para esperar en la segunda instancia, que es similar a usar cmd /c
if using system
. Además, si llama CreateProcess
, ejecute go.bat
directamente. No hay necesidad de eso cmd /c
.
Código abierto gratuito de GPL "Crear proceso oculto"
http://www.commandline.co.uk/chp/
Microsoft Security Essentials, y probablemente la mayoría de los otros escáneres de virus / malware tratarán el ejecutable, chp.exe, como un virus porque oculta cualquier programa que especifique para mostrar una ventana o un botón de la barra de tareas, al igual que los virus.
No es un virus. No oculta que el proceso de destino aparezca en el administrador de tareas, por ejemplo. Y, por supuesto, el código fuente está incluido para que pueda ver que es muy pequeño y no hace nada más que ejecutar cualquier programa que le dé.
Ni siquiera tiene que confiar en que el chp.exe incluido realmente se creó a partir de esa fuente. Puede continuar y descartar el chp.exe incluido y compilar el suyo desde la fuente, y todas las herramientas necesarias para hacerlo son incluso gratuitas y descargables.
También puede hacer un acceso directo al archivo .bat o .cmd, luego hacer clic derecho en el acceso directo, Propiedades, pestaña Acceso directo, Ejecutar: minimizado. Luego, en las tareas programadas, use el acceso directo en lugar del archivo .bat / .cmd directamente. Eso evitará que aparezca una ventana, pero aún aparecerá un botón de la barra de tareas.
Puede usar secuencias de comandos de ventana como AutoIt .
Como ejemplo, solo escriba esto en el editor de script AutoIt. Es bastante simple
Run("C:\test\batchfile.bat", "", @SW_HIDE)
Si quieres ejecutarlo en un bucle,
$x=0
Do
Run("C:\test\batchfile.bat", "", @SW_HIDE)
Sleep(5000)
Until $x = 1
Compílelo como .exe, y ya está.
Del mismo modo, en AutoHotkey :
#NoTrayIcon ; To prevent momentary icon pop-up
run whatever.bat arg1 arg2,,hide
Use Hidden Start (cuesta $ 20)
Inicio oculto: ejecute aplicaciones y archivos por lotes sin una ventana de consola o indicador de UAC
Las aplicaciones de consola y los archivos por lotes se ejecutan regularmente al inicio de Windows o en un horario. El principal inconveniente de esto es que cada aplicación abre una ventana de consola que parpadea en la pantalla. Hidden Start (o Hstart) es una utilidad de línea de comandos liviana que le permite ejecutar aplicaciones de consola y archivos por lotes sin ninguna ventana en segundo plano, manejar la elevación de privilegios UAC en Windows 7 y Vista, iniciar múltiples comandos en paralelo o sincrónicamente, y mucho más .
Solución simple, sin usar ningún programa adicional.
¡Buena suerte!