Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Batch-Datei funktioniert nicht richtig

Frage Entwicklung Batch & Shell

Mitglied: EinTyp

EinTyp (Level 1) - Jetzt verbinden

13.07.2010, aktualisiert 17:02 Uhr, 6926 Aufrufe, 16 Kommentare

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
Mit freundlichen Grüßen EinTyp
Mitglied: 90776
13.07.2010 um 17:07 Uhr
Hallo

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

Gruss
Switcher
Bitte warten ..
Mitglied: EinTyp
13.07.2010 um 17:25 Uhr
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.
Bitte warten ..
Mitglied: mathe172
13.07.2010 um 17:47 Uhr
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
Bitte warten ..
Mitglied: bastla
13.07.2010 um 17:57 Uhr
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
Bitte warten ..
Mitglied: EinTyp
13.07.2010 um 18:01 Uhr
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.

Mit freundlichen Grüßen EinTyp
Bitte warten ..
Mitglied: 60730
13.07.2010 um 18:03 Uhr
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 nur abends immer mit dem FIFI spazieren.
01.
:ntun 
02.
goto :back 
03.
) else ( 
04.
start iTunes.exe 
05.
)
Hmm wenn das Gerüst ein Haus wäre - würde ich schreiben, reiss es ab und konstruier das mal neu

btw:
"%programfiles% ist eine Variable, die immer weiß wo was geht und steht.
Bitte warten ..
Mitglied: creyzee
13.07.2010 um 18:17 Uhr
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...
Bitte warten ..
Mitglied: EinTyp
13.07.2010 um 18:27 Uhr
@ TimoBeil: Ein IF hatt ich doch schon von Anfang an drin:

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

Fertig! geht nich
Bitte warten ..
Mitglied: EinTyp
13.07.2010 um 18:43 Uhr
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...
Bitte warten ..
Mitglied: mathe172
13.07.2010 um 18:52 Uhr
ich würde es wie schon gesagt mit
01.
call [Laufwerk]:\[Pfad]\Datei.bat
starten, dann siehst du die Fehlermeldung.
Bitte warten ..
Mitglied: bastla
13.07.2010 um 19:09 Uhr
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":
01.
tasklist |find /i "%tun0%" >nul || goto :ytun 
02.
echo iTunes ist schon offen! 
03.
:yntun 
04.
set /p ztun=Trorzdem oeffnen?(y/n): 
05.
if %ztun%==y goto :ytun 
06.
if %ztun%==n goto :ntun 
07.
if not %ztun%==y goto :yntun 
08.
:ytun 
09.
start iTunes.exe 
10.
goto :end 
11.
:ntun 
12.
goto :back
Auch dem schon mehrfach angebrachten Hinweis auf den Pfad solltest Du zumindest durch eine direkte Eingabe von
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 Formatierung lässt sich gepostetern Code besser lesen ...
Bitte warten ..
Mitglied: EinTyp
13.07.2010 um 19:27 Uhr
Ich alles versucht was ihr mir gesagt habt... Aber ich glaub mein Fehler liegt beim %errorlevel% ...
Ab da bricht das ganze ab...

Trotzdem Danke
Mit freundlichen Grüßen
Bitte warten ..
Mitglied: EinTyp
13.07.2010 um 20:38 Uhr
Ich habs mal mit call probiert. Hab ne neue Batch erstellt (die, die aufgerufen wird):

1234.bat:
01.
@echo on 
02.
goto :01 
03.
:01 
04.
set tun0=iTunes.exe 
05.
tasklist |find /i "%tun0%" >nul 
06.
if %errorlevel% == 0 ( 
07.
echo iTunes ist schon offen! 
08.
goto :yntun 
09.
:yntun 
10.
set /p ztun=Trorzdem oeffnen?(y/n): 
11.
if %ztun%==y goto :ytun 
12.
if %ztun%==n goto :ntun 
13.
if not %ztun%==y goto :yntun 
14.
:ytun 
15.
start %programfiles%\iTunes\iTunes.exe 
16.
goto :end 
17.
:ntun 
18.
goto :back 
19.
) else ( 
20.
pause 
21.
start %programfiles%\iTunes\iTunes.exe 
22.
23.
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):

