eintyp
Goto Top

Batch-Datei funktioniert nicht richtig

Ich habe vor kurzem eine einfache Batch-Datei geschrieben die durch bestimmte Eingaben die entsprechenden Programme öffnet.
Nun... mein Problen ist wenn ich iTunes (also "tun" eingebe siehe in Batch) öffnen will, reagiert es nicht.

Meine Batch-Datei:

@echo off
cls
:back
set /p x=Eingabe:
if %x%==task goto :task
if %x%==tun goto :iTunes
if %x%==ft goto :first
if %x%==nix goto :eof
if not %x%==cmd goto :back
:end
set /p y=Noch was?(n/y):
if %y%==y goto back
if %y%==n goto :eof
if %y%==cls goto cls2
if not %y%==y goto end
:task
start taskmgr.exe
goto end
:iTunes
set tun0=iTunes.exe
tasklist |find /i "%tun0%" >nul
if %errorlevel% == 0 (
echo iTunes ist schon offen!
:yntun
set /p ztun=Trorzdem oeffnen?(y/n):
if %ztun%==y goto :ytun
if %ztun%==n goto :ntun
if not %ztun%==y goto :yntun
:ytun
start iTunes.exe
goto :end
:ntun
goto :back
) else (
start iTunes.exe
)
goto :end
:first
start C:\Users\Alias\Programme\Firefox_3.6.2\FirefoxPortable.exe
start C:\Admin_Gabi\ThunderbirdPortable_2.0.0.19\ThunderbirdPortable.exe
goto end

Die Datei ist eigentlich ja länger, aber ich hab das unwichtige einfach entfernt. Wahrscheinlich ist die Lösung einfcher als ich dachte^^.


Vielen Dank schonmal voraus
mfg EinTyp

Content-ID: 146824

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

Ausgedruckt am: 05.11.2024 um 16:11 Uhr

90776
90776 13.07.2010 um 17:07:45 Uhr
Goto Top
Hallo

Ich glaube es liegt daran, dass du bei zeile 35 den Pfad nicht angegeben hast:

Gruss
Switcher
EinTyp
EinTyp 13.07.2010 um 17:25:35 Uhr
Goto Top
iTunes ist aber im Ordner Programme gespeichert. Da braucht man (meines Wissens nach) kein Pfad anzugeben. Aber das eigentliche Problem ist ja, dass in beiden Fällen, egal ob iTunes läüft oder nicht, nichts passiert, außer dass sich das cmd-Fenster sofort schließt.
mathe172
mathe172 13.07.2010 um 17:47:00 Uhr
Goto Top
Versuch mal die Datei mithilfe einer anderen Batch-Datei zu starten (call [Laufwerk]:\[Pfad]\DeineBatch.bat). Dann solltest du den Fehler der deine Datei "abstürzen" lässt sehen.

Mathe172
bastla
bastla 13.07.2010 um 17:57:42 Uhr
Goto Top
Hallo EinTyp und willkommen im Forum!

Um nachvollziehen zu können, was ein Batch macht (oder auch nicht ;-')), das -"echo off" am Anfang vorübergehend auf "echo on" ändern und den Batch aus einer CMD-Shell starten ...

Grüße
bastla
EinTyp
EinTyp 13.07.2010 um 18:01:33 Uhr
Goto Top
Jetz vielleicht ein doofe Frage:

Aber wie "schreibt" man in cmd/script in ein Pfad ein Leerzeichen?
Bei Vista kann man nicht "c:\Programme\..." sondern man muss "c:\Program Files\..." eingeben können. Und cmd liest den Pfad eben nur bis zum ersten Leerzeichen.

mfg EinTyp
60730
60730 13.07.2010 um 18:03:00 Uhr
Goto Top
auch dir kein Moin oder Tach,

das "kommt" davon, wenn gleich in der allerersten Zeile das berühmte doppelte Dingenskirchen das eigentlich nur eingeweihte in Ihren fix&Ready Batchen schreiben in einer ich hätt gern noch ein Problembatch steht.


Zitat von @EinTyp:
iTunes ist aber im Ordner Programme gespeichert. Da braucht man (meines Wissens nach) kein Pfad anzugeben.

  • Du irrst
Aber das eigentliche Problem ist ja, dass in beiden Fällen, egal ob iTunes läüft oder nicht, nichts passiert, außer dass sich das
cmd-Fenster sofort schließt.

Mach das erste Zeilchen raus, in das letzte eine pause und dann siehst du den DoppelxfachBock.

Gruß

edit - bastla war gleichlautend schneller...

Die Else mags nicht alleine - die geht doch nicht nurabends immer mit dem FIFI spazieren.
:ntun
goto :back
) else (
start iTunes.exe
)

