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
GELÖST

Problem mit if defined bei Batch-Datei

Frage Entwicklung Batch & Shell

Mitglied: Noobstar0815

Noobstar0815 (Level 1) - Jetzt verbinden

13.03.2013 um 13:28 Uhr, 4118 Aufrufe, 31 Kommentare

Guten Tag...
Langsam wird es deprimierend. Datei ist fertig und funktionsfähig, da kommt mein Ausbilder an :"Und was wenn Laufwerksbuchstabe G: schon vergeben ist?" Kurz diskutiert ob es Sinn macht alles erst in C:\temp\ zu kopieren per Datei, tut es nicht, also für den Laufwerksbuchstaben eine Variable gesetzt die am Anfang erfragt wird. Soweit schön und gut, nun möchte ich diesen Laufwerksbuchstaben anschließen wieder löschen. Dies funktioniert bei 3 von 4 mal perfekt. Ich habe am Anfang der Datei eine Abfrage gemacht, ob alle updates, bestimmte updates, alle updates mit shutdown oder alle updates mit restart durchgeführt werden sollen. Das Problem liebt bei den bestimmten updates. Da sieht mein Code so aus:
01.
 set name=0 
02.
set /p name="Bitte alle zu aktualisierenden Programme angeben (Bsp.: 134):" 
03.
 
04.
 
05.
set "num=-1"  
06.
:loop  
07.
set /a num=num+1  
08.
 
09.
call set "name2=%%name:~%num%,1%%"  
10.
if defined name2 (  
11.
echo %name2%  
12.
if %name2%==1 call "%lw%\Update-Skripte\Java.bat" 
13.
if %name2%==2 call "%lw%\Update-Skripte\FlashX.bat" 
14.
if %name2%==3 call "%lw%\Update-Skripte\FlashPlug.bat" 
15.
if %name2%==4 call "%lw%\Update-Skripte\shockwave.bat" 
16.
if %name2%==5 call "%lw%\Update-Skripte\Firefox.bat" 
17.
if %name2%==6 call "%lw%\Update-Skripte\adobereader.bat" 
18.
if %name2%==7 call "%lw%\Update-Skripte\msdefender.bat" 
19.
if %name2%==8 shutdown -r -t 0 
20.
if %name2%==9 shutdown -c -t 0 
21.
goto :loop  
22.
)
Das Problem ist die "if defined name2 (" Funktion. Diese funktioniert nicht. Selbst wenn name2 keinen Wert hat springt er in die Klammer und möchte den ersten if-Befehl ausführen. Da aber kein Wert zum vergleichen existiert bricht die Datei mit der Begründung :"call ist an dieser Stelle syntakitsch nicht verarbeitbar" ab. Ich muss dort noch ein "net use %lw% /d" einsetzen, leider weiß ich nicht wo. Funktioniert es, wenn ich statt "if defined name 2(" das ganze umdrehe, nach dem Motto "if not defined name2 (net use %lw% /d) else echo %name2% if..."? Falls dies nicht funktionieren würde, könntet ihr mir sagen, wie es funktionieren würde?
MfG Noobstar0815
31 Antworten
Mitglied: Noobstar0815
13.03.2013 um 13:45 Uhr
Ok also bei
01.
set "num=-1"  
02.
:loop  
03.
set /a num=num+1  
04.
 
05.
call set "name2=%%name:~%num%,1%%"  
06.
if %name2%== (net use %lw% /d) else(   
07.
echo %name2%  
08.
if %name2%==1 call "%lw%\Update-Skripte\Java.bat" 
09.
if %name2%==2 call "%lw%\Update-Skripte\FlashX.bat" 
10.
if %name2%==3 call "%lw%\Update-Skripte\FlashPlug.bat" 
11.
if %name2%==4 call "%lw%\Update-Skripte\shockwave.bat" 
12.
if %name2%==5 call "%lw%\Update-Skripte\Firefox.bat" 
13.
if %name2%==6 call "%lw%\Update-Skripte\adobereader.bat" 
14.
if %name2%==7 call "%lw%\Update-Skripte\msdefender.bat" 
15.
if %name2%==8 shutdown -r -t 0 
16.
if %name2%==9 shutdown -c -t 0 
17.
goto :loop  
18.
)
aktzeptiert er zum 1. mal mein else, allerdings weigert er sich "net use %lw% /d" anzuwenden, weil use syntaktisch nicht verarbeitbar ist. Hat jemand eine Erklärung?
MfG Noobstar0815
Bitte warten ..
Mitglied: SlainteMhath
13.03.2013 um 14:09 Uhr
versuchs mal mit
01.
if "%name2%"=="" ...
Bitte warten ..
Mitglied: Noobstar0815
13.03.2013 um 14:16 Uhr
So habe ich es mitlerweile schon, allerdings weigert er sich weiterhin "net use %lw% /d" auszuführen da net syntaktisch nicht verarbeitbar ist
Bitte warten ..
Mitglied: andimue
13.03.2013 um 14:41 Uhr
Hi Noobstar0815,

ich seh in deiner Prozedur nicht, wo du die Variable lw definierst. Wenn die %lw% natürlich leer ist wäre die Fehlermeldung erklärlich

Gruß
Andi
Bitte warten ..
Mitglied: Noobstar0815
13.03.2013 um 14:43 Uhr
Ich versuche grade mit einer 2. Datei den Fehler zu finden.
01.
 if %a%=="" (net use P: /d) else (echo eingabe vorhanden) 
diesmal gibt es keine Fehler Meldung und else wird ausgeführt, leider auch wenn ich keine Eingabe mache
Bitte warten ..
Mitglied: SlainteMhath
13.03.2013 um 14:52 Uhr
01.
if "%a%"=="" ....
Bitte warten ..
Mitglied: Noobstar0815
13.03.2013 um 14:58 Uhr
I dont know why, aber
01.
set "num=-1"  
02.
:loop  
03.
set /a num=num+1  
04.
 
