Batch Datei unsichtbar ausführen möglich?

5 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

Auch wenn das Einige behaupten es wäre unmöglich eine Batch total unsichtbar auszuführen... es geht...

Man muss zwar einen eigenen Befehl dafür schreiben, aber das ist mit Javascrrip / VBScript kein Problem.

Ich bevorzuge Javacript...

Erklärung zu .ShellExecute https://ss64.com/vb/shellexecute.html

In der ersten Variante wird ein PopUp eingeblendet, das Fragt ob die Hintergrundbatch beendet werden soll. https://ss64.com/vb/popup.html

demo1.cmd

@echo off
  rem eigenen Namen dieser Batch ermitteln
set self=%~f0
  rem wenn  kein Parameter  (hier 'runFlag') an diese batch übergeben wurde maqche  folgendes:
if  not "%~1"=="" goto :mainloop
  rem diese Batch ist nun im Startmodus
  rem Arbeitsverzeichnis ist das verzeichnis  mit dieser Batch
cd %~dp0
  rem schreibe  klines  JavaScript, welches  die Batch unsichtbar startet im den Tempordner
echo var shell = new ActiveXObject('shell.application'); shell.ShellExecute('%self:\=\\%', 'runFlag', '', 'open', 0)>"%temp%\runHidden.js"
  rem führe das  Javascript aus
cscript /nologo "%temp%\runHidden.js"
  rem Aufräumen...lösche  das JavaScript
del /q "%temp%\runHidden.js"
  rem beende die Batch im Startmodus
exit /b


  rem hier  beginnt der eigentliche Teil, welcher unsichtbar  läuft. 
:mainloop
  rem ab hier kannst Du  auch Deinen Code verwenden...
  rem  ich  bin  nett und lasse ein PopUp erscheinen das  Fragt ob es weitermachen soll.... Ansonsten liese sich  die Hintergrundbatch  nur  im Taskmanager beenden.
  
  rem wenn das JavaScript für das PopUp nicht existiert erzeuge es im Tempordner  
if not exist "%temp%\PopUp.js"      echo WSH.Echo(new ActiveXObject('WScript.Shell').PopUp('Hintergrund Batch beenden...?',0,'Frage',20));>"%temp%\PopUp.js"
  rem warte 10 Sekunden
Timeout 10 >nul
  rem Starte das PopUp  und werte die Antwort aus Rückgabewerte:6=Ja 7=Nein
for /f %%f in ('cscript /nologo "%temp%\PopUp.js"') do (
        rem wenn ja setze die Variable %Stop% = 1
    if "%%f"=="6" ( set "stop=1")
)


  rem wenn Stop ungleich 1 gehe wieder zum Sprungpunkt :mainloop und blende das PopUp erneut ein... und wieder und wieder....
if "%stop%" neq "1" goto :mainloop
  rem wenn mit Ja geantwortet wurde, ist die Variable %Stop%=1   und Aufräumen, die Hintergrundbatch wird beendet.
  rem Aufräumen...lösche  das JavaScript
del /q "%temp%\PopUp.js"  
exit /b

Die zweite Variante ist Trickreicher und kommt ohne PopUp klar. Sie startet ebenso wie Erstere. Beendet jedoch eine evtl. laufende Hintergrundbatch.

Erster Start startet die Hintergrundbatch . der Nächste beendet sie wieder.

Das habe ich so eingerichtet, damit es ein Spaß bliebt, denn wenn man eine Batch über den Taskmanager beenden muss hört der Spaß auf...

Demo2.cmd

@echo off
  rem alle  unkommentierte  wie gehabt....
  rem dem unsichtbaren Zielfenster einen markanten Namen geben:
set "WindowName=Rumplheinzchen"  


set self=%~f0
if  not "%~1"=="" goto :mainloop
cd %~dp0


  rem damit man nicht die versteckte Batch im Taskmanager beenden muss, wird eine evtl laufende versteckte Version gekillt
taskkill /f  /fi "windowtitle eq %WindowName%" | find "PID">nul &&(
      rem war Dies erfolgreeich : Meldung ausgeben
    echo HintergrundBatch beendet!
      rem warte 3 sekunden
    timeout 3 >nul
      rem batch ohne weitere Maßnamen beenden
    exit /b
)


echo var shell = new ActiveXObject('shell.application'); shell.ShellExecute('%self:\=\\%', 'runFlag', '', 'open', 0)>"%temp%\runHidden.js"
cscript /nologo "%temp%\runHidden.js"
del /q "%temp%\runHidden.js"
exit /b


  rem hier  beginnt der eigentliche Teil, welcher unsichtbar  läuft. 
:mainloop
  rem Fenstertitel setzen!wichtig, damit Taskkill die Hihtergrundbatch ermitteln kann!
title %WindowName%
  rem ab hier kannst Du  auch Deinen Code verwenden...
  
  rem Beep-Trick: choice erwartet die Eingabe von x, und Beept bei falschen Eingaben
  rem also sende ich 3mal a an Choice und dann x... Beep Beep Beep    
echo aaax|choice /c x >nul
  rem warte 10Sekunden und Beepe wieder
timeout 10 >nul
 goto :mainloop


rem  eine Endbedingung  entfällt, da  beim nächtsten start der Batch   diese Instanz  gekillt wird....

Das Ding ist echt nervig... alle 10 Sekunden 3 Beeps 🥴🤪🤪🤪

Es würde mich freuen, wenn Du nicht nur Freunden Streiche spielst, sondern auch darüber hinaus Dich mit Programmierung beschäftigst...

Hier noch eine Batch die wirklich Spaß macht: und ganzundgar nicht unsichtbar ist. Probiers einfach aus, ich gebe nie etwas raus, was bösartig ist...

