Ein Batch von Wechseldatenträger soll ein Batch am Festplattenlaufwerk öffnen....Danach das Batch auf Wechseldatenträger schliessen und Stick entfernen
Hallo Leute,
ich will mit einem Batch (eigentlich will ich es später alles auf EXE ändern), dass auf einem USB-Stick läuft, ein Batch/EXE auf der Festplatte öffnen und das, von dem geöffnet wurde beenden.
Das Problem ist nur, dass sich das Batch vom Stick nicht schließen lässt (Task-Manager noch immer sichtbar).
Danach soll der Stick deaktiviert werden, er lässt sich aber nicht.
Code vom EXE auf Stick
Danach soll jetzt Server_setup auf C: gestartet werden und der USB-Stick deaktiviert werden.
Der Stick lässt sich einfach nicht beenden?!
SG
ich will mit einem Batch (eigentlich will ich es später alles auf EXE ändern), dass auf einem USB-Stick läuft, ein Batch/EXE auf der Festplatte öffnen und das, von dem geöffnet wurde beenden.
Das Problem ist nur, dass sich das Batch vom Stick nicht schließen lässt (Task-Manager noch immer sichtbar).
Danach soll der Stick deaktiviert werden, er lässt sich aber nicht.
Code vom EXE auf Stick
..
..
..
echo Copying of the files was successful! %date% %time% >> C:\Log.txt
echo Copying of the files was successful!
pause
:end_usb
echo ----------------------------------------
call "C:\INSTALL\Server_setup.exe"
exit
Danach soll jetzt Server_setup auf C: gestartet werden und der USB-Stick deaktiviert werden.
..
..
echo ----------------------------------------
TASKKILL /F /T /IM RTOOL.exe
echo Deactivating USB-Stick!
rundll32 shell32.dll,Control_RunDLL hotplug.dll
echo ----------------------------------------
..
..
Der Stick lässt sich einfach nicht beenden?!
SG
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 149307
Url: https://administrator.de/contentid/149307
Ausgedruckt am: 23.11.2024 um 04:11 Uhr
6 Kommentare
Neuester Kommentar
Moin,
Von daher finde ich das bat verexen zwar hirnrissig - aber in deinem speziellen Fall wird dann die bat wenigstens im Temp - nicht auf dem Stick benutzt und daher wäre die Wahrscheinlichkeit, dass die bat den Stick auswerfen kann größer.
Gruß
- wenn eine bat auf einem Stick läuft, kann man logischerweise den Stick nicht auswerfen.
- wenn du die bat verexen willst - erzeugst du - beim starten des bat exe eine Version der bat im %temp% Ordner.
Von daher finde ich das bat verexen zwar hirnrissig - aber in deinem speziellen Fall wird dann die bat wenigstens im Temp - nicht auf dem Stick benutzt und daher wäre die Wahrscheinlichkeit, dass die bat den Stick auswerfen kann größer.
Gruß
Moin traxformer,
zur Verdeutlichung: mit "..wenn eine bat auf einem Stick läuft, " meint T-Mo, dass der Batch ja noch aktiv ist,
weil du dein Setup-Geraffel mit "Call ...Setup.exe" aufrufst.
Ist mir einerseits auch ein Rätsel, warum es denn noch mal zurück in den Batch gehen soll, nur um dort ein "exit" zu machen...
Andererseits finde ich es dann schon wieder stimmig, wenn du dieses Skriptchen für so ausgereift hältst, dass du daraus eine *.Exe erzeugen willst, damit es professioneller aussieht.
Bzw. keiner mehr den Sourcecode lesen oder bei YouTube einstellen kann.
Grüße
Biber
zur Verdeutlichung: mit "..wenn eine bat auf einem Stick läuft, " meint T-Mo, dass der Batch ja noch aktiv ist,
weil du dein Setup-Geraffel mit "Call ...Setup.exe" aufrufst.
Ist mir einerseits auch ein Rätsel, warum es denn noch mal zurück in den Batch gehen soll, nur um dort ein "exit" zu machen...
Andererseits finde ich es dann schon wieder stimmig, wenn du dieses Skriptchen für so ausgereift hältst, dass du daraus eine *.Exe erzeugen willst, damit es professioneller aussieht.
Bzw. keiner mehr den Sourcecode lesen oder bei YouTube einstellen kann.
Grüße
Biber
Moin,
[OT]
wie ich dir bereits schrub...
Dann - sehe ich, das die von mir erfundenen Räder von anderen zu einer anderen Zeit fast genauso gestrickt wurden.
Und jemand, der einfache/doppelte/dreifache For Schleifen entziffern kann - der kann auch im Taskmanager sehen, das eine exe eine cmd gestartet hat und spätestens dann - dazu muß man also die exe nichtmal durch einen "Editor" jagen - sieht man den quellencode.
Und selbst wenn man nicht so "helle" ist - die Zeile 7
btw: Ich finde Opensource genial - und der "Seitenhieb" sei gestattet - alles was ich für andere schreibe - schreibe ich für alle anderen - nicht für diesen speziellen Fragesteller alleine.
Opensource find ich gut und jeder - der was kann - hat von anderen gelernt.
[/OT]
Ohne deine komplette bat zu shen, dann dir keiner schreiben - wo es klemm - denn der zusammengeklaubte Befehl rundll32 shell32.dll,Control_RunDLL hotplug.dll funktioniert üblicherweise -wenn wirklich nichts mehr läuft.
Gruß
[OT]
wie ich dir bereits schrub...
- zur Laufzeit entpackt sich die exe eh zur bat
- wenn ich meine bescheidenen Werke in Sachen Bat/cmd betrachte - und sehe das Bastla, Biber Lot, MIniversum, und und und mal für jemanden anderen gebaut haben.....
Dann - sehe ich, das die von mir erfundenen Räder von anderen zu einer anderen Zeit fast genauso gestrickt wurden.
Und jemand, der einfache/doppelte/dreifache For Schleifen entziffern kann - der kann auch im Taskmanager sehen, das eine exe eine cmd gestartet hat und spätestens dann - dazu muß man also die exe nichtmal durch einen "Editor" jagen - sieht man den quellencode.
Und selbst wenn man nicht so "helle" ist - die Zeile 7
echo Deactivating USB-Stick!
entlarvt deine Batch als Batch.... btw: Ich finde Opensource genial - und der "Seitenhieb" sei gestattet - alles was ich für andere schreibe - schreibe ich für alle anderen - nicht für diesen speziellen Fragesteller alleine.
Opensource find ich gut und jeder - der was kann - hat von anderen gelernt.
[/OT]
Ohne deine komplette bat zu shen, dann dir keiner schreiben - wo es klemm - denn der zusammengeklaubte Befehl rundll32 shell32.dll,Control_RunDLL hotplug.dll funktioniert üblicherweise -wenn wirklich nichts mehr läuft.
Gruß
Hallo Traxtormer,
zum Auswerfen von USB-Sticks gibt es das Tool RemoveDrive von Uwe Sieber, erhältlich hier. Das Tool wirft USB-Sticks direkt aus, ohne das ein Dialog erscheint wie bei der Methode mit shell32.dll.
Hier zwei Beispielskripte zur Lösung Deiner Aufgabe.
Zuerst das Skript, das vom Stick gestartet werden soll, die Vorbereitungen macht und dann die ServerSetup.bat startet:
Die ServerSetup.bat:
Das erste Skript, die ServerSetup.bat und RemoveDrive.exe müssen im selben Verzeichnis abgelegt sein. Das kann aber auch ein beliebiges Unterverzeichnis sein. Durch Zeile 5 wird das Verzeichnis ermittelt, in dem das Skript gespeichert ist. In Zeile 6 wird ein Backslash an den Pfad gehängt, wenn das Verzeichnis nicht das Wurzelverzeichnis ist. Dadurch hat HomeDir in allen Fällen ein einheitliches Format. In Zeile 8 wird in das Verzeichnis gewechselt, in dem die Dateien gespeichert sind. Durch den Parameter /D des CD-Befehls wird bei Bedarf auch direkt das aktuelle Laufwerk gewechselt. In Zeile12 wird die ServerSetup.bat auf die Festplatte kopiert (hier ins Benutzerprofil). Die Statusmeldung über den Erfolg der Kopieraktion wird durch >NUL unterdrückt. In Zeile 13 wird die ServerSetup.bat in einer separaten Instanz von CMD.exe gestartet. Als Parameter wird das Verzeichnis, in dem die Dateien auf dem USB-Stick gespeichert sind, übergeben.
In der ServerSetup.bat wird in Zeile 5 wieder das Verzeichnis ermittelt, in dem das Skript gespeichert ist. In Zeile 7 wird aus dem übergebenen Parameter der Laufwerksbuchstabe des USB-Sticks ermittelt. In Zeile 10 wird das aktuelle Verzeichnis auf den Pfad, unter dem die ServerSetup.bat gespeichert ist, gesetzt. Der Parameter /D des CD-Befehls sorgt dafür, das bei Bedarf auch direkt das Laufwerk gewechselt wird. In Zeile 12 wird RemoveDrive vom USB-Stick ausgeführt und damit der Stick ausgeworfen. Der Parameter -L sorgt dafür, das so lange versucht wird, den Stick auszuwerfen, bis die Aktion erfolgreich war. -W:1000 wartet 1000 ms bis zur Programmbeendigung. In Zeile 16 entfernt sich die ServerSetup.bat selbst vom System, deshalb darf nach dem DEL-Befehl kein relevanter Code mehr stehen.
RemoveDrive muss vom Stick, der ausgeworfen werden soll, ausgeführt werden. Es ist für Windows 2000 bis Windows 7 geeignet und existiert in einer 32Bit- und einer 64Bit-Version. Die Prozessorarchitektur des Hostsystems lässt sich über die Systemvariable PROCESSOR_ARCHITECTURE abfragen; für 32Bit-Systeme hat sie den Wert x86.
Gruß
Friemler
zum Auswerfen von USB-Sticks gibt es das Tool RemoveDrive von Uwe Sieber, erhältlich hier. Das Tool wirft USB-Sticks direkt aus, ohne das ein Dialog erscheint wie bei der Methode mit shell32.dll.
Hier zwei Beispielskripte zur Lösung Deiner Aufgabe.
Zuerst das Skript, das vom Stick gestartet werden soll, die Vorbereitungen macht und dann die ServerSetup.bat startet:
@echo off
setlocal
set "HomeDir=%~dp0"
if "%HomeDir:~-1%" neq "\" set "HomeDir=%HomeDir%\"
cd /d "%HomeDir%"
:: Mach irgendwas...
copy "ServerSetup.bat" "%USERPROFILE%" > NUL
cmd /c "call "%USERPROFILE%\ServerSetup.bat" "%HomeDir%""
endlocal
Die ServerSetup.bat:
@echo off
setlocal
set "HomeDir=%~dp0"
set "StickDrive=%~d1"
set "StickDir=%~1"
cd /d "%HomeDir%"
"%StickDir%RemoveDrive" %StickDrive% -L -W:1000
:: Mach irgendwas...
del ServerSetup.bat
endlocal
Das erste Skript, die ServerSetup.bat und RemoveDrive.exe müssen im selben Verzeichnis abgelegt sein. Das kann aber auch ein beliebiges Unterverzeichnis sein. Durch Zeile 5 wird das Verzeichnis ermittelt, in dem das Skript gespeichert ist. In Zeile 6 wird ein Backslash an den Pfad gehängt, wenn das Verzeichnis nicht das Wurzelverzeichnis ist. Dadurch hat HomeDir in allen Fällen ein einheitliches Format. In Zeile 8 wird in das Verzeichnis gewechselt, in dem die Dateien gespeichert sind. Durch den Parameter /D des CD-Befehls wird bei Bedarf auch direkt das aktuelle Laufwerk gewechselt. In Zeile12 wird die ServerSetup.bat auf die Festplatte kopiert (hier ins Benutzerprofil). Die Statusmeldung über den Erfolg der Kopieraktion wird durch >NUL unterdrückt. In Zeile 13 wird die ServerSetup.bat in einer separaten Instanz von CMD.exe gestartet. Als Parameter wird das Verzeichnis, in dem die Dateien auf dem USB-Stick gespeichert sind, übergeben.
In der ServerSetup.bat wird in Zeile 5 wieder das Verzeichnis ermittelt, in dem das Skript gespeichert ist. In Zeile 7 wird aus dem übergebenen Parameter der Laufwerksbuchstabe des USB-Sticks ermittelt. In Zeile 10 wird das aktuelle Verzeichnis auf den Pfad, unter dem die ServerSetup.bat gespeichert ist, gesetzt. Der Parameter /D des CD-Befehls sorgt dafür, das bei Bedarf auch direkt das Laufwerk gewechselt wird. In Zeile 12 wird RemoveDrive vom USB-Stick ausgeführt und damit der Stick ausgeworfen. Der Parameter -L sorgt dafür, das so lange versucht wird, den Stick auszuwerfen, bis die Aktion erfolgreich war. -W:1000 wartet 1000 ms bis zur Programmbeendigung. In Zeile 16 entfernt sich die ServerSetup.bat selbst vom System, deshalb darf nach dem DEL-Befehl kein relevanter Code mehr stehen.
RemoveDrive muss vom Stick, der ausgeworfen werden soll, ausgeführt werden. Es ist für Windows 2000 bis Windows 7 geeignet und existiert in einer 32Bit- und einer 64Bit-Version. Die Prozessorarchitektur des Hostsystems lässt sich über die Systemvariable PROCESSOR_ARCHITECTURE abfragen; für 32Bit-Systeme hat sie den Wert x86.
Gruß
Friemler