Hmm wenn das Gerüst ein Haus wäre - würde ich schreiben, reiss es ab und konstruier das mal neu face-wink

btw:
"%programfiles% ist eine Variable, die immer weiß wo was geht und steht.
creyzee
creyzee 13.07.2010 um 18:17:33 Uhr
Goto Top
Hallo,

könnte es daran liegen, dass du nur "start itunes.exe" aufrufst, statt "start c:\programme\...\itunes.exe"?

ansonsten lass mal @echo off aus und schreibe nach der Startanweisung eine pause. Dann schreibt das cmd evtl. eine Meldung.

Viele Grüße vom creyzee

edit: Na so was, eben habe ich noch keine Antworten gesehen...
EinTyp
EinTyp 13.07.2010 um 18:27:45 Uhr
Goto Top
@ TimoBeil: Ein IF hatt ich doch schon von Anfang an drin:

if %errorlevel% == 0 (
bla
bla
bla
) else (
andereBedingung
)

Fertig! geht nich
EinTyp
EinTyp 13.07.2010 um 18:43:32 Uhr
Goto Top
Das hab ich schon geändert... Danke trotzdem!

Ich hab die Datei in

:iTunes
set tun0=iTunes.exe
tasklist |find /i "%tun0%" >nul
pause
if %errorlevel% == 0 (
echo iTunes ist schon offen!
goto :yntun

geändert... Im cmd-Fenster erscheint folgendes:


C:\Users\Alias\Pro>set /p x=Eingabe:
Eingabe:tun

C:\Users\Alias\Pro>if tun == task goto :task

C:\Users\Alias\Pro>if tun == tun goto :iTunes

C:\Users\Alias\Pro>set tun0=iTunes.exe

C:\Users\Alias\Pro>tasklist | find /i "iTunes.exe" 1>nul

C:\Users\Alias\Pro>pause
Drücken Sie eine beliebige Taste . . .

und wenn ich ne Taste drück, dann schließts sich natürlich wieder...
mathe172
mathe172 13.07.2010 um 18:52:11 Uhr
Goto Top
ich würde es wie schon gesagt mit
call [Laufwerk]:\[Pfad]\Datei.bat
starten, dann siehst du die Fehlermeldung.
bastla
bastla 13.07.2010 um 19:09:30 Uhr
Goto Top
Hallo EinTyp!

Wie TimoBeil ist auch mir die "if / else"-Konstruktion mit den enthaltenen Sprungmarken und zusätzlichen "if" etwas suspekt - daher würde ich das etwa so "entzerren":
tasklist |find /i "%tun0%" >nul || goto :ytun  
echo iTunes ist schon offen!
:yntun
set /p ztun=Trorzdem oeffnen?(y/n):
if %ztun%==y goto :ytun
if %ztun%==n goto :ntun
if not %ztun%==y goto :yntun
:ytun
start iTunes.exe
goto :end
:ntun
goto :back
Auch dem schon mehrfach angebrachten Hinweis auf den Pfad solltest Du zumindest durch eine direkte Eingabe von
<code "type="plain">iTunes

an der Kommandozeile nachgehen (alternativ kannst Du in der Variablen %path% oder durch die Verwendung des gleichnamigen Befehles sehen, welche Ordner durchsucht werden, wenn ein zu startendes Programm nicht im aktullen Ordner gefunden wird) ...

Grüße
bastla

P.S.: Mit der entrsprechenden lässt sich gepostetern Code besser lesen ...
EinTyp
EinTyp 13.07.2010 um 19:27:32 Uhr
Goto Top
Ich alles versucht was ihr mir gesagt habt... Aber ich glaub mein Fehler liegt beim %errorlevel% ...
Ab da bricht das ganze ab...

Trotzdem Danke
mfg
EinTyp
EinTyp 13.07.2010 um 20:38:22 Uhr
Goto Top
Ich habs mal mit call probiert. Hab ne neue Batch erstellt (die, die aufgerufen wird):

1234.bat:
@echo on
goto :01
:01
set tun0=iTunes.exe
tasklist |find /i "%tun0%" >nul  
if %errorlevel% == 0 (
echo iTunes ist schon offen!
goto :yntun
:yntun
set /p ztun=Trorzdem oeffnen?(y/n):
if %ztun%==y goto :ytun
if %ztun%==n goto :ntun
if not %ztun%==y goto :yntun
:ytun
start %programfiles%\iTunes\iTunes.exe
goto :end
:ntun
goto :back
) else (
pause
start %programfiles%\iTunes\iTunes.exe
)
goto :end

ich habs so gemacht wie mirs bastle gesagt hat: aus ner cmd-shell gestartet und es erscheint folgendes (iTunes war nicht geöffnet):

C:\Users\Alias\Pro>001.bat

C:\Users\Alias\Pro>set /p x=Eingabe:
Eingabe:tun

C:\Users\Alias\Pro>if tun == task goto :task

C:\Users\Alias\Pro>if tun == tun goto :iTunes

C:\Users\Alias\Pro>call c:\users\Alias\Pro\1234.bat

C:\Users\Alias\Pro>goto :01

C:\Users\Alias\Pro>set tun0=iTunes.exe

C:\Users\Alias\Pro>tasklist   | find /i "iTunes.exe"  1>nul  
":" kann syntaktisch an dieser Stelle nicht verarbeitet werden.  

C:\Users\Alias\Pro>set /p ztun=Trorzdem oeffnen?(y/n):

C:\Users\Alias\Pro>

Kurze Erklärung:Die Batch-Datei "001.bat" ruft die Batch-Datei "1234.bat" auf, wenn man "tun" eingibt.
Was heißt:
":" kann syntaktisch an dieser Stelle nicht verarbeitet werden.  
???

Wenn mir da vielleicht jemand weiterhelfen kann
Danke im Vorraus
mfg EinTyp
Biber
Biber 13.07.2010 um 21:23:48 Uhr
Goto Top
Moin EinTyp.

bitte hark erst einmal grob durch durch dein dadaistisches Kunstwerk.

Zwei Sachen sind zu bedenken:
  • Die Jungs und Mädels in Redmond haben jahrelang rumgedruckst, bevor sie endlich ein paar minimalistische Kontrollstrukturen wie "IF this ( blah) ELSE otherblah" zugelassen haben in Batchen.

Diese Kontrollstrukturen minimieren die Notwendigkeit eines epileptischen Rumgezappels mit "goto :egalHauptsacheWegHier".. Nutze es.

  • Du darfst auch gerne mit Goto durch den Schnipsel hoppeln.
Aber lass nicht zu, dass du die Wege/Programmzweige nicht mehr ohne GoogleMaps wiederfindest.

Als Einstieg und Anregung zum ersten Durchharken eine halb kommentierte 1234.cmd (nach wie vor nicht laufend!).
@echo on
REM Biber goto :01 & :: geht er ohnehin hin
REM Biber :01
set tun0=iTunes.exe
REM Biber -- Variablen, die nur ein einziges Mal verwendet werden
REM Biber -- und das in der direkt folgenden Zeile sind für die Hasen
tasklist |find /i "%tun0%" >nul  
if %errorlevel% == 0 (
    echo iTunes ist schon offen!
    REM Biber goto :yntun & :: geht er ohnehin hin
    :yntun
    REM Biber ... eine runde Klammer vom IF ( ist offen
    REM Schreib doch mal eine Klammer-Zu *gg 
    set /p ztun=Trorzdem oeffnen?(y/n):
wetten hier kommt er nie hin???

if %ztun%==y goto :ytun
if %ztun%==n goto :ntun
if not %ztun%==y goto :yntun
:ytun
start %programfiles%\iTunes\iTunes.exe
REM Biber goto :end  & wo issen :end??
:ntun
REM Biber goto :back & wo issen :back??
) else (
pause
start %programfiles%\iTunes\iTunes.exe
)
REM Biber goto :end  & wo issen :end??

Grüße
Biber
TuXHunt3R
TuXHunt3R 14.07.2010 um 07:41:14 Uhr
Goto Top
Hallo einTyp

Den Programmordner gibt es auch als Variable: %Programfiles%.
Genau so wie %userprofile%, %appdata%, %systemroot%, etc.

Gib in der CMD-Konsole z.B. mal folgendes ein:
echo %programfiles%

Heraus kommt bei mir:
C:\Program Files

Diese Variablen kannst du für das Zusammensetzen von Pfaden verwenden.
cewiethemaster
cewiethemaster 14.07.2010 um 08:07:56 Uhr
Goto Top
Am einfachsten wäre es, unter C:\ einen ordner LINK zu erstellen, dort alle Verknüpfungen Reinkopieren (die verknüpfung muss den naemen des Programmes haben (z.B. itunes.lnk vlc.lnk), dann der bacth so:

@ echo off
:start
cls
Echo Bitte  geben Sie den Namen der Application ein:
dir C:\LINK
Echo.
Set /P programm= Ihre Application (ohne .link):_
if EXIST C:\LINK\%programm%.lnk goto :ok
goto :start

:ok
start C:\LINK\%programm%.lnk
exit

Hoffe es Hilft...