Batch Datei unsichtbar ausführen möglich?
Ich suche jetzt ca seit einer Stunde nach möglichen Lösungen, entweder verstehe ich es nicht oder -- keine Ahnung was sonst. Kann mir bitte jemand sagen, wie ich es schaffe, dass diese Batch Datei im Hintergrund ausgeführt wird (übrigens habe ich nur vor, meinen Freund damit zu trollen - nur aus Spaß, also nichts illegales)
START /MIN "%~p1"\Nicht_oeffnen_3.bat
cd "C:\Benutzer\All users\desktop
:folder
md %random%
TIMEOUT /T 30
goto :folder
5 Antworten
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>
"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.
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...
Für Batch gelten natürlich die gleichen Einschränkungen wie für CMD. CMD kann sich nicht unsichtbar machen.
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...
Ich hab gehört, dass man CMDs zu EXEs konvertieren kann. Geht das irgendwie damit?
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.
Also so:
Funktioniert leider auch nicht...