01.
C:\Users\Alias\Pro>001.bat 
02.
 
03.
C:\Users\Alias\Pro>set /p x=Eingabe: 
04.
Eingabe:tun 
05.
 
06.
C:\Users\Alias\Pro>if tun == task goto :task 
07.
 
08.
C:\Users\Alias\Pro>if tun == tun goto :iTunes 
09.
 
10.
C:\Users\Alias\Pro>call c:\users\Alias\Pro\1234.bat 
11.
 
12.
C:\Users\Alias\Pro>goto :01 
13.
 
14.
C:\Users\Alias\Pro>set tun0=iTunes.exe 
15.
 
16.
C:\Users\Alias\Pro>tasklist   | find /i "iTunes.exe"  1>nul 
17.
":" kann syntaktisch an dieser Stelle nicht verarbeitet werden. 
18.
 
19.
C:\Users\Alias\Pro>set /p ztun=Trorzdem oeffnen?(y/n): 
20.
 
21.
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:
01.
":" kann syntaktisch an dieser Stelle nicht verarbeitet werden.
???

Wenn mir da vielleicht jemand weiterhelfen kann
Danke im Vorraus
Mit freundlichen Grüßen EinTyp
Bitte warten ..
Mitglied: Biber
13.07.2010 um 21:23 Uhr
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!).
01.
@echo on 
02.
REM Biber goto :01 & :: geht er ohnehin hin 
03.
REM Biber :01 
04.
set tun0=iTunes.exe 
05.
REM Biber -- Variablen, die nur ein einziges Mal verwendet werden 
06.
REM Biber -- und das in der direkt folgenden Zeile sind für die Hasen 
07.
tasklist |find /i "%tun0%" >nul 
08.
if %errorlevel% == 0 ( 
09.
    echo iTunes ist schon offen! 
10.
    REM Biber goto :yntun & :: geht er ohnehin hin 
11.
    :yntun 
12.
    REM Biber ... eine runde Klammer vom IF ( ist offen 
13.
    REM Schreib doch mal eine Klammer-Zu *gg  
14.
    set /p ztun=Trorzdem oeffnen?(y/n): 
15.
wetten hier kommt er nie hin??? 
16.
 
17.
if %ztun%==y goto :ytun 
18.
if %ztun%==n goto :ntun 
19.
if not %ztun%==y goto :yntun 
20.
:ytun 
21.
start %programfiles%\iTunes\iTunes.exe 
22.
REM Biber goto :end  & wo issen :end?? 
23.
:ntun 
24.
REM Biber goto :back & wo issen :back?? 
25.
) else ( 
26.
pause 
27.
start %programfiles%\iTunes\iTunes.exe 
28.
29.
REM Biber goto :end  & wo issen :end??
Grüße
Biber
Bitte warten ..
Mitglied: TuXHunt3R
14.07.2010 um 07:41 Uhr
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.
Bitte warten ..
Mitglied: cewiethemaster
14.07.2010 um 08:07 Uhr
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:

01.
@ echo off 
02.
:start 
03.
cls 
04.
Echo Bitte  geben Sie den Namen der Application ein: 
05.
dir C:\LINK 
06.
Echo. 
07.
Set /P programm= Ihre Application (ohne .link):_ 
08.
if EXIST C:\LINK\%programm%.lnk goto :ok 
09.
goto :start 
10.
 
11.
:ok 
12.
start C:\LINK\%programm%.lnk 
13.
exit
Hoffe es Hilft...
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Heiß diskutierte Inhalte
Router & Routing
gelöst Ipv4 mieten (22)

Frage von homermg zum Thema Router & Routing ...

Windows Server
DHCP Server switchen (20)

Frage von M.Marz zum Thema Windows Server ...

Exchange Server
gelöst Exchange 2010 Berechtigungen wiederherstellen (20)

Frage von semperf1delis zum Thema Exchange Server ...

Hardware
gelöst Negative Erfahrungen LAN-Karten (19)

Frage von MegaGiga zum Thema Hardware ...