speedygonsales
Goto Top

Wie Batch nach Programmende starten?

Hallo zusammen. Ich habe die Sufu schon benutzt, leider komme ich nicht wirklich weiter.

Ich habe einen Ipod den ich nicht mit iTunes nutzen möchte. Hierzu verwende ich YamiPod. Anders geht es leider nicht.
Das einzige was YamiPod fehlt ist der Auswurfbutton.

Ich sollte folgendes möglich machen. Nur wie???

1. Wenn ich den Pod einstecke, soll er ein bestimmtes Verzeichnis auf %systemdrive% kopieren.
2. Wenn das erledigt ist soll YamiPod starten.
3. Wenn ich dann YamiPod beende soll nach einer gewissen Zeit eine Batch die in dem in 1. kopierten Verzeichniss befindet starten. Mit dieser Batch werfe ich den Ipod sicher aus.

Ich muß den Umweg über die lokale HDD machen, weil wenn ich die batch direkt vom Ipod starte diese nicht läuft. Wie auch, säge ja den eigenen Ast ab.

Villeicht kann mir das Forum mit diesem Problem helfen.

Kai

Content-ID: 103745

Url: https://administrator.de/contentid/103745

Ausgedruckt am: 26.11.2024 um 08:11 Uhr

godlie
godlie 10.12.2008 um 14:23:04 Uhr
Goto Top
Also eine Lösung wäre folgende:
Einfach dein YamiPod per Batch starten, dadurch wird der Befehl welcher danach ausgeführt werden soll einfach danach hingeschrieben.
Probier das mal aus.

grüße
6741
6741 10.12.2008 um 14:27:41 Uhr
Goto Top
auch hier ist AutoIT erste Wahl ...

verbunden mit einem Tasklist Befehl, wenn das Programm beendet ist startet die Batch ...

ganz einfach ..
godlie
godlie 10.12.2008 um 14:29:41 Uhr
Goto Top
Ob ich das jetzt mit AutoIT oder gleich mit einer reinen batch mache ist auch nicht mehr als geschmackssache und ich brauch nicht auf die beendigung achten da die Stapelverarbeitung sowieso nur das nächste macht was dort stehen geschrieben steht.

Aber jedem das seine.
speedygonsales
speedygonsales 10.12.2008 um 16:03:12 Uhr
Goto Top
Nur zur Information. Dieser Vorgang muß ohne Installationen in irgendeiner Form funktionieren. Das einzige was auf den betreffenden Rechner kommt ist eben die Batch die das auswerfen startet. Wenn ich zu meinem Bekannten gehe hab ich keine Lust erst was installieren zu müssen.

Ich habe schon mit VBS gearbeitet. Kenn mich aber damit leiden nicht wirklich aus so das ich somit zu keinem Ergebnis komme. Der Vorgang wie in 1. und 2. definiert habe ich bereits am laufen. Würde mich aber freuen wenn ich das alles in eine Batch bzw Script bekomme.
godlie
godlie 10.12.2008 um 16:13:11 Uhr
Goto Top
Ja und wie hast du Punkt 1 und Punkt 2 realisiert?
Woran scheiterts,dass du nach Punkt 2 einfach ein Start deines Yamipods machst und danach den Auswurf?
72648
72648 10.12.2008 um 16:46:38 Uhr
Goto Top
Hallo Speedygonsales,

wie wäre es denn hiermit, musst nur noch deine Pfade und den Namen des Prozesses (siehe Taskmanager) eintragen.
Die Batch prüft alle 10 sekunden ob der Prozess deines Programms noch läuft, wenn er beendet ist geht´s weiter.

Allerdings benötigst du auf dem PC auf dem die Batch ausgeführt werden soll das Programm tasklist.exe im system32 ordner!
http://www.computerhope.com/download/winxp/tasklist.exe

Poste mal bitte die Batch mit der du den Ipod auswirfst.
Der inhalt kann übrigens in das unten stehende Skript mit eingebaut werden.

@echo off

copy x:\xyz %systemdrive%\

start /separate c:\programme\deinprogramm.exe
ping -n 20 127.0.0.1 >nul

:start
cls
set ProgEXE=deinprozess.exe
 
TaskList /FI "IMAGENAME eq %ProgEXE%" 2>NUL | Find "%ProgEXE%" >NUL  
IF ERRORLEVEL == 1 goto :weiter
   
:loop
echo Pruefe aktiven Prozess
ping -n 10 127.0.0.1 >nul
goto :start

:weiter

start x:\deinebatch.bat
exit

Du kannst die Batch mit der der Ipod entfernt wird aus dieser Batch heraus erzeugen.
Somit haste nur eine Datei die du ausführen musst - Stichwort Ast absägen.

