Esecuzione di CMD o BAT in modalità silenziosa
-
03-07-2019 - |
Domanda
Come posso eseguire un file CMD o .bat in modalità silenziosa? Sto cercando di impedire che l'interfaccia CMD venga mostrata all'utente.
Soluzione
Nella domanda StackOverflow ho proposto un modo per eseguire un file batch in background ( nessuna finestra DOS visualizzata )
Questo dovrebbe rispondere alla tua domanda.
Eccolo:
Dal tuo primo script, chiama il tuo secondo script con la seguente riga:
wscript.exe invis.vbs run.bat %*
In realtà, stai chiamando uno script vbs con:
- il [percorso] \ nome della tua sceneggiatura
- tutti gli altri argomenti necessari al tuo script (
% *
)
Quindi, invis.vbs chiamerà il tuo script con Metodo Run () di Windows Script Host , che accetta:
- intWindowStyle: 0 significa " finestre invisibili "
- bWaitOnReturn: false significa che il tuo primo script non deve attendere il completamento del secondo script
Vedi la domanda per lo script invis.vbs completo:
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run """" & WScript.Arguments(0) & """" & sargs, 0, False
^
means "invisible window" ---|
Aggiornamento dopo il feedback di Tammen:
Se ci si trova in una sessione DOS e si desidera avviare un altro script "in background", un semplice / b
(come dettagliato in stessa domanda di cui sopra ) può essere sufficiente:
Puoi usare
start / b second.bat
per avviare un secondo file batch in modo asincrono dal tuo primo che condivide la finestra del tuo primo.
Altri suggerimenti
Includi la frase
@echo off
proprio nella parte superiore del tuo script pipistrello.
Utilizza il convertitore avanzato da BAT a EXE da http://www.battoexeconverter.com
Questo ti permetterà di incorporare qualsiasi binario aggiuntivo con il tuo file batch in un unico EXE completamente silenzioso e il suo freeware
Penso che questa sia la soluzione più semplice e più breve per eseguire un file batch senza aprire la finestra DOS, può essere molto fonte di distrazione quando si desidera pianificare l'esecuzione periodica di una serie di comandi, quindi la finestra DOS continua ad apparire, qui è la tua soluzione. Utilizzare uno script VBS per chiamare il file batch ...
Set WshShell = CreateObject("WScript.Shell" )
WshShell.Run chr(34) & "C:\Batch Files\ mycommands.bat" & Chr(34), 0
Set WshShell = Nothing
Copia le righe sopra in un editor e salva il file con estensione .VBS. Modifica il nome e il percorso del file .BAT di conseguenza.
Usa Bat To Exe Converter per fare questo
http://download.cnet.com/ Bat-To-Exe-Converter / 3000-2069_4-10555897.html
(Scegli Link per il download diretto )
1 - Apri Bat to Exe Converter, seleziona il tuo file Bat.
2 - Nel menu Opzioni selezionare " Applicazione invisibile " ;, quindi premere il pulsante di compilazione.
Fatto!
Prova SilentCMD . Questo è un piccolo programma freeware che esegue un file batch senza visualizzare la finestra del prompt dei comandi.
Se voglio eseguire il prompt dei comandi in modalità silenziosa, allora c'è un semplice comando vbs:
Set ws=CreateObject("WScript.Shell")
ws.Run "TASKKILL.exe /F /IM iexplore.exe"
se volessi aprire un URL in cmd in silenzio , ecco un codice:
Set WshShell = WScript.CreateObject("WScript.Shell")
Return = WshShell.Run("iexplore.exe http://otaxi.ge/log/index.php", 0)
'wait 10 seconds
WScript.sleep 10000
Set ws=CreateObject("WScript.Shell")
ws.Run "TASKKILL.exe /F /IM iexplore.exe"
Sono abbastanza fiducioso che mi piace questo metodo il migliore. Copia e incolla il codice qui sotto in un file .vbs. Da lì chiamerai il file batch ... quindi assicurati di modificare l'ultima riga per specificare il percorso e il nome del file batch (che dovrebbe contenere il file che desideri avviare o eseguire le azioni necessarie)
Const HIDDEN_WINDOW = 12
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set objStartup = objWMIService.Get("Win32_ProcessStartup")
Set objConfig = objStartup.SpawnInstance_
objConfig.ShowWindow = HIDDEN_WINDOW
Set objProcess = GetObject("winmgmts:root\cimv2:Win32_Process")
errReturn = objProcess.Create("C:\PathOfFile\name.bat", null, objConfig, intProcessID)
Ha sicuramente funzionato per me. I commenti sono benvenuti :)
Sono stato creato RunApp per fare un simile lavoro e anche usarlo nel mio ambiente di produzione, spero che sia d'aiuto.
La configurazione come di seguito:
file: config.arg
:style:hidden
MyBatchFile.bat
arg1
arg2
E avvia invece runapp.exe
.