2009-10-29 12:42:48 +0000 2009-10-29 12:42:48 +0000
144
144

Ejecutar un archivo por lotes de una manera completamente oculta

Estoy buscando alguna manera de ejecutar un archivo por lotes (.bat) sin nada visible para el usuario (sin ventana, sin nombre de barra de tareas, .etc.)

No quiero usar algún programa para hacer eso, estoy buscando algo más limpio. He encontrado una solución que usa VBScript, pero tampoco me gusta mucho usar VBS.

Respuestas (23)

122
122
122
2009-10-29 16:29:10 +0000

Solución 1:

Guarda esta línea de texto como archivo invisible.vbs:

CreateObject(“Wscript.Shell”).Run “”“ & WScript. Arguments(0) & ”“”“, 0, False

Para ejecutar cualquier programa o archivo batch de forma invisible, úsalo así:

wscript.exe "C:\Wherever\invisible.vbs” “C:\Algún Otro Lugar\NMiArchivoBatch. bat”

Para poder pasar/recibir una lista de argumentos usa sólo dos comillas dobles

CreateObject(“Wscript.Shell”).Run “” & WScript. Arguments(0) & “”, 0, Falso

Ejemplo: Invisible.vbs "Kill.vbs ME.exe"

Solución 2:

Utilizar una herramienta de línea de comandos para lanzar silenciosamente un proceso : Quiet , hidecon o hideexec .

29
29
29
2012-06-29 21:06:44 +0000

Para ocultar archivos por lotes o archivos de comando o cualquier archivo… Utilice la utilidad incorporada de Windows XP IExpress.exe para crear un archivo .EXE a partir del archivo por lotes. Cuando uses IExpress asegúrate de marcar la opción ejecutar oculto y marca todas las casillas de no mostrar nada. Después de crear tu .exe colócalo en cualquier carpeta de comandos de ejecución que elijas y nunca lo verás aparecer.

10
10
10
2009-10-29 12:48:03 +0000

use Cmdow es una utilidad de línea de comandos Win32 para NT4/2000/XP/2003 que permite listar, mover, redimensionar, renombrar, ocultar/desocultar, desactivar/habilitar, minimizar, maximizar, restaurar, activar/inactivar, cerrar, matar y más.

Ejecutar un archivo por lotes oculto pasándole los parámetros:-

cmdow /run /hid mybat arg1 “arg 2”

10
10
10
2013-01-13 03:36:21 +0000

Si tu Archivo por lotes puede caber en una línea y tantos caracteres, entonces usa un atajo haciendo clic derecho dentro de una carpeta puesta en un directorio aleatorio, y salta a través del resto del asistente, y por último haz clic derecho en el atajo que acabas de crear y haz clic en propiedades y bajo objetivo, introduce lo que normalmente pondrías en un archivo de murciélagos. ¡Y Bobs tu tío!

Pros:

No Command Window
 Ability to use an icon
 Same Functionality of bat file

Contras:

Limited to one line, so many characters
9
9
9
2009-10-29 12:49:03 +0000

Ejecute el script a través de un trabajo de at sin hacerlo interactivo:

at 11:00 script.bat

Otra solución, si no le importa instalar algo como Python, podría simplemente crear un script y ejecutarlo con pythonw (la versión enlazada para operaciones GUI). Como no estás usando ningún API gráfico, la ventana no se mostrará. Simplemente use las llamadas a os.system() y se imitará a un script por lotes, ya que es lo mismo que escribir las cadenas en la línea de comandos.

Ejemplo:

import os

os.system("tasklist > C:\tasks.txt")
os.system("ipconfig /all > C:\netinfo.log")
7
7
7
2014-05-12 08:25:28 +0000

No me gusta la solución de VBScript.

Descargue y copie nircmd.exe a su carpeta %systemroot%\system32, luego agregue este comando a la primera línea de su lote:

nircmd.exe win hide ititle "cmd.exe"

o haga el título de su lote personalizado primero con el comando title para evitar ocultar todas las ventanas cmd, así:

title MyBatch
nircmd.exe win hide ititle "MyBatch"
7
7
7
2009-10-29 15:54:30 +0000

Puedes ejecutarlo minimizado fácilmente.

start /MIN batch.cmd
6
6
6
2013-01-09 20:57:35 +0000