Es wäre sogar möglich die Batch direkt beim anschliessen des Ipod per Autostart auszuführen.

Gruß Milo
speedygonsales
speedygonsales 10.12.2008 um 19:47:17 Uhr
Goto Top
Hi Milo

Das ist bis jetzt der beste lösungsansatz. So hatte ich mir das in etwa gedacht.
Hier noch der befehl zum sicheren entfernen.

%systemdrive%\...\deveject "-EjectId:USB\VID_05AC&PID_1260\000A270019E0172A"  

Ist das Programm tasklist.exe eigentlich standardmäßig in XP und/oder Vista?

Wenn nein wie kann ich das Programm in den Ordner systen32 kpoieren? Speziel in Vista. Da bin ich immer daran gescheitert das ich vermutlich den Vorgang entweder bestätigen müsste bzw. als Administrator starten muß.

Kannst du mir die auch noch die möglichkeit einbauen das ich die eject.bat aus der o.g. Batch herraus erzeugt.

Thanks

Kai

:edit:

Habe die Batch wie folgt angepasst mit folgendem Ergebniss...

@echo off

xcopy \tool %systemdrive%\ipod /y

start /separate YamiPod.exe
ping -n 20 127.0.0.1 >nul

:start
cls
set ProgEXE=YamiPod.exe
 
TaskList /FI "IMAGENAME eq %ProgEXE%" 2>NUL | Find "%ProgEXE%" >NUL  
IF ERRORLEVEL == 1 goto :weiter
   
:loop
echo Pruefe aktiven Prozess
ping -n 10 127.0.0.1 >nul
goto :start

:weiter

start %systemdrive%\ipod\eject.bat
exit

Soweit läuft alles wie gewünscht. Bis auf den aufruf der eject.bat. Da erhalte ich diese Meldung in der DOS Box:


F:\>C:\ipod\deveject "-EjectId:USB\VID_05AC&PID_1260\000A270019E0172A"
DevEject 1.0 2003 c't/Matthias Withopf

Ejecting '@usbstor.inf,%genericbulkonly.devicedesc%;USB-Massenspeichergerõt' [U
SB\VID_05AC&PID_1260\000A270019E0172A]...FAILED (23,6)
Error ejecting device USB\VID_05AC&PID_1260\000A270019E0172A, vetoed (15,6)!

F:\>

Die eject.bat läuft aber wunderbar wenn ich es direkt von HDD Starte.
72648
72648 11.12.2008 um 13:54:43 Uhr
Goto Top
Hallo speedygonsales,

Also unter XP Pro und Vista (konnte nur Ultimate testen) ist die tasklist.exe standartmäßig im system32 ordner untergebracht.
Unter XP Home leider nicht.
Du kannst die Datei aber in deinen Tools Ordner auf dem Ipod ablegen, beim start der batch wird dann geprüft ob es die datei auf dem System gibt, falls nicht wird sie eben kopiert!
Das selbe könnte man mit der deveject.exe anstellen, somit musst du also nicht erst was installieren (abgesehen von Yamipod).

Der Grund weshalb du eine Fehlermeldung bei der eject.bat bekommen hast ist einfach:
Scheinbar kann während eine datei ausgeführt wird (hier das Hauptprogramm) das Gerät nicht entfernt werden.
Habe das Problem aber gelöst, (denk ich ) indem die eject.bat nach ihrer erzeugung in einem seperaten 16-bit Speicherbereich gestartet wird und das Hauptprogramm zuvor geschlossen werden kann.

Hier also mal die Überarbeitete Version:

@echo off 

if not exist %windir%\system32\tasklist.exe copy \tools\tasklist.exe %windir%\system32\

xcopy \tool %systemdrive%\ipod /y 

start /separate YamiPod.exe 
ping -n 20 127.0.0.1 >nul 

:start 
cls 
set ProgEXE=YamiPod.exe 
TaskList /FI "IMAGENAME eq %ProgEXE%" 2>NUL | Find "%ProgEXE%" >NUL   
IF ERRORLEVEL == 1 goto :weiter 


:loop 
echo Pruefe aktiven Prozess 
ping -n 10 127.0.0.1 >nul 
goto :start 

:weiter 

REM eject.bat wird erzeugt
del %systemdrive%\ipod\eject.bat

echo ping -n 5 127.0.0.1 >>%systemdrive%\ipod\eject.bat
echo %systemdrive%\ipod\deveject "-EjectId:USB\VID_05AC&PID_1260\000A270019E0172A" >>%systemdrive%\ipod\eject.bat  

REM ping dient hier als kurze pause zwischen beenden des Hauptprogramms und starten der eject funktion 
(läuft leider sichtbar ab)

