it-swarm-eu.dev

Esegui un file batch in un modo completamente nascosto

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

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

130
Moayad Mardini

Soluzione 1:

Salva questa riga di testo come file invisible.vbs:

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

Per eseguire in modo invisibile qualsiasi programma o file batch, usalo in questo modo:

wscript.exe "C:\Wherever\invisible.vbs" "C:\Some Other Place\MyBatchFile.bat"

Per essere in grado di inoltrare/inoltrare un elenco di argomenti utilizzare solo due virgolette doppie

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

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

Soluzione 2:

Utilizzare uno strumento da riga di comando per avviare silenziosamente un processo: Quiet , hidecon o hideexec .

112
harrymc

Per nascondere i file batch o i file di comando o qualsiasi file .... Utilizzare Windows XP incorporato nell'utilità IExpress.exe per creare un file .EXE fuori dal file batch. Quando usi IExpress assicurati di controllare l'opzione di esecuzione nascosta e seleziona tutte le caselle per non mostrare nulla. Dopo aver creato il tuo .exe, posizionalo in qualunque cartella di comando che hai scelto e non lo vedrai mai.

25
Paul Cheselske

usa Cmdow è una utility a linea di comando Win32 per NT4/2000/XP/2003 che consente di elencare, spostare, ridimensionare, rinominare, nascondere/scoprire, disabilitare/abilitare, minimizzare, massimizzare, ripristinare, attivare/disattivare, Windows, attivato/disattivato chiuso, ucciso e altro ancora.

Esegui un file batch nascosto passando i parametri: -

cmdow/run/hid mybat arg1 "arg 2"

8
joe

Se il tuo file batch può essere contenuto in una riga e in tanti caratteri, usa semplicemente una scorciatoia facendo clic con il pulsante destro del mouse all'interno di una cartella inserita in una directory casuale, quindi passa al resto della procedura guidata e infine fai clic destro sulla scorciatoia appena creata e fare clic su Proprietà e sotto il target, inserire ciò che normalmente si inserisce in un file bat. E Bob, tuo zio!

Professionisti:

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

Contro:

 Limited to one line, so many characters
8
Jack S

Esegui lo script tramite un processo senza renderlo interattivo:

at 11:00 script.bat

Un'altra soluzione, se non ti dispiace installare qualcosa come Python, potresti semplicemente creare uno script ed eseguirlo con pythonw (la versione collegata per le operazioni della GUI). Dal momento che non utilizzi alcuna API grafica, la finestra non verrà visualizzata. Basta usare le chiamate su os.system() e simulerà uno script batch, poiché equivale a digitare le stringhe nella riga di comando.

Esempio:

import os

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

Non mi piace la soluzione VBScript.

Scarica e copia nircmd.exe nella tua cartella %systemroot%\system32, quindi aggiungi questo comando alla prima riga del tuo batch:

nircmd.exe win hide ititle "cmd.exe"

o rendere il titolo del batch personalizzato prima con il comando title per evitare di nascondere tutte le finestre cmd, in questo modo:

title MyBatch
nircmd.exe win hide ititle "MyBatch"
5
BijaN-R

Puoi eseguirlo minimizzato facilmente.

start /MIN batch.cmd
5
Brad Gilbert

Utilizzando Windows 7, è possibile utilizzare il pannello di controllo "Operazione pianificata" per pianificare un file batch da eseguire in background in modo invisibile con autorizzazioni specifiche e persino come account "SYSTEM". Vedi la schermata qui sotto:

enter image description here

Inoltre, sebbene con meno funzionalità, è possibile anche creare un'attività di script batch invisibile come questa dalla riga di comando utilizzando il comando "AT.exe" senza l'opzione "/ interactive".

5
djangofan

L'eccellente Convertitore di Bat To Exe convertirà il tuo file .bat o .cmd in un file .exe.

Ha una semplice interfaccia utente. Puoi scegliere di non avere una finestra della console selezionando l'opzione "Applicazione invisibile". Inoltre, ti consente di assegnare un'icona, i file associati al pacchetto e diverse altre opzioni.

Ecco uno screenshot della finestra dell'interfaccia principale:

 
Si noti che questa immagine non è aggiornata. Mostra la versione 2.4.8 e, a partire da settembre 2018, il sito Web offre la versione 3.0.10.0 (ultimo aggiornamento 2018-03-23).

Attenzione: il sito www.f2ko.de si collega a coinhive.com, che è ampiamenteidentificatocomemalware .

3
BullyWiiPlaza

ANCORA UN ALTRO, da C/C++, si usa la funzione CreateProcess con il flag CREATE_NO_WINDOW. Ha un sacco di energia extra non mostrata qui. Questo è solo il minimo necessario per sostituire system () 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 );
3
Swiss Frank

Puoi anche creare un AutoHotkey script:

#NoTrayIcon ; To prevent momentary icon pop-up
run whatever.bat arg1 arg2,,hide 
3
endolith

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

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

3
Rolnik