Con Windows7, se puede utilizar el panel de control de “Tareas programadas” para programar un archivo por lotes para que se ejecute en segundo plano de forma invisible con los permisos especificados e incluso como la cuenta del “SISTEMA”. Véase la captura de pantalla a continuación:

Además, aunque no con tantas capacidades, también puede crear una tarea de script por lotes invisible como esta desde la línea de comandos usando el comando “AT.exe” sin la opción ‘/interactive’.

5
5
5
2016-10-30 13:15:17 +0000

El excelente Bat To Exe Converter convertirá tu archivo .bat o .cmd en un archivo .exe.

Tiene una simple UI. Puedes elegir no tener una ventana de consola seleccionando una opción Exe Format de XX Bit | Windows (Invisible). Además, te permite asignar un icono, establecer una contraseña y varias otras opciones.

4
4
4
2011-01-26 19:38:48 +0000

Parece que alguien hizo una lista de las 7-8 maneras de funcionar ‘silenciosamente’:

http://forums.techguy.org/dos-other/644932-solved-howto-run-batch-file.html

4
4
4
2017-06-19 08:27:15 +0000

Aún así, otra forma, desde C/C++, es usar la función CreateProcess con la bandera CREATE_NO_WINDOW. Tiene mucha potencia extra que no se muestra aquí. Es lo mínimo que necesitas para reemplazar el sistema o la familia de las crías.

4
4
4
2017-04-16 14:03:20 +0000

También puedes crear un AutoHotkey guión:

#NoTrayIcon ; To prevent momentary icon pop-up
run whatever.bat arg1 arg2,,hide
3
3
3
2014-09-24 17:58:35 +0000

Lo hice con éxito con nircmd de esta manera:

  1. descargar nircmd.exe del link
  2. crear su archivo .bat
  3. la primera línea del archivo .bat tiene que ser esta: nircmd.exe win hide ititle "cmd.exe"
  4. selecciona ambos archivos y crea un archivo autoextraíble usando Winrar
  5. en la pestaña “general”, marca la casilla “create autoextract file”
  6. en la pestaña “advance” selecciona el botón “autoextract”
  7. hay una nueva ventana y selecciona la pestaña “mode” y luego selecciona la opción: “ocultar todo”
  8. seleccione la pestaña “actualizar” y seleccione la opción “sobrescribir los archivos existentes”
  9. 9. Seleccione la pestaña “general” y defina una carpeta de destino para la extracción si lo desea y en la casilla “Ejecutar después de la extracción” escriba la ruta completa donde su .bat será extraído. Ej: si define la carpeta de extracción como: “c:\windows\N” entonces la ruta completa a ejecutar después de la extracción será: “c:\windows\fichero.bat” (en el caso de que su .bat se llame: archivo.bat)
  10. haga clic en aceptar en todas las ventanas

Ahora tendrá un archivo .exe que después de hacer doble clic en él e instalarlo, su .bat se ejecutará totalmente oculto.

2
2
2
2016-01-30 16:44:14 +0000

Añadiendo mi respuesta aquí desde otro post ya que era un duplicado y no veo esta solución aquí, así que ahora hay 17 respuestas diferentes para cómo se puede ejecutar un archivo por lotes oculto. Voy a borrar mi respuesta en ese post en algún momento en el futuro cercano.

Crear su script de lote con su lógica de lote y comandos en él, y luego crear un nuevo archivo con la extensión .VBS, usar la lógica de abajo (ejemplo que proporcioné más abajo) y simplemente conectar la ruta completa a su archivo .CMD o .BAT con el PING -t <IPAddress>, etc. para que ejecute el lote de manera oculta y no muestre la ventana de comandos cuando se ejecute.

Cuando la lógica del ejemplo siguiente especifica C:\Folder\BatchFileName.cmd, cambie eso para que apunte a la secuencia de comandos del lote con los comandos que está ejecutando manualmente, etc. ahora.

Guarde el archivo .VBS y prográmelo con Task Scheduler Problemas al programar una tarea en windows7 para que se ejecute en un horario indefinido según sus necesidades.

De lo contrario, sólo tiene que hacer doble clic en el archivo .VBS para ejecutar el infinito comando PING que pone en el archivo por lotes que apunta a medida que lo necesite.