start /separate %systemdrive%\ipod\eject.bat 

exit

Die eject.bat wird nun aus der batch erzeugt und unter \ipod\eject.bat aufgerufen.

Gruß Milo
speedygonsales
speedygonsales 11.12.2008 um 15:24:02 Uhr
Goto Top
Hallo Milo

Also habe dein Script genommen und wie folgt nur leicht verändert.

@echo off

md %systemdrive%\ipod
copy \tool\deveject.exe %systemdrive%\ipod\deveject.exe /y

if not exist %windir%\system32\tasklist.exe copy \tools\tasklist.exe %windir%\system32\

start /separate \tool\YamiPod.exe 
ping -n 10 127.0.0.1 >nul 

:start 
cls 
set ProgEXE=YamiPod.exe 
TaskList /FI "IMAGENAME eq %ProgEXE%" 2>NUL | Find "%ProgEXE%" >NUL   
IF ERRORLEVEL == 1 goto :weiter 


:loop 
echo Pruefe aktiven Prozess 
ping -n 5 127.0.0.1 >nul 
goto :start 

:weiter 

REM eject.bat wird erzeugt
del %systemdrive%\ipod\eject.bat

echo ping -n 5 127.0.0.1 >>%systemdrive%\ipod\eject.bat
echo %systemdrive%\ipod\deveject "-EjectId:USB\VID_05AC&PID_1260\000A270019E0172A" >>%systemdrive%\ipod\eject.bat  

REM ping dient hier als kurze pause zwischen beenden des Hauptprogramms und starten der eject funktion 
(läuft leider sichtbar ab)

start /separate %systemdrive%\ipod\eject.bat 

exit

Mit folgendem Ergebins.


F:\>ping -n 5 127.0.0.1

Ping wird ausgeführt für 127.0.0.1 mit 32 Bytes Daten:
Antwort von 127.0.0.1: Bytes=32 Zeit<1ms TTL=128
Antwort von 127.0.0.1: Bytes=32 Zeit<1ms TTL=128
Antwort von 127.0.0.1: Bytes=32 Zeit<1ms TTL=128
Antwort von 127.0.0.1: Bytes=32 Zeit<1ms TTL=128
Antwort von 127.0.0.1: Bytes=32 Zeit<1ms TTL=128

Ping-Statistik für 127.0.0.1:
Pakete: Gesendet = 5, Empfangen = 5, Verloren = 0 (0% Verlust),
Ca. Zeitangaben in Millisek.:
Minimum = 0ms, Maximum = 0ms, Mittelwert = 0ms

F:\>C:\ipod\deveject "-EjectId:USB\VID_05AC&PID_1260\000A270019E0172A"
DevEject 1.0 2003 c't/Matthias Withopf

Ejecting '@usbstor.inf,%genericbulkonly.devicedesc%;USB-Massenspeichergerõt' [U
SB\VID_05AC&PID_1260\000A270019E0172A]...FAILED (23,6)
Error ejecting device USB\VID_05AC&PID_1260\000A270019E0172A, vetoed (15,6)!

F:\>


Irgendwo muß da ein hund begraben sein...
72648
72648 11.12.2008 um 15:35:03 Uhr
Goto Top
Was passiert denn wenn du die unter %systemdrive%\ipod\ erzeugte eject.bat direkt startest?
Ist das Hauptprogramm (also die Batch) denn bereits geschlossen wenn eject.bat gestartet wird?

Gruß Milo
speedygonsales
speedygonsales 11.12.2008 um 15:57:53 Uhr
Goto Top
Die funktioniert wieder einwandfrei. Es müssen aber alle Fenster bzw. Prozesse beendet sein die auf den Ipod verweisen. Das war aber bei der "alten" eject.bat ebenso.
72648
72648 11.12.2008 um 16:09:50 Uhr
Goto Top
Komische sache, was passiert denn wenn du in ner cmd den startbefehl einzeln angibst?
Versuche das bitte mal.

also start /separate %systemdrive%\ipod\eject.bat eingeben.
Wie verhält sich deveject, wenn der ipod nicht angeschlossen ist? Gleiche Fehlermeldung?

Gruß Milo
speedygonsales
speedygonsales 11.12.2008 um 16:16:43 Uhr
Goto Top
Ne dann kommt das hier...


C:\Users\abc>ping -n 5 127.0.0.1

Ping wird ausgeführt für 127.0.0.1 mit 32 Bytes Daten:
Antwort von 127.0.0.1: Bytes=32 Zeit<1ms TTL=128
Antwort von 127.0.0.1: Bytes=32 Zeit<1ms TTL=128
Antwort von 127.0.0.1: Bytes=32 Zeit<1ms TTL=128
Antwort von 127.0.0.1: Bytes=32 Zeit<1ms TTL=128
Antwort von 127.0.0.1: Bytes=32 Zeit=1ms TTL=128