05.
call set "name2=%%name:~%num%,1%%"  
06.
echo "%name2%" 
07.
if "%name2%"=="" (net use %lw% /d)  
08.
else (   
09.
if %name2%==1 call "%lw%\Update-Skripte\Java.bat" 
10.
if %name2%==2 call "%lw%\Update-Skripte\FlashX.bat" 
11.
if %name2%==3 call "%lw%\Update-Skripte\FlashPlug.bat" 
12.
if %name2%==4 call "%lw%\Update-Skripte\shockwave.bat" 
13.
if %name2%==5 call "%lw%\Update-Skripte\Firefox.bat" 
14.
if %name2%==6 call "%lw%\Update-Skripte\adobereader.bat" 
15.
if %name2%==7 call "%lw%\Update-Skripte\msdefender.bat" 
16.
if %name2%==8 shutdown -r -t 0 
17.
if %name2%==9 shutdown -c -t 0 
18.
goto :loop  
19.
)
läuft, bricht aber durch Fehlermeldungen ab, was aber auch Ok ist, weil er dies erst tut, nachdem alle if-Befehle ausgeführt wurden wie ich es wollte und nachdem %lw% gelöscht wurde.
Bitte warten ..
Mitglied: Noobstar0815
13.03.2013 um 15:00 Uhr
Zitat von andimue:
Hi Noobstar0815,

ich seh in deiner Prozedur nicht, wo du die Variable lw definierst. Wenn die %lw% natürlich leer ist wäre die
Fehlermeldung erklärlich

Gruß
Andi

Die Variable habe ich ganz oben definiert,
01.
set /p lw="Bitte freien Laufwerksbuchstaben angeben (Bsp.: K:): " 
02.
net use %lw% \\Www-hgr...
Bitte warten ..
Mitglied: SlainteMhath
13.03.2013 um 15:00 Uhr
Gut, dann warten wir hier jetzt auf die nächste Frage von deinem Ausbilder ^^
Bitte warten ..
Mitglied: Snowman25
13.03.2013 um 15:21 Uhr
Hallo Noobstar0815,

ohne jetzt groß dein Problem angeschaut zu haben:

Die automatische Verwaltung von Laufwerksbuchstaben geht super mit PUSHD und POPD. Wenn du PUSHD mit einem Netzwerkpfad aufrufst, dann wird ein temporäres Laufwerkmapping gemacht, angefangen bei Z: und dein Arbeitsverzeichnis wird auch dort hin gesetzt. Sobald du dann POPD aufrufst, landest du wieder in deinem vorherigen Ordner und das Mapping wird aufgehoben.

Gruß
Snow
Bitte warten ..
Mitglied: andimue
14.03.2013 um 09:48 Uhr
Zitat von Noobstar0815:

Die Variable habe ich ganz oben definiert,
01.
> set /p lw="Bitte freien Laufwerksbuchstaben angeben (Bsp.: K:): " 
02.
> net use %lw% \\Www-hgr... 
03.
> 

Hallo,

es wäre gut, wenn du deinen kompletten Code posten würdest, und nicht nur Teil davon
Ansonsten ist es m.E. recht schwierig dir zu helfen.

Andi
Bitte warten ..
Mitglied: Noobstar0815
14.03.2013, aktualisiert um 10:41 Uhr
Also langsam hab ich wirklich die Schnauze voll, gestern lief alles, heute nicht.
01.
set name=0 
02.
set /p name="Bitte alle zu aktualisierenden Programme angeben (Bsp.: 134):" 
03.
 
04.
 
05.
set "num=-1"  
06.
:loop  
07.
set /a num=num+1  
08.
 
09.
call set "name2=%%name:~%num%,1%%"  
10.
echo "%name2%" 
11.
if "%name2%"=="" (net use %lw% /d)  
12.
else (   
13.
if %name2%==1 call "%lw%\Update-Skripte\Java.bat" 
14.
if %name2%==2 call "%lw%\Update-Skripte\FlashX.bat" 
15.
if %name2%==3 call "%lw%\Update-Skripte\FlashPlug.bat" 
16.
if %name2%==4 call "%lw%\Update-Skripte\shockwave.bat" 
17.
if %name2%==5 call "%lw%\Update-Skripte\Firefox.bat" 
18.
if %name2%==6 call "%lw%\Update-Skripte\adobereader.bat" 
19.
if %name2%==7 call "%lw%\Update-Skripte\msdefender.bat" 
20.
if %name2%==8 shutdown -r -t 0 
21.
if %name2%==9 shutdown -c -t 0 
22.
goto :loop  
23.
)
Ich habe nichts dran verändet... Er meckert dass else falsch geschrieben oder unbekannt ist.
Achso und noch eine Frage, ich rufe ja anderen .bat-Dateien auf. Diese greifen ebenfalls auf das Laufwerk zu, funktioniert dann dort %lw% auch oder muss ich mir da etwas anderes einfallen lassen?
Bitte warten ..
Mitglied: Noobstar0815
14.03.2013 um 10:42 Uhr
Ok hier der ganze code
01.
cls 
02.
@echo off 
03.
set /p lw="Bitte freien Laufwerksbuchstaben angeben (Bsp.: K:): " 
04.
net use %lw% \\WWW-HGR\BDR\BDR-Benutzer\Ausbildung\automatischeUpdateswoechentlich 
05.
echo		Updates 
06.
echo		======= 
07.
echo. 
08.
echo	[1] Alle Updates 
09.
echo	[2] Einzelne Updates 
10.
echo	[3] Alle Updates mit Herunterfahren 
11.
echo	[4] Alle Updates mit Neustarten 
12.
 
13.
set asw=0 
14.
set /p asw="Bitte Auswahl eingeben (Bsp.: 2): " 
15.
 