L'ho fatto con nircmd in questo modo:

  1. scarica nircmd.exe dal link
  2. crea il tuo file .bat
  3. la prima riga del file .bat deve essere questa: nircmd.exe win hide ititle "cmd.exe"
  4. seleziona entrambi i file e crea un file autoestraente usando winrar
  5. nella scheda "generale", selezionare la casella "crea file autoextract"
  6. nella scheda "anticipo" selezionare il pulsante "autoextract"
  7. c'è una nuova finestra e selezionare la scheda "modalità", quindi selezionare l'opzione: "nascondi tutto"
  8. seleziona la scheda "aggiorna" e seleziona l'opzione "sovrascrivi i file esistenti"
  9. Seleziona la scheda "generale" e definisci una cartella di destinazione per l'estrazione, se lo desideri, e nella casella "Excecute after extraction" scrivi il percorso completo in cui estrarre il tuo .bat. Es: se si definisce la cartella di estrazione come: "c:\windows \", il percorso completo per l'esclusione dopo l'estrazione sarà: "c:\windows\file.bat" (nel caso in cui il file .bat sia denominato: file.bat )
  10. fare clic su accetta su tutte le finestre

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

2
ZEUS

Aggiungendo la mia risposta qui da un altro post poiché era un duplicato e non vedo questa soluzione qui, quindi ora ci sono 17 risposte diverse su come è possibile eseguire un file batch nascosto. Cancellerò la mia risposta su quel post ad un certo punto nel prossimo futuro.

Crea il tuo script batch con la tua logica batch e i comandi al suo interno, quindi crea un nuovo file con estensione .VBS, utilizza la logica sottostante (esempio che ho fornito di seguito) e inserisci il percorso completo del tuo .CMD o .BAT file con PING -t <IPAddress>, comandi ecc. in modo che esegua il batch in modo nascosto non mostrando la finestra di comando quando viene eseguito.

Laddove la logica nell'esempio seguente specifica C:\Folder\BatchFileName.cmd cambia quella per indicare lo script batch con i tuoi comandi che stai eseguendo manualmente, ecc. Ora.

Salva il file .VBS e pianificalo con Task SchedulerProblemi nella pianificazione di un'attività su windows7 per eseguire una pianificazione indefinita per le tue esigenze.

Altrimenti, basta fare doppio clic sul file .VBS per eseguire il comando PING infinito che hai inserito nel file batch che hai indicato come necessario.

NOTA: Credo che questo sia il punto da cui ho ottenuto questa logica di script ma funziona in modo affidabile per lo stesso scopo di cui hai bisogno qui per garantire che la finestra di comando sia nascosta quando viene eseguito un file batch Server Fault Source

ESEMPIO 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
1
Pimp Juice IT

QuiHo compilato tutti i modi che conosco per avviare un processo nascosto con batch senza strumenti esterni. Con script pronti per l'uso (alcuni dei quali piuttosto ricchi di opzioni) e tutti formano la riga di comando. È possibile anche restituire il PID. Gli strumenti utilizzati sono IEXPRESS, SCHTASKS, WScript.Shell, Win32_Process e JScript.Net

1
npocmaka

Non devi fare niente di speciale.

Se si stanno eseguendo i file batch da un servizio Windows, dovrebbero essere nascosti per impostazione predefinita a meno che non si abiliti l'opzione "Consenti al servizio di interagire con il desktop" sul servizio.

1
sgmoore

Nonostante abbia già risposto, ecco un altro approccio. La differenza è che lo script batch può auto-nascondersi durante l'esecuzione. Sono necessari due script aggiuntivi - windowMode.bat e getCMDPid.bat (entrambi contengono il codice .net). Ecco come possono essere utilizzati:

@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
npocmaka
cmdow /run /hid "file.extention" arg1 "arg 2"
1
malak

Avevo bisogno di nascondere la finestra per un file batch chiamato da un menu di scelta rapida di Explorer, e avevo anche bisogno di aggiungere virgolette sul parametro. Nessuna delle risposte ha funzionato per me, quindi aggiungo la mia soluzione.

Ho avuto questo sul registro "comando" per un menu di scelta rapida di Explorer:

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

Quindi per sostituirlo ho dovuto creare un vbs come questo:

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

Salva in un posto come C:\mypath\myscript.vbs e chiamalo così nel registro:

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

Si noti che il percorso .bat non può avere spazi, quindi sostituirlo con il nome file 8.3. Ad esempio, C:\Program Files\myprogram.bat deve essere referenziato come C:\Progra~1\myprogram.bat. Per vedere il nome file 8.3 utilizzare dir /x

0
bortao

Sono stato creato RunApp per fare un tale lavoro e anche usarlo nel mio ambiente di produzione, spero che sia di aiuto.

La configurazione come di seguito:

file: config.arg

:style:hidden

MyBatchFile.bat
arg1
arg2

E lancia invece runapp.exe.

0
James Yang

Ho iniziato a cercare di capirlo e non ci sono mai riuscito. Questo è stato il più vicino che ho ricevuto:

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

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

0
Alan Panayotov