Ping-Statistik für 127.0.0.1:
Pakete: Gesendet = 5, Empfangen = 5, Verloren = 0 (0% Verlust),
Ca. Zeitangaben in Millisek.:
Minimum = 0ms, Maximum = 1ms, Mittelwert = 0ms

C:\Users\abc>C:\ipod\deveject "-EjectId:USB\VID_05AC&PID_1260\000A27001
9E0172A"
DevEject 1.0 2003 c't/Matthias Withopf

Error ejecting device USB\VID_05AC&PID_1260\000A270019E0172A, not found (4,0)!

C:\Users\abc>
72648
72648 11.12.2008 um 16:31:52 Uhr
Goto Top
Kommt mir vor als könnte deveject das laufwerk nicht trennen, weil darauf noch was ausgeführt wird.
Setzte die zeitverzögerung mit dem ping in Zeile 28 mal testweise auf -n 30

Was anderes fällt mir auf die schnelle nicht ein.

Welches Betriebssystem verwendest du denn momentan?

Gruß Milo
speedygonsales
speedygonsales 11.12.2008 um 17:07:20 Uhr
Goto Top
Ultimate

Ich werds mal checken mit dem Ping
speedygonsales
speedygonsales 11.12.2008 um 17:35:57 Uhr
Goto Top
Ne das mit 30sek geht auch net. Kommt folgendes:


F:\>ping -n 30 127.0.0.1

Ping wird ausgeführt für 127.0.0.1 mit 32 Bytes Daten:
Antwort von 127.0.0.1: Bytes=32 Zeit<1ms TTL=128
.
.
.
Antwort von 127.0.0.1: Bytes=32 Zeit<1ms TTL=128

Ping-Statistik für 127.0.0.1:
Pakete: Gesendet = 30, Empfangen = 30, Verloren = 0 (0% Verlust),
Ca. Zeitangaben in Millisek.:
Minimum = 0ms, Maximum = 0ms, Mittelwert = 0ms

F:\>C:\ipod\deveject "-EjectId:USB\VID_05AC&PID_1260\000A270019E0172A"
DevEject 1.0 2003 c't/Matthias Withopf

Ejecting '@usbstor.inf,%genericbulkonly.devicedesc%;USB-Massenspeichergerõt' [U
SB\VID_05AC&PID_1260\000A270019E0172A]...FAILED (23,6)
Error ejecting device USB\VID_05AC&PID_1260\000A270019E0172A, vetoed (15,6)!

F:\>

Der Startet die Batch von F: und nicht von %systemdrive%

Wenn ich die Batch direkt von C: starte dann klappts wieder. Man müsste der Batch nur direkt von C: starten lassen.

Bin ein ziehmlicher Klug###er gell? face-smile
Biber
Biber 11.12.2008 um 18:17:39 Uhr
Goto Top
Moin speedgonsales,

wie wäre es, wenn Du zwischen dem Erzeugen der eject.bat und dem Starten der eject.bat auf Laufwerk %systemdrive% wechselst?
Eigentlich sollte ein tumbes
%systemDrive%
...in der momentan leeren Zeile 27 des Schnipsels reichen.

Grüße
Biber
speedygonsales
speedygonsales 11.12.2008 um 19:47:17 Uhr
Goto Top
Moin Biber

Ich sach mal danke. Genau das wars. Jetzt läuft alles wie gewünscht.

Somit ist der Thread von mir jetzt als "gelößt" Markiert.

Zum guten Schluß hier noch mal der funktionierende Code...

@echo off

md %systemdrive%\ipod
copy \tool\deveject.exe %systemdrive%\ipod\deveject.exe /y
copy \tool\eject.bat %systemdrive%\ipod\eject.bat /y

if not exist %windir%\system32\tasklist.exe copy \tools\tasklist.exe %windir%\system32\

start /separate \tool\YamiPod.exe 
ping -n 5 127.0.0.1 >nul 

:start 
cls 
set ProgEXE=YamiPod.exe 
TaskList /FI "IMAGENAME eq %ProgEXE%" 2>NUL | Find "%ProgEXE%" >NUL   
IF ERRORLEVEL == 1 goto :weiter 


:loop 
echo Pruefe aktiven Prozess 
ping -n 5 127.0.0.1 >nul 
goto :start 

:weiter 

%systemDrive%
start /separate %systemdrive%\ipod\eject.bat 

exit

Thanks nochmal an alle die mir geholfen haben!

Kai
72648
72648 12.12.2008 um 13:58:35 Uhr
Goto Top
@Biber

Danke für den Hinweis.

Gruß Milo