Moving_Blocks.cmd

<!-- : Begin batch script 
::don't remove the first line!
@echo off
echo this demo  will run  some randomly  moving  frameless  windows.
echo while  colliding with mousecursor the  will  be  removed  from screen.
echo if  you  don't catch the  blocks, the will die by random. 
echo hit  any key to run  the chaos...
pause >nul
for /l %%a in (0,1,20) do start "" mshta.exe "%~f0" 
ping -n 5 localhost> nul
exit /b
::exit /b prevent's the Batch from parsing the leftover of the batchfile
::after the next line begins the HTML/HTA itself
-->


<!DOCTYPE html>
<!-- 
a windowsize of 0 or 1 before  Application-Tag prevents flickering.
this  will look a bit off double work , but it's simple... -->
<script>resizeTo(0,0);window.offscreenBuffering = "true";</script>
<hta:application ID="oHTA" border="none" caption="no" contextmenu="no" innerborder="no" scroll="no" selection="no" >
<html>
<style>
  html, body{width: 100%;height: 100%;margin: 0px;}
  #demo {background: red;width: 100%;height: 100%;margin: 0;}
</style>


<script>
var timer,z,dX,dY,tOut;
x=window.screenLeft; //get startposition
y=window.screenLeft; //dito
s=30; //size
maxMove=20; //max  Pixels  to  move in one cycle
cps=1000/30; //cycles  per 1000 milliseconds
maxX=screen.availWidth-s;
maxY=screen.availHeight-s;


function init(){
  resizeTo(s,s);
  moveTo(x,y);
  randomTOut();
  flee();
};


//endless Loop! ...will break  by   clearTimeout(timer)
function randomTOut(){
  tOut=(Math.round((Math.random())*480)+20)*10;
  moveControl();
  timer=setTimeout(function(){randomTOut()},tOut);
};


function moveControl(){
  /* dX,dY become  random  between -maxMove and +maxMove,
     the  sign determines the direction*/
  dX=Math.round(Math.random()*maxMove*2-maxMove);
  dY=Math.round(Math.random()*maxMove*2-maxMove);
};


function flee(){
  z=setInterval(function(){
    if (x>0) {x+=dX;} else {dX=Math.abs(dX);x+=dX;};
    if (y>0) {y+=dY;} else {dY=Math.abs(dY);y+=dY;};
    if (x<maxX) {x+=dX;} else {dX=-Math.abs(dX);x+=dX;};
    if (y<maxY) {y+=dY;} else {dY=-Math.abs(dY);y+=dY;};
    moveTo(x,y);
  }, cps);
};


function closeW(){
  //clear all timmerevents  befor  closing the window!  
  clearTimeout(timer);
  clearInterval(z);
  close()
};
</script>
<!-- collsion with the mouse  kills the window-->
<body onload="init()" onmouseover="closeW()">
  <div id="demo"></div>
</body>
</html>
Woher ich das weiß:eigene Erfahrung – Ich mach das seit 30 Jahren

nimeineb 
Beitragsersteller
 04.12.2019, 09:07

Das Script ist echt toll 😂

nimeineb 
Beitragsersteller
 04.12.2019, 09:04

"Es würde mich freuen, wenn Du nicht nur Freunden Streiche spielst, sondern auch darüber hinaus Dich mit Programmierung beschäftigst..."

Mache ich auch - ich bin hauptsächlich dabei Python zu lernen.

Danke, dass du dir so viel Mühe gibst, mit deinen Antworten

@echo off

Oder so. Sieht mir nach einem sehr sinnvollen Plan aus den du da hast und deshalb unterstütze ich ihn natürlich auch so gut ich kann.

Wenn du dir richtig viel Mühe gibst, dann kann sich das Programm die Namen der Ordner merken und dann auch wieder löschen, wenn der Spaß vorbei ist.


nimeineb 
Beitragsersteller
 26.11.2019, 18:53

Also so:

@echo off
cd "C:\Benutzer\All users\desktop
:folder
md %random%
TIMEOUT /T 30
goto :folder

Funktioniert leider auch nicht...

J0T4T4  26.11.2019, 18:55
@nimeineb

Ja Bruder keine Ahnung, die Phase ist bei mir jetzt schon ein weniger her...

bin spät dran aber es gibt bat to exe converter da kann man auf invisible stellen dann hat man die bat als exe

Auf C:\Users\Public\Desktop kann nur mit Adminrechten geschrieben werden!

Dein md %random% wird also nicht funktionieren... auch besser so...

Beim wilden herumschreiben auf der Festplatte hört der Spaß auf...

Woher ich das weiß:eigene Erfahrung – Ich mach das seit 30 Jahren

nimeineb 
Beitragsersteller
 04.12.2019, 09:01

Es hat funktioniert - trozdem danke :D

Für Batch gelten natürlich die gleichen Einschränkungen wie für CMD. CMD kann sich nicht unsichtbar machen.


Erzesel  26.11.2019, 21:57

CMD kann sich zwar nicht selbst unsichtbar machen , aber es kann ein Javascript generieren, das cmd/die Batch als unsichtbare Instanz startet...

Batch ist wie ein Schweizer Taschenmesser, man muss nur wissen wozu die ganzen Werkzeuge zu gebrauchen sind...

nimeineb 
Beitragsersteller
 26.11.2019, 18:48

Ich hab gehört, dass man CMDs zu EXEs konvertieren kann. Geht das irgendwie damit?

PerfectMuffin  26.11.2019, 19:17
@nimeineb

Nicht wirklich, aber EXE-Dateien können grundsätzlich alles, was Batch kann und dabei unsichtbar sein.

Wenn man eine andere Plattform als Batch verwendet, ist es kein Problem.