NOTA: Creo que aquí es donde obtuve esta lógica de script, pero funciona de manera confiable para el mismo propósito que necesitas aquí, que es asegurar que la ventana de comandos esté oculta cuando se ejecuta un archivo por lotes Fuente de Fallas del Servidor

Ejemplo VBS SCRIPT RUN COMMAND LINE BATCH HIDING CMD WINDOW

Set WinScriptHost = CreateObject("WScript.Shell")
WinScriptHost.Run Chr(34) & "C:\Folder\BatchFileName.cmd" & Chr(34), 0
Set WinScriptHost = Nothing
2
2
2
2012-10-12 07:16:50 +0000
  • He compilado todas las formas que conozco para iniciar un proceso oculto con un lote sin herramientas externas. Con un script listo para usar (algunos de ellos bastante ricos en opciones), y todos ellos forman la línea de comandos. Cuando es posible, también se devuelve el PID. Las herramientas utilizadas son IEXPRESS, SCHTASKS, WScript, Shell, Win32 y JScript.
2
2
2
2017-03-09 18:01:08 +0000

A pesar de que ya he respondido a esto, aquí hay otro enfoque. La diferencia aquí es que el script de lote puede auto-ocultarse durante su ejecución. Necesitarás dos scripts adicionales - windowMode.bat y getCMDPid.bat (ambos contienen el código .net). Aquí cómo puede ser usado:

@echo off
call getCmdPid
call windowMode -pid %errorlevel% -mode hidden

echo this should be written into log despite the cmd window is hidden>log
echo ending the log>>log
exit
1
1
1
2011-07-02 09:04:44 +0000

No es necesario hacer nada especial.

Si está ejecutando los archivos por lotes desde un servicio de Windows, deberían estar ocultos de forma predeterminada a menos que active la opción “Permitir que el servicio interactúe con el escritorio” en el servicio.

1
1
1
2010-06-14 14:11:34 +0000
cmdow /run /hid "file.extention" arg1 "arg 2"
0
0
0
2018-05-05 10:39:45 +0000

Necesitaba ocultar la ventana de un archivo por lotes llamado desde un menú contextual del explorador, y también necesitaba añadir citas al parámetro. Ninguna de las respuestas me funcionó, así que estoy añadiendo mi propia solución.

Tenía esto en el “comando” del registro para un menú contextual del explorador:

cmd /c C:\mypath\myprogram.bat "%1"

Así que para reemplazarlo tuve que crear un vbs como este:

WScript.CreateObject ("WScript.shell").run "cmd /c C:\mypath\myprogram.bat """ & WScript.Arguments(0) & """", 0, False

Guardar en un lugar como C:\mypath\myscript.vbs y llamarlo así en el registro:

wscript "C:\mypath\myscript.vbs" "%1"

Nota que la ruta .bat no puede tener espacios, así que reemplázalo con el nombre de archivo 8.3. Así que por ejemplo C:\Program Files\myprogram.bat debe ser referido como C:\Progra~1\myprogram.bat. Para ver el nombre de archivo 8.3 usa dir /x

0
0
0
2018-06-21 08:15:59 +0000

Estoy creado RunApp para hacer tal trabajo y también lo uso en mi entorno de producción, espero que ayude.

La configuración es como la siguiente:

fichero: config.arg

:style:hidden

MyBatchFile.bat
arg1
arg2

Y en su lugar lanzar runapp.exe.

0
0
0
2013-06-07 20:50:58 +0000

Tuve el mismo problema, pero lo resolví: Shell("filehere" & "parametersforbatchfilehere", vbHidden)

0
0
0
2012-12-17 17:03:50 +0000

Empecé a tratar de resolver esto y nunca lo logré. Esto fue lo más cerca que estuve:

@echo off
if not defined PIL (
    set PIL=1
    start /min "" %~0
    exit /b
)
TITLE Hello World
echo Hello world!
pause>nul
-1
-1
-1
2014-08-15 23:36:30 +0000

Esto funciona para las ventanas 8 (posiblemente otras)

  1. Crear un archivo por lotes como es normal
  2. Crear un atajo al archivo por lotes
  3. Haga clic con el botón derecho del ratón en el atajo > propiedades
  4. Haga clic en Layout
  5. Desmarque “Let system position window”
  6. Establezca la posición de la izquierda tp -1000
  7. Haga clic en apply

  8. Haga clic en el botón “Apply”. Haz clic en el atajo y se ejecutará pero no lo verás :)