16.
if %asw%==1 goto ALL 
17.
if %asw%==2 goto DIV 
18.
if %asw%==3 goto ALLSHUT 
19.
if %asw%==4 goto ALLRE 
20.
 
21.
:DIV 
22.
echo. 
23.
echo	[1] Java 
24.
echo	[2] Flash Player Active X 
25.
echo	[3] Flash Player Plug-In 
26.
echo	[4] Shockwave 
27.
echo	[5] Firefox 
28.
echo	[6] Reader 
29.
echo	[7] Microsoft Windows Defender 
30.
echo	[8] Neustart (nur als letzte Ziffer!!!) 
31.
echo	[9] Herunterfahren (nur als letzte Ziffer!!!) 
32.
echo. 
33.
set name=0 
34.
set /p name="Bitte alle zu aktualisierenden Programme angeben (Bsp.: 134):" 
35.
 
36.
 
37.
set "num=-1"  
38.
:loop  
39.
set /a num=num+1  
40.
 
41.
call set "name2=%%name:~%num%,1%%"  
42.
echo "%name2%" 
43.
if "%name2%"=="" (net use %lw% /d)  
44.
else (   
45.
if %name2%==1 call "%lw%\Update-Skripte\Java.bat" 
46.
if %name2%==2 call "%lw%\Update-Skripte\FlashX.bat" 
47.
if %name2%==3 call "%lw%\Update-Skripte\FlashPlug.bat" 
48.
if %name2%==4 call "%lw%\Update-Skripte\shockwave.bat" 
49.
if %name2%==5 call "%lw%\Update-Skripte\Firefox.bat" 
50.
if %name2%==6 call "%lw%\Update-Skripte\adobereader.bat" 
51.
if %name2%==7 call "%lw%\Update-Skripte\msdefender.bat" 
52.
if %name2%==8 shutdown -r -t 0 
53.
if %name2%==9 shutdown -c -t 0 
54.
goto :loop  
55.
56.
 
57.
:ALL 
58.
echo Java 
59.
call "%lw%\Update-Skripte\Java.bat" 
60.
echo Flash Player Active X 
61.
call "%lw%\Update-Skripte\FlashX.bat" 
62.
echo Flash Player Plug-In 
63.
call "%lw%\Update-Skripte\FlashPlug.bat" 
64.
echo Shockwave 
65.
call "%lw%\Update-Skripte\shockwave.bat" 
66.
echo Firefox 
67.
call "%lw%\Update-Skripte\Firefox.bat" 
68.
echo Adobe Reader 
69.
call "%lw%\Update-Skripte\adobereader.bat" 
70.
echo Microsoft Windows Defender 
71.
call "%lw%\Update-Skripte\msdefender.bat" 
72.
net use %lw% /d 
73.
goto END 
74.
 
75.
:ALLSHUT 
76.
echo Java 
77.
call "%lw%\Update-Skripte\Java.bat" 
78.
echo Flash Player Active X 
79.
call "%lw%\Update-Skripte\FlashX.bat" 
80.
echo Flash Player Plug-In 
81.
call "%lw%\Update-Skripte\FlashPlug.bat" 
82.
echo Shockwave 
83.
call "%lw%\Update-Skripte\shockwave.bat" 
84.
echo Firefox 
85.
call "%lw%\Update-Skripte\Firefox.bat" 
86.
echo Adobe Reader 
87.
call "%lw%\Update-Skripte\adobereader.bat" 
88.
echo Microsoft Windows Defender 
89.
call "%lw%\Update-Skripte\msdefender.bat" 
90.
net use %lw% /d 
91.
shutdown -c -t 0 
92.
 
93.
:ALLRE 
94.
echo Java 
95.
call "%lw%\Update-Skripte\Java.bat" 
96.
echo Flash Player Active X 
97.
call "%lw%\Update-Skripte\FlashX.bat" 
98.
echo Flash Player Plug-In 
99.
call "%lw%\Update-Skripte\FlashPlug.bat" 
100.
echo Shockwave 
101.
call "%lw%\Update-Skripte\shockwave.bat" 
102.
echo Firefox 
103.
call "%lw%\Update-Skripte\Firefox.bat" 
104.
echo Adobe Reader 
105.
call "%lw%\Update-Skripte\adobereader.bat" 
106.
echo Microsoft Windows Defender 
107.
call "%lw%\Update-Skripte\msdefender.bat" 
108.
net use %lw% /d 
109.
shutdown -r -t 0 
110.
:END 
111.
echo Ende
Bitte warten ..
Mitglied: Noobstar0815
14.03.2013 um 10:52 Uhr
Und hier einmal die Ausgabe der cmd. Es scheint doch alles zu funktionieren, allerdings sind mir da ein paar Fehlermeldungen zu viel, vor allem am Schluss, könnt ihr mir sagen wie ich die los werden?
01.
G:\Update-Skripte>set /p lw="Bitte freien Laufwerksbuchstaben angeben (Bsp.: K:) 
02.
: " 
03.
Bitte freien Laufwerksbuchstaben angeben (Bsp.: K:): K: 
04.
 
05.
G:\Update-Skripte>net use K: \\WWW-HGR\BDR\BDR-Benutzer\Ausbildung\automatischeU 
06.
pdateswoechentlich 
07.
Der Befehl wurde erfolgreich ausgeführt. 
08.
 
09.
 
10.
G:\Update-Skripte>echo          Updates 
11.
        Updates 
12.
 
13.
G:\Update-Skripte>echo          ======= 
14.
        ======= 
15.
 
16.
G:\Update-Skripte>echo. 
17.
 
18.
 
19.
G:\Update-Skripte>echo  [1] Alle Updates 
20.
[1] Alle Updates 
21.
 
22.
G:\Update-Skripte>echo  [2] Einzelne Updates 
23.
[2] Einzelne Updates 
24.
 
25.
G:\Update-Skripte>echo  [3] Alle Updates mit Herunterfahren 
26.
[3] Alle Updates mit Herunterfahren 
27.
 
28.
G:\Update-Skripte>echo  [4] Alle Updates mit Neustarten 
29.
[4] Alle Updates mit Neustarten 
30.
 
31.
G:\Update-Skripte>set asw=0 
32.
 
33.
G:\Update-Skripte>set /p asw="Bitte Auswahl eingeben (Bsp.: 2): " 
34.
Bitte Auswahl eingeben (Bsp.: 2): 2 
35.
 
36.
G:\Update-Skripte>if 2 == 1 goto ALL 
37.
 
38.
G:\Update-Skripte>if 2 == 2 goto DIV 
39.
 
40.
G:\Update-Skripte>echo. 
41.
 
42.
 
43.
G:\Update-Skripte>echo  [1] Java 
44.
[1] Java 
45.
 
46.
G:\Update-Skripte>echo  [2] Flash Player Active X 
47.
[2] Flash Player Active X 
48.
 
49.
G:\Update-Skripte>echo  [3] Flash Player Plug-In 
50.
[3] Flash Player Plug-In 
51.
 
52.
G:\Update-Skripte>echo  [4] Shockwave 
53.
[4] Shockwave 
54.
 
55.
G:\Update-Skripte>echo  [5] Firefox 
56.
[5] Firefox 
57.
 
58.
G:\Update-Skripte>echo  [6] Reader 
59.
[6] Reader 
60.
 
61.
G:\Update-Skripte>echo  [7] Microsoft Windows Defender 
62.
[7] Microsoft Windows Defender 
63.
 
64.
G:\Update-Skripte>echo  [8] Neustart (nur als letzte Ziffer!!!) 
65.
[8] Neustart (nur als letzte Ziffer!!!) 
66.
 
67.
G:\Update-Skripte>echo  [9] Herunterfahren (nur als letzte Ziffer!!!) 
68.
[9] Herunterfahren (nur als letzte Ziffer!!!) 
69.
 
70.
G:\Update-Skripte>echo. 
71.
 
72.
 
73.
G:\Update-Skripte>set name=0 
74.
 
75.
G:\Update-Skripte>set /p name="Bitte alle zu aktualisierenden Programme angeben 
76.
(Bsp.: 134):" 
77.
Bitte alle zu aktualisierenden Programme angeben (Bsp.: 134):2 
78.
 
79.
G:\Update-Skripte>set "num=-1" 
80.
 
81.
G:\Update-Skripte>set /a num=num+1 
82.
 
83.
G:\Update-Skripte>call set "name2=%name:~0,1%" 
84.
 
85.
G:\Update-Skripte>echo "2" 
86.
"2" 
87.
 
88.
G:\Update-Skripte>if "2" == "" (net use K: /d ) 
89.
 
90.
G:\Update-Skripte>else ( 
91.
Der Befehl "else" ist entweder falsch geschrieben oder 
92.
konnte nicht gefunden werden. 
93.
 
94.
G:\Update-Skripte>if 2 == 1 call "K:\Update-Skripte\Java.bat" 
95.
 
96.
G:\Update-Skripte>if 2 == 2 call "K:\Update-Skripte\FlashX.bat" 
97.
 
98.
G:\Update-Skripte>start /wait "" "G:\Adobe Flash Player Active X\install_flash_p 
99.
layer_11_active_x.msi" /qn 
100.
 
101.
G:\Update-Skripte>echo Flash Player Active X fertig 
102.
Flash Player Active X fertig 
103.
 
104.
G:\Update-Skripte>if 2 == 3 call "K:\Update-Skripte\FlashPlug.bat" 
105.
 
106.
G:\Update-Skripte>if 2 == 4 call "K:\Update-Skripte\shockwave.bat" 
107.
 
108.
G:\Update-Skripte>if 2 == 5 call "K:\Update-Skripte\Firefox.bat" 
109.
 
110.
G:\Update-Skripte>if 2 == 6 call "K:\Update-Skripte\adobereader.bat" 
111.
 
112.
G:\Update-Skripte>if 2 == 7 call "K:\Update-Skripte\msdefender.bat" 
113.
 
114.
G:\Update-Skripte>if 2 == 8 shutdown -r -t 0 
115.
 
116.
G:\Update-Skripte>if 2 == 9 shutdown -c -t 0 
117.
 
118.
G:\Update-Skripte>goto :loop 
119.
 
120.
G:\Update-Skripte>set /a num=num+1 
121.
 
122.
G:\Update-Skripte>call set "name2=%name:~1,1%" 
123.
 
124.
G:\Update-Skripte>echo "" 
125.
"" 
126.
 
127.
G:\Update-Skripte>if "" == "" (net use K: /d ) 
128.
K: wurde erfolgreich gelöscht. 
129.
 
130.
 
131.
G:\Update-Skripte>else ( 
132.
Der Befehl "else" ist entweder falsch geschrieben oder 
133.
konnte nicht gefunden werden. 
134.
"call" ist syntaktisch an dieser Stelle nicht verarbeitbar. 
135.
 
136.
G:\Update-Skripte>if ==1 call "K:\Update-Skripte\Java.bat" 
137.
 
138.
G:\Update-Skripte>
Bitte warten ..
Mitglied: Snowman25
14.03.2013 um 10:57 Uhr
Hey. Was spricht dagegen, Zeilen 3 und 4 gegen
01.
PUSHD \\WWW-HGR\BDR\BDR-Benutzer\Ausbildung\automatischeUpdateswoechentlich
zu ersetzen?
Dann kannst du dir das ganze %lw%-Gedöns ersparen. Da du eh nichts aus deinem aktuellen Verzeichnis ausführst ist es eh undurchdacht, jedesmal einen kompletten Pfad aufzurufen anstatt einfach einmal cd /D K: zu machen.
01.
cls 
02.
@echo off 
03.
PUSHD \\WWW-HGR\BDR\BDR-Benutzer\Ausbildung\automatischeUpdateswoechentlich 
04.
echo		Updates 
05.
echo		======= 
06.
echo. 
07.
echo	[1] Alle Updates 
08.
echo	[2] Einzelne Updates 
09.
echo	[3] Alle Updates mit Herunterfahren 
10.
echo	[4] Alle Updates mit Neustarten 
11.
 
12.
set asw=0 
13.
set /p asw="Bitte Auswahl eingeben (Bsp.: 2): " 
14.
 
15.
if %asw%==1 goto ALL 
16.
if %asw%==2 goto DIV 
17.
if %asw%==3 goto ALLSHUT 
18.
if %asw%==4 goto ALLRE 
19.
 
20.
:DIV 
21.
echo. 
22.
echo	[1] Java 
23.
echo	[2] Flash Player Active X 
24.
echo	[3] Flash Player Plug-In 
25.
echo	[4] Shockwave 
26.
echo	[5] Firefox 
27.
echo	[6] Reader 
28.
echo	[7] Microsoft Windows Defender 
29.
echo	[8] Neustart (nur als letzte Ziffer!!!) 
30.
echo	[9] Herunterfahren (nur als letzte Ziffer!!!) 
31.
echo. 
32.
set name=0 
33.
set /p name="Bitte alle zu aktualisierenden Programme angeben (Bsp.: 134):" 
34.
 
35.
 
36.
set "num=-1"  
37.
:loop  
38.
set /a num=num+1  
39.
 
40.
call set "name2=%%name:~%num%,1%%"  
41.
echo "%name2%" 
42.
if "%name2%"=="" (POPD)  
43.
else (   
44.
if %name2%==1 call "Update-Skripte\Java.bat" 
45.
if %name2%==2 call "Update-Skripte\FlashX.bat" 
46.
if %name2%==3 call "Update-Skripte\FlashPlug.bat" 
47.
if %name2%==4 call "Update-Skripte\shockwave.bat" 
48.
if %name2%==5 call "Update-Skripte\Firefox.bat" 
49.
if %name2%==6 call "Update-Skripte\adobereader.bat" 
50.
if %name2%==7 call "Update-Skripte\msdefender.bat" 
51.
if %name2%==8 shutdown -r -t 0 
52.
if %name2%==9 shutdown -c -t 0 
53.
goto :loop  
54.
55.
 
56.
:ALL 
57.
echo Java 
58.
call "Update-Skripte\Java.bat" 
59.
echo Flash Player Active X 
60.
call "Update-Skripte\FlashX.bat" 
61.
echo Flash Player Plug-In 
62.
call "Update-Skripte\FlashPlug.bat" 
63.
echo Shockwave 
64.
call "Update-Skripte\shockwave.bat" 
65.
echo Firefox 
66.
call "Update-Skripte\Firefox.bat" 
67.
echo Adobe Reader 
68.
call "Update-Skripte\adobereader.bat" 
69.
echo Microsoft Windows Defender 
70.
call "Update-Skripte\msdefender.bat" 
71.
POPD 
72.
goto END 
73.
 
74.
:ALLSHUT 
75.
echo Java 
76.
call "Update-Skripte\Java.bat" 
77.
echo Flash Player Active X 
78.
call "Update-Skripte\FlashX.bat" 
79.
echo Flash Player Plug-In 
80.
call "Update-Skripte\FlashPlug.bat" 
81.
echo Shockwave 
82.
call "Update-Skripte\shockwave.bat" 
83.
echo Firefox 
84.
call "Update-Skripte\Firefox.bat" 
85.
echo Adobe Reader 
86.
call "Update-Skripte\adobereader.bat" 
87.
echo Microsoft Windows Defender 
88.
call "Update-Skripte\msdefender.bat" 
89.
POPD 
90.
shutdown -c -t 0 
91.
 
92.
:ALLRE 
93.
echo Java 
94.
call "Update-Skripte\Java.bat" 
95.
echo Flash Player Active X 
96.
call "Update-Skripte\FlashX.bat" 
97.
echo Flash Player Plug-In 
98.
call "Update-Skripte\FlashPlug.bat" 
99.
echo Shockwave 
100.
call "Update-Skripte\shockwave.bat" 
101.
echo Firefox 
102.
call "Update-Skripte\Firefox.bat" 
103.
echo Adobe Reader 
104.
call "Update-Skripte\adobereader.bat" 
105.
echo Microsoft Windows Defender 
106.
call "Update-Skripte\msdefender.bat" 
107.
POPD 
108.
shutdown -r -t 0 
109.
:END 
110.
echo Ende
Diese Version ist ohne %lw%. Alle net use %lw% /D wurden durch POPD ersetzt.

Gruß
Snow
Bitte warten ..
Mitglied: Noobstar0815
14.03.2013 um 11:01 Uhr
Danke Snow, das klingt nicht schlecht, nur weiß ich dann nicht, wie ich das mit den anderen Dateien machen muss. Die ganzen call-Befehle rufen Dateien wie diese:
01.
 @for %%f in ("G:\Firefox\*.*") do start /wait "" "%%f" /qn 
02.
echo Firefox fertig
auf. Wie müsste ich es dann dort mit dem Pfad machen? Weil ich weiß ja nicht, welchen Laufwerksbuchstaben PUSHD setzt. Du sagtest ja er fängt bei Z: an, das wiederum heißt dass wenn Z: vergeben ist er sich einen anderen nimmt.
Bitte warten ..
Mitglied: Snowman25
14.03.2013 um 11:10 Uhr
G: ist doch ein bereits vorhandenes Mapping? Du erstellst ja nur 1 Mapping dynamisch: Das auf K:. Sollte also keine Probleme mit G: geben.

Wo dein Fehler else ist keine Anweisung liegt:
Du darfst nicht
01.
 if <abc> (command) 
02.
else (<command2>)
schreiben sondern:
01.
 if <abc> ( 
02.
<command> 
03.
) else ( 
04.
<command 2> 
05.
)
Liegt daran, dass Batch zeilenbasiert hinunterläuft und du somit im ersten beispiel den IF-Block schon verlassen hast wenn du zum else kommst.
Bitte warten ..
Mitglied: Noobstar0815
14.03.2013 um 11:36 Uhr
Danke Snow für die Erklärung. Das Problem ist, dass meine Dateien mit G: veraltet sind. Als ich sie geschrieben habe, hatte ich auch bei der Hauptdatei nicht net use %lw% sondern net use G:, da ich dies nun variabel gemacht habe, muss ich nun auch die anderen ändern. Nur wie mache ich es? Diese Dateien werden durch die Batch aufgerufen, übernehmen sie dann auch die Paramter / Variablen?
Bitte warten ..
Mitglied: bastla
14.03.2013 um 14:32 Uhr
Hallo Noobstar0815!

Diese Dateien werden durch die Batch aufgerufen, übernehmen sie dann auch die Paramter / Variablen?
Was haben denn Deine Tests dazu ergeben?
Übrigens: Wenn Du doch schon eine Mehrfachauswahl von Funktionen realisiert hast, würde ich die Wiederholungen in ":ALL", ":ALLSHUT" und ":ALLRE" einsparen und das (ungetestet) etwa so umsetzen (und mir außerdem einen aussagekräftigeren Variablennamen als "%name%" einfallen lassen):
01.
cls 
02.
@echo off 
03.
PUSHD \\WWW-HGR\BDR\BDR-Benutzer\Ausbildung\automatischeUpdateswoechentlich 
04.
echo		Updates 
05.
echo		======= 
06.
echo. 
07.
echo	[1] Alle Updates 
08.
echo	[2] Einzelne Updates 
09.
echo	[3] Alle Updates mit Herunterfahren 
10.
echo	[4] Alle Updates mit Neustarten 
11.
 
12.
set "asw=" 
13.
set "name=" 
14.
set /p asw="Bitte Auswahl eingeben (Bsp.: 2): " 
15.
 
16.
if %asw%==1 (set "name=1234567" & goto :Ausf) 
17.
if %asw%==3 (set "name=12345678" & goto :Ausf) 
18.
if %asw%==4 (set "name=12345679" & goto :Ausf) 
19.
 
20.
:DIV 
21.
echo. 
22.
echo	[1] Java 
23.
echo	[2] Flash Player Active X 
24.
echo	[3] Flash Player Plug-In 
25.
echo	[4] Shockwave 
26.
echo	[5] Firefox 
27.
echo	[6] Reader 
28.
echo	[7] Microsoft Windows Defender 
29.
echo	[8] Neustart (nur als letzte Ziffer!!!) 
30.
echo	[9] Herunterfahren (nur als letzte Ziffer!!!) 
31.
echo. 
32.
set /p name="Bitte alle zu aktualisierenden Programme angeben (Bsp.: 134): " 
33.
 
34.
:Ausf 
35.
set /a num=-1 
36.
:loop  
37.
set /a num+=1  
38.
 
39.
call set "name2=%%name:~%num%,1%%"  
40.
echo "%name2%" 
41.
if "%name2%"=="" ( 
42.
    POPD  
43.
) else (   
44.
    if %name2%==1 call "Update-Skripte\Java.bat" 
45.
    if %name2%==2 call "Update-Skripte\FlashX.bat" 
46.
    if %name2%==3 call "Update-Skripte\FlashPlug.bat" 
47.
    if %name2%==4 call "Update-Skripte\shockwave.bat" 
48.
    if %name2%==5 call "Update-Skripte\Firefox.bat" 
49.
    if %name2%==6 call "Update-Skripte\adobereader.bat" 
50.
    if %name2%==7 call "Update-Skripte\msdefender.bat" 
51.
    if %name2%==8 shutdown -r -t 0 
52.
    if %name2%==9 shutdown -c -t 0 
53.
    goto :loop  
54.
55.
:END 
56.
echo Ende
Grüße
bastla
Bitte warten ..
Mitglied: Noobstar0815
15.03.2013 um 08:46 Uhr
Das ist eine gute Idee Bastla, danke, aber ich werde es jetzt so lassen. Die Fehlermeldungen die mich gestört hatten, lagen an einer falschen Syntax mit if else ... Jetzt kommt nur noch eine Fehlermeldung, dass call syntaktisch nicht verarbeitbar ist. Dies ist aber auch gut, da es so das Programm nach meiner Auswahl und nach überprüfen der if-Abfragen beendet, sobald name2 keinen Wert mehr hat.
Bitte warten ..
Mitglied: bastla
15.03.2013 um 13:13 Uhr
Hallo Noobstar0815!
Jetzt kommt nur noch eine Fehlermeldung, dass call syntaktisch nicht verarbeitbar ist. Dies ist aber auch gut, da es so das Programm nach meiner Auswahl und nach überprüfen der if-Abfragen beendet, sobald name2 keinen Wert mehr hat.
That hurts ...

Grüße
bastla
Bitte warten ..
Mitglied: Biber
15.03.2013 um 14:12 Uhr
Hmmja, Noobstar0815,

wenn also eine bestimmte Fehlermeldung auftritt, dann weiss der Skriptschreiber, dass alles works as designed???

Es sind schon Entwickler aus geringeren Anlässen zum Leergutsammler umgeschult worden.

Ich geb dir auch mal ein dislike mit ins Wochenende.

Grüße
Biber
Bitte warten ..
Mitglied: Noobstar0815
15.03.2013 um 15:44 Uhr
Moin Biber, du hast recht. Allerdings wäre es eigentlich in diesem Fall kein Problem, da es ein gewollter Fehler ist, der das Programm beendet. Was allerdings nicht sein sollte, ist, dass es immer noch nicht läuft :D Ich habe gestern die Syntax der if-else-Funktion korrigiert, anschließend getestet. Beim Test habe ich nicht richtig aufgepasst, sondern nur geschaut, ob er noch Fehlermeldungen wegen if-else gibt, was nicht der Fall ist. Allerdings löscht er meint net use nicht mehr.
01.
G:\Update-Skripte>set name=0 
02.
 
03.
G:\Update-Skripte>set /p name="Bitte alle zu aktualisierenden Programme angeben 
04.
(Bsp.: 134):" 
05.
Bitte alle zu aktualisierenden Programme angeben (Bsp.: 134):2 
06.
 
07.
G:\Update-Skripte>set "num=-1" 
08.
 
09.
G:\Update-Skripte>set /a num=num+1 
10.
 
11.
G:\Update-Skripte>call set "name2=%name:~0,1%" 
12.
 
13.
G:\Update-Skripte>echo "2" 
14.
"2" 
15.
 
16.
G:\Update-Skripte>if "2" == "" (net use K: /d )  else ( 
17.
if 2 == 1 call "K:\Update-Skripte\Java.bat" 
18.
 if 2 == 2 call "K:\Update-Skripte\FlashX.bat" 
19.
 if 2 == 3 call "K:\Update-Skripte\FlashPlug.bat" 
20.
 if 2 == 4 call "K:\Update-Skripte\shockwave.bat" 
21.
 if 2 == 5 call "K:\Update-Skripte\Firefox.bat" 
22.
 if 2 == 6 call "K:\Update-Skripte\adobereader.bat" 
23.
 if 2 == 7 call "K:\Update-Skripte\msdefender.bat" 
24.
 if 2 == 8 shutdown -r -t 0 
25.
 if 2 == 9 shutdown -c -t 0 
26.
 goto :loop 
27.
28.
 
29.
G:\Update-Skripte>start /wait "" "K:\Adobe Flash Player Active X\install_flash_p 
30.
layer_11_active_x.msi" /qn 
31.
 
32.
G:\Update-Skripte>echo Flash Player Active X fertig 
33.
Flash Player Active X fertig 
34.
 
35.
G:\Update-Skripte>set /a num=num+1 
36.
 
37.
G:\Update-Skripte>call set "name2=%name:~1,1%" 
38.
 
39.
G:\Update-Skripte>echo "" 
40.
"" 
41.
"call" ist syntaktisch an dieser Stelle nicht verarbeitbar. 
42.
 
43.
G:\Update-Skripte>if ==1 call "K:\Update-Skripte\Java.bat"
Er ignoriert nach dem :LOOP die if-Abfrage komplett und springt direkt in den else-Teil, weiß jemand warum? Kann es sein, dass die geschieht weil die if-Abfrage am Anfang nicht zu traf dass er sie deswegen auslässt?
Bitte warten ..
Mitglied: Snowman25
15.03.2013 um 16:08 Uhr
Welches net use? Du hast keine net use mehr, da du doch PUSHD und POPD verwendest.
Und die call set-Anweisung kommt aus einem anderen Skript.
Bitte warten ..
Mitglied: Endoro
16.03.2013, aktualisiert 18.03.2013
Hallo,

die IfAbfrage wird nicht ignoriert. Wenn du meinst, dass der ElseZweig abgearbeitet wird: schreib doch da mal ein `Echo` an den Anfang!

bb
Bitte warten ..
Mitglied: Noobstar0815
20.03.2013 um 08:54 Uhr
Also, um weitere Verwirrungen zu vermeiden: Ich benutze weiterhin "net use", da mir nicht klar ist, warum ich es unbedingt in "PUSHD" und "POPD" ändern sollte. Desweiteren habe ich Echo am Anfang stehen, was man bei dem gesamt Code sehen kann. Allerdings habe ich kein Verständnis dafür, jedes mal 115 Zeilen zu posten, obwohl sich meistens nichts ändert. Ich habe einmal den gesamten Code gepostet, und poste dann nur noch die Änderungen. Bei der IfAbfrage ist folgendes: Er ignoriert den If-Teil komplett und arbeitet sturr den Else-Teil runter.
Bitte warten ..
Mitglied: Snowman25
20.03.2013 um 10:22 Uhr
Hey Noobstar0815,

Ich habe dir bereits geschildert warum du PUSHD und POPD verwenden sollst. aber hier nochmal:
Mit PUSHD und POPD kannst du dir das ganze net use-Zeug sparen. Genauso wie das ständige merken des gemappten Laufwerks. Killt schonmal viele Fehlerquellen.
Wenn du nicht auf hilfreiche Tipps aus bist: Selbst schuld.
Zu deiner IF-Abfrage: Sieht doch ganz klar aus?
if ==1 call ... kann doch garnicht funktionieren. Immerhin ist %name2% ja leer.
Probiers mit if x%name2%==x1. Das erspart dir die Möglichkeit eines leeren String im Vergleich (welcher zu Syntax-Fehlern führt).

Kein Gruß
~ Snow
Bitte warten ..
Mitglied: Noobstar0815
20.03.2013 um 14:02 Uhr
OK Snow,
Also, das mit dem PUSHD und POPD benutze ich nicht, da ich bereits alles eingegeben hatte, und es so unnöitge Arbeit gewesen wäre, wenn ich alles geändert hätte. Zudem lag der Fehler nicht bei dem %lw%. Desweiteren war es beabsichtigt, dass %name2% irgendwann leer ist. %name2% wird mit der "num"sten Ziffer von "name" gesetzt, ist der Wert von "num" höher als die Länger der Ziffern von "name" sollte "name2" leer sein. Deshalb wollte ich es mit einer if-else-Abfrage machen, "if %name2%=="" net use %lw% /d". Dies wollte CMD aber nicht und hat den if-Befehl ignoriert und sprang direkt zum else-Befehl. Daraufhin habe ich es etwas geändert, nun sieht es so aus
01.
 set "num=-1"  
02.
:loop  
03.
set /a num=num+1  
04.
 
05.
call set "name2=%%name:~%num%,1%%"  
06.
echo "%name2%"   
07.
if "%name2%"=="" goto END 
08.
if %name2%==1 call "%lw%\Update-Skripte\Java.bat" 
09.
if %name2%==2 call "%lw%\Update-Skripte\FlashX.bat" 
10.
if %name2%==3 call "%lw%\Update-Skripte\FlashPlug.bat" 
11.
if %name2%==4 call "%lw%\Update-Skripte\shockwave.bat" 
12.
if %name2%==5 call "%lw%\Update-Skripte\Firefox.bat" 
13.
if %name2%==6 call "%lw%\Update-Skripte\adobereader.bat" 
14.
if %name2%==7 call "%lw%\Update-Skripte\msdefender.bat" 
15.
if %name2%==8 shutdown -r -t 0 
16.
if %name2%==9 shutdown -c -t 0 
17.
goto LOOP  
18.
19.
goto END
Das %name2% musste ich dort auch noch in "" setzen, damit %name2%, sollte "num" höher sein als die Länge der Ziffern von "name", den Wert "" hat und erkannt werden kann. So gibt es keine einzige Fehlermeldung in dieser Datei mehr und alles läuft wie geplant.

Ich weiß ich könnte mehr auf Tipps eingehen, ich gehe allerdings nur auf Tipps ein, die mir in dem Moment logisch erscheinen. Mit dem PUSHD und POPD ist logisch, ja, allerdings machte es für mich zu dem Zeitpunkt keinen Sinn, da dies nicht der Fehler war und nur unnötige Schreibarbeit bedeutet hätte. Es tut mir leid, falls ich sturr, naiv oder unfreundlich rüberkomme, bin halt etwas eigen.
Da nun alles läuft bedanke ich mich noch einmal bei euch allen für die Hilfe und markiere die Frage als beantwortet.
Bitte warten ..
Mitglied: Snowman25
20.03.2013 um 14:20 Uhr
Zitat von Noobstar0815:
Mit dem PUSHD und POPD ist logisch, ja, allerdings machte es für mich zu dem Zeitpunkt keinen Sinn, da dies nicht
der Fehler war und nur unnötige Schreibarbeit bedeutet hätte. Es tut mir leid, falls ich sturr, naiv oder unfreundlich
rüberkomme, bin halt etwas eigen.

Mal ganz abgesehen davon, dass ich bereits eine komplett auf PUSHD und POPD umgestellte Version gepostet habe.
Aber egal.
Ändere aber bitte dein Update-Skript mit Batch-Datei ab! Walls of Text, keine ordentliche Formatierung und schlechtes Skripting haben in einer Anleitung nichts zu suchen. Nett wäre auch das verpacken von vielgenutzten Code-Teilen in Variablen (zumindest Laufwerkpfade wie G:\Update-Skripte).
Bitte warten ..
Mitglied: format-c
24.03.2013, aktualisiert 25.03.2013
Hallo Noobstar0815.

Die Meldung über die sysntaktische Nichtvereinbarkeit rührt daher, dass die Variable %name2% am Ende leer bzw. gelöscht ist und der Befehlsprozessor dann versucht die folgende Zeile zu parsen:
if ==1 call "%lw%\Update-Skripte\Java.bat"
Und da liegt der Hund begraben: Der Anweisungsblock nach dem if wird dann zwar nicht ausgeführt, aber trotzdem vom Parser gelesen und auf seine Richtigkeit hin überprüft. Die Syntax des Vergleichsoperators "==" erfordert genau zwei Argumente. In der obigen Zeile fehlt eines, ergo syntaktischer Fehler.
Damit die linke Seite nicht leer wird, ergänze die zu vergleichenden Werte mit irgendwas, z.B. (), [], "", '', !!, xx, etc.

Mein Vorschlag:
... 
:loop  
set /a num=num+1  
call set "name2=%%name:~%num%,1%%"  
 
REM bedingter Sprung zum EndOfFile 
if '%name2%'=='' goto :eof 
 
REM # falls dieses Skript selbst von einem anderen Skript  
REM # aufgerufen wird, dann besser 
REM if "%name2%"=="" goto ende1234 
 
echo %name2%  
 
if %name2%==1 call "%lw%\Update-Skripte\Java.bat" 
if %name2%==2 call "%lw%\Update-Skripte\FlashX.bat" 
if %name2%==3 call "%lw%\Update-Skripte\FlashPlug.bat" 
if %name2%==4 call "%lw%\Update-Skripte\shockwave.bat" 
if %name2%==5 call "%lw%\Update-Skripte\Firefox.bat" 
if %name2%==6 call "%lw%\Update-Skripte\adobereader.bat" 
if %name2%==7 call "%lw%\Update-Skripte\msdefender.bat" 
if %name2%==8 shutdown -r -t 0 
if %name2%==9 shutdown -c -t 0 
 
goto :loop 
 
:ende1234 
...


Schöne Grüße
format-c
Bitte warten ..
Mitglied: Noobstar0815
08.04.2013 um 14:44 Uhr
Danke format-c, allerdings bin ich 4 Tage vorher selbst schon auf die Lösung gestoßen dank der Hilfe vorheriger Posts.
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
Ä in batch Datei (12)

Frage von BergEnte zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (20)

Frage von Xaero1982 zum Thema Microsoft ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Festplatten, SSD, Raid
M.2 SSD wird nicht erkannt (14)

Frage von uridium69 zum Thema Festplatten, SSD, Raid ...