Esegui un file batch in modo completamente nascosto

Sto cercando un modo per eseguire un file batch (.bat) senza niente visibile all'utente (nessuna window, nessun nome della barra delle applicazioni, .etc ..).

Non voglio usare un programma per farlo, sto cercando qualcosa di più pulito. Ho trovato una soluzione che utilizza VBScript, ma non mi piace molto usare VBS.

Soluzione 1:

Salvare questa row di text come file invisible.vbs :

CreateObject ("Wscript.Shell") Esegui "" "" & WScript.Arguments (0) & "" "", 0, falso

Per eseguire invisibilmente un programma o un file batch, utilizzalo come questo:

wscript.exe "C: \ Wherever \ invisible.vbs" "C: \ qualche altro luogo \ MyBatchFile.bat"

Per essere anche in grado di pass-on / relay un elenco di argomenti utilizzare solo due doppie virgolette

CreateObject ("Wscript.Shell") Esegui "" & WScript.Arguments (0) & "", 0, False

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

Soluzione 2:

Utilizza uno strumento di row di command per lanciare in silenzio un process: silenzioso , hidecon o hideexec .

Per hide file batch o file di command o qualsiasi file …. Utilizzare Windows XP incorporato in utilità IExpress.exe per creare un file .EXE dal file batch. Quando si utilizza IExpress assicurarsi di controllare l'opzione nascosta e controllare il segno di tutte le caselle di non mostrare nulla. Dopo aver creato il tuo .exe, posizionalo in qualsiasi cartella di command di esecuzione scegliendo e non lo vedrai mai venire.

utilizzare Cmdow è un'utilità di comandi Win32 per NT4 / 2000 / XP / 2003 che consente di elencare, spostare, ridimensionare, rinominare, hide / distriggersre, disabilitare / abilitare, minimizzare, massimizzare, ripristinare, triggersre / intriggersre, Di Più.

Eseguire un file batch nascosto passando i parametri: –

cmdow / eseguire / hide mybat arg1 "arg 2"

Eseguire lo script tramite un lavoro in assoluto senza renderlo interattivo:

 at 11:00 script.bat 

Un'altra soluzione, se non ti dispiace installare qualcosa come Python, puoi semplicemente creare uno script e pythonw con pythonw (la versione collegata per le operazioni GUI). Poiché non si utilizzano API grafiche, la window non verrà visualizzata. Utilizza semplicemente le chiamate a os.system() e imiterà uno script batch, in quanto è lo stesso di digitare le stringhe nella row di command.

Esempio:

 import os os.system("tasklist > C:\tasks.txt") os.system("ipconfig /all > C:\netinfo.log") 

Utilizzando Windows7, è ansible utilizzare il pannello di controllo "Attività pianificata" per pianificare un file batch per eseguire in background invisibile con le autorizzazioni specificate e anche come account "SYSTEM". Guarda l'image in basso:

immettere qui la descrizione dell'immagine

Inoltre, sebbene con less funzionalità, è anche ansible creare un task di script batch invisibile come questo dalla row di command utilizzando il command "AT.exe" senza l'opzione '/ interactive'.

Sembra che qualcuno ha fatto un elenco dei modi 7-8 per eseguire "silenzioso":

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

Se il tuo file batch può essere inserito in una row e tanti caratteri, basta utilizzare un collegamento rapido facendo clic con il button destro del mouse all'interno di una cartella inserita in una directory random e salta nel resto della procedura guidata e, infine, fai clic destro sul collegamento appena creato e fare clic su properties; e sotto bersaglio, immettere ciò che di solito metteresti in un file di pipistrelli. E bobba tuo zio!

Professionisti:

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

Contro:

  Limited to one line, so many characters 

Non mi piace la soluzione VBScript.

Scaricare e copiare nircmd.exe nella cartella %systemroot%\system32 , quindi aggiungere questo command alla prima row del tuo batch:

 nircmd.exe win hide ititle "cmd.exe" 

o fare il primo titolo di batch personalizzato con il command title per evitare di hide tutte le windows cmd , come questa:

 title MyBatch nircmd.exe win hide ititle "MyBatch" 

Puoi eseguirlo facilmente ridimensionato.

 start /MIN batch.cmd 

Convertire il tuo pipistrello a un exe e non avrà automaticamente una window di console.

Un altro modo, da C / C ++, è quello di utilizzare la function CreateProcess con il flag CREATE_NO_WINDOW. Ha un sacco di potere extra non mostrato qui. Questo è solo il minimo necessario per sostituire il sistema () o la famiglia _spawn ().

 STARTUPINFO si; ZeroMemory( &si, sizeof(si) ); si.cb = sizeof(si); PROCESS_INFORMATION pi; ZeroMemory( &pi, sizeof(pi) ); // Spawn creates a cmd.exe window. CreateProcess doesn't. //if ( _spawnl( _P_WAIT, szFileNameBAT, szFileNameBAT, NULL ) ) { if ( !CreateProcess( szFileNameBAT, szFileNameBAT, NULL, NULL, false, CREATE_NO_WINDOW, NULL, NULL, &si, &pi ) ) { MyErrorFunc( "CreateProcess( \"%s\" ): %d", szFileNameBAT, GetLastError() ); goto MyErrorHandling; } WaitForSingleObject( pi.hProcess, INFINITE ); CloseHandle( pi.hProcess ); CloseHandle( pi.hThread ); 

Non devi fare niente di speciale.

Se si esegue i file batch da un servizio Windows, dovrebbero essere nascosti per impostazione predefinita, a less che non abilitate l'opzione "Consenti servizio per interagire con il desktop" nel servizio.

Aggiungendo la mia risposta da un altro post poiché è stato un duplicato e non vedo questa soluzione in questo modo ora ci sono 17 diverse risposte per come è ansible eseguire un file batch nascosto. Eliminerò la mia risposta su quel post ad un certo punto nel prossimo futuro.

Crea il tuo script batch con la tua logica e comandi batch e crea un nuovo file con estensione .VBS , usa la logica qui sotto (esempio riportto di seguito) e basta colbind il path completo al file .CMD o .BAT con il command PING -t <IPAddress> , ecc., in modo che esegua il batch in modo nascosto senza visualizzare la window di command quando viene eseguita.

Dove la logica nell'esempio riportto di seguito specifica C:\Folder\BatchFileName.cmd cambiare che per puntare allo script batch con i comandi che si esegue manualmente, ecc adesso.

Salvare il file .VBS e pianificarlo con Task Scheduler Problemi di pianificazione di un'attività su windows7 per eseguire su una pianificazione indefinita per le proprie esigenze.

Altrimenti basta fare doppio clic sul file .VBS per eseguire il command PING infinito inserito nel file batch che lo indichi come necessario.

NOTA: Credo che questo è where ho ottenuto questa logica di script da ma funziona in modo affidabile per lo stesso scopo che ti serve qui per assicurare che la window di command sia nascosta quando viene eseguito un file batch Sorgente di errore server

ESEMPIO VBS SCRIPT RUN LINEA COMANDO BATCH HIDING WINDOW CMD

 Set WinScriptHost = CreateObject("WScript.Shell") WinScriptHost.Run Chr(34) & "C:\Folder\BatchFileName.cmd" & Chr(34), 0 Set WinScriptHost = Nothing 

Qui ho compilato tutti i modi che conosco per avviare un process nascosto con batch senza strumenti esterni. Con uno script pronto all'uso (alcuni dei quali abbastanza ricchi di opzioni) e tutti formano la row di command. Il PID viene restituito. Gli strumenti utilizzati sono IEXPRESS, SCHTASKS, WScript.Shell, Win32_Process e JScript.Net

Lo ho fatto con successo con nircmd in questo modo:

  1. scaricare nircmd.exe dal link
  2. creare il tuo file .bat
  3. la prima row del file .bat deve essere questo: nircmd.exe win hide ititle "cmd.exe"
  4. select entrambi i file e creare un file di auto estrazione usando winrar
  5. nella scheda "generale", select la casella "crea file estraibile"
  6. nella scheda "avanzamento" select il button "estrazione automatica"
  7. c'è una nuova window e seleziona la scheda "modalità" quindi seleziona l'opzione "nascondi tutto"
  8. select l'opzione "aggiornamento" e select l'opzione "sovrascrivi i file esistenti"
  9. Selezionare la scheda "generale" e definire una cartella di destinazione per l'estrazione se lo si desidera e nella casella "Excecute after extraction" scrivere il path completo in cui verrà estratto il tuo .bat. Esempio: se si definisce la cartella di estrazione come: "c: \ windows \", il path completo per excute dopo l'estrazione sarà: "c: \ windows \ file.bat" (nel caso in cui il nome .bat è denominato: file.bat )
  10. fai clic su Accetta su tutte le windows

Ora avrai un file exe che dopo averlo fatto clic su di esso e installato, il tuo .bat verrà eseguito totalmente nascosto.

Nonostante l'ho già risposto, qui è un altro approccio. Il diverso qui è che lo script batch può auto-nascondersi durante la sua esecuzione. Avrai bisogno di due script aggiuntivi, però – windowMode.bat e getCMDPid.bat (entrambi contengono il codice .net ). Ecco come allora può essere utilizzato:

 @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 

È inoltre ansible creare uno script AutoHotkey :

 #NoTrayIcon ; To prevent momentary icon pop-up run whatever.bat arg1 arg2,,hide 
 cmdow /run /hid "file.extention" arg1 "arg 2" 

Ho avuto lo stesso problema, ma ho capito:
Shell("filehere" & "parametersforbatchfilehere", vbHidden)

Ho iniziato a cercare di capirlo e mai realmente riuscito. Questo è stato vicino come ho ottenuto:

 @echo off if not defined PIL ( set PIL=1 start /min "" %~0 exit /b ) TITLE Hello World echo Hello world! pause>nul 

Questo funziona per windows 8 (forse altri)

  1. Creare un file batch come normale
  2. Creare un collegamento al file batch
  3. Fare clic con il button destro del mouse sulle properties; di scelta rapida
  4. Fare clic su Layout
  5. Distriggers "Distriggers la window di posizione del sistema"
  6. impostare la posizione sinistra tp -1000
  7. fare clic su Applica

  8. Clicca sulla scorciatoia e functionrà ma non lo vedi 🙂