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

Batch: Syntaktischer Fehler in For-Schleife

Frage Entwicklung Batch & Shell

Mitglied: CopyPaste

CopyPaste (Level 1) - Jetzt verbinden

07.05.2014, aktualisiert 03.07.2014, 2976 Aufrufe, 14 Kommentare, 1 Danke

Hallo,

ich hoffe, ihr könnt mir hier auf die Sprünge helfen.
Ich schreibe relativ viele Batchscripte um mir die tägliche Arbeit im Betrieb zu erleichtern, aber ich stoße in letzter Zeit immer wieder auf einen syntaktischen Fehler... wahrscheinlich seh ich den Wald vor lauter Bäumen nicht.

Das hier wäre jetzt eins dieser Scripte

01.
@ECHO ON & SETLOCAL ENABLEDELAYEDEXPANSION 
02.
 
03.
SET PROFILEDIR=\\THDAFS\PROFILE_V2 
04.
 
05.
IF EXIST C:\PROFILE_LIST.TXT DEL /F C:\PROFILE_LIST.TXT 
06.
DIR %PROFILEDIR%>>C:\PROFILE_LIST.TXT 
07.
 
08.
FOR /F "USEBACKQ TOKENS=4 DELIMS== " %%i IN (C:\PROFILE_LIST.TXT) DO ( 
09.
                   IF EXIST %PROFILEDIR%\%%i\UPM_Profile\AppData\Local\Mozilla RD /S /Q %PROFILEDIR%\%%i\UPM_Profile\AppData\Local\Mozilla 
10.
)
führe ich diesen Code nun aus bekomme ich folgende Rückmeldung von der CMD:

")" kann syntaktisch an dieser Stelle nicht verarbeitet werden.

Ich versteh es einfach nicht...

VG
CopyPaste


EDIT


Das gleiche Problem tritt wieder auf... neue Batch Datei, gleiche Meldung wie oben

")" kann syntaktisch an dieser Stelle nicht verarbeitet werden.

Hier mal die komplette Batch
01.
@ECHO ON & SETLOCAL ENABLEDELAYEDEXPANSION 
02.
 
03.
SET PATHCSV="\\SERVER\ZUGANGS-CODES" 
04.
 
05.
FOR /F %%i IN ('DIR /B /A-D %PATHCSV%\Neue_Codelisten') DO ( 
06.
 
07.
	IF EXIST "%PATHCSV%\Bearbeitete_Codelisten\%%i" GOTO NEXTFILE	 
08.
	ECHO CODE>>%PATHCSV%\Bearbeitete_Codelisten\%%i 
09.
	FOR /F "TOKENS=1 DELIMS=;" %%j IN (%PATHCSV%\Neue_Codelisten\%%i) DO ( 
10.
		ECHO %%j >>%PATHCSV%\Bearbeitete_Codelisten\%%i  
11.
12.
	:NEXTFILE  
13.
14.
 
15.
PAUSE 
16.
ENDLOCAL
Die Dateien, die hier bearbeitet werden, sind CSV Dateien, mit mehreren durch Semikolon getrennte Spalten. Es wird eine Erste Zeile eingefügt und danach nur noch die Werte aus der ersten Spalte in die neue Datei geschrieben.
Vom logischen Aufbau her müsste das Script so funktionieren, darum geht es aber hier auch nicht.

Aber diese Fehlermeldung treibt mich in den Wahnsinn...

Mitglied: emeriks
07.05.2014 um 11:42 Uhr
Was ist, wenn Du Zeile 9 hinten an Zeile 8 hängst und die "()" beim "DO" weglässt?

E.
Bitte warten ..
Mitglied: RaidMan
07.05.2014 um 11:43 Uhr
Hallo CopyPaste

bist du sicher das die "C:\PROFILE_LIST.TXT" nichts unverträgliches enthält?
Bitte warten ..
Mitglied: CopyPaste
07.05.2014, aktualisiert um 12:18 Uhr
@emeriks

ich habe jetzt hier für das Beispiel nur eine Zeile rein geschrieben, das volle Script ist wesentlich länger, läuft aber auf die gleiche Fehlermeldung hinaus.

Wenn ich es in eine Zeile schreibe läuft es durch.


@RaidMan
Der Inhalt passt

Auch wenn ich statt der Zeile "IF EXIST %PROFILEDIR%\%%i\UPM_Profile\AppData\Local\Mozilla RD /S /Q %PROFILEDIR%\%%i\UPM_Profile" nur "ECHO Geht" hinschreibe kommt die selbe Rückmeldung.
Bitte warten ..
Mitglied: miniversum
07.05.2014 um 13:03 Uhr
Hallo,

Mal allgemein gefragt, Warum benutzt du USEBACKQ?
Ich würde auch das einlesen der Verzeichnisse eher so machen:
dir /b /AD > C:\PROFILE_LIST.TXT
und dann die Tikens in der Forschleife entsprechend anpassen.
Damit sparst du dir zum Einen das löschen falls bereits vorhanden, zum Andern macht es das ganze übersichtlicher und weniger Fehleranfällig.
Bitte warten ..
Mitglied: bastla
07.05.2014 um 13:06 Uhr
Hallo copypaste!

Wenn der Pfad/Dateiname von "C:\PROFILE_LIST.TXT" keine Leerzeichen enthält, brauchst Du kein "USEBACKQ"; wenn Du es trotzdem verwendest, setze "C:\PROFILE_LIST.TXT" unter Anführungszeichen - wobei: Hast Du noch eine andere Verwendung für diese Datei? Wenn nicht kannst Du ja auch einfach (unter der Annahme, dass Dich ohnehin nur die Ordner in %PROFILEDIR% interessieren)
FOR /F "DELIMS=" %%i IN ('dir /b/ad "%PROFILEDIR%"') DO (
oder
FOR /D %%i IN ("%PROFILEDIR%\*") DO (
verwenden, wobei in letzterem Fall in %%i der gesamte Pfad, nicht nur der Ordnername, steht ...

Grüße
bastla
Bitte warten ..
Mitglied: CopyPaste
07.05.2014, aktualisiert um 13:50 Uhr
Erstmal ein Danke an euch für die schnellen Antworten.

Ich hatte bis jetzt noch garnicht in die Syntax von DIR geguckt, gefällt mir gut mit dem /B und /A:D. Auch es direkt in die FOR-Schleife zu schreiben, warum ich da nicht drauf gekommen bin...
Auch das FOR /D hatte ich zwar mal gelesen aber nie verwendet, erfüllt aber auch seinen Zweck *THUMBS UP*

Nun noch mal zum eigentlichen Problem zurück.
Leider klappt das Ausführen der Batch auch mit direkt rein geschriebenem Befehl nicht mit mehreren Zeilen.
Auch mir FOR /D kommt der selbe Fehler...
Ich werd noch verrückt, was kann dass denn sein :D

EDIT:
Ich habe es jetzt versucht mit verschiedenen Benutzern auf verschiedenen PCs/Servern auszuführen, überall bekomme ich die gleiche Meldung
Bitte warten ..
Mitglied: CopyPaste
13.05.2014 um 08:44 Uhr
Hat keiner mehr eine Idee?
Bitte warten ..
Mitglied: bastla
13.05.2014, aktualisiert um 11:16 Uhr
Hallo CopyPaste!

Poste doch bitte nochmals Deinen aktuellen Code und die damit erzeugte Ausgabe.
Dass bei der "for /d"-Variante die Zeile 9 etwa so
IF EXIST "%%i\UPM_Profile\AppData\Local\Mozilla" RD /S /Q "%%i\UPM_Profile\AppData\Local\Mozilla"
oder auf das Nötige reduziert so
RD /S /Q "%%i\UPM_Profile\AppData\Local\Mozilla" 2>nul
aussehen muss, hast Du berücksichtigt?

Ansonsten stellt sich natürlich auch die Frage nach den Rechten für "\\THDAFS\PROFILE_V2" ...

Grüße
bastla
Bitte warten ..
Mitglied: CopyPaste
13.05.2014 um 13:45 Uhr
Hallo Bastla,

danke für deine Rückmeldung!
Auf das Verzeichnis besteht Vollzugriff, für alle Benutzer mit denen getestet wurde.

Ich habe es allerdings gerade noch mal versucht und genau den Quelltext von oben, mit dem ich das Problem hatte ausgeführt und es funktioniert auf einmal problemlos....
Falls ich noch mal auf das Problem stoße gebe ich wieder Bescheid, ich hoffe es allerdings nicht^^

Viele Grüße
CopyPaste
Bitte warten ..
Mitglied: Biber
13.05.2014 um 14:24 Uhr
[OT] Moin CopyPaste
Zitat von CopyPaste:

Hat keiner mehr eine Idee?

Und ich wollte vorhin schon als Antwort schreiben "Einfach noch mal mit einer frischen Kopie versuchen!".

Aber ich hab befürchtet, so eine Antwort könnte als "nicht konstruktiv" bewertet werden.

Meine Bitte: Sollte dein Codeschnipsel jetzt laufen, dann poste den funktionierenden Stand in einem Stück für diejenigen, die etwas ähnliches umsetzen wollen.

Grüße
Biber
[/OT]
Bitte warten ..
Mitglied: CopyPaste
13.05.2014 um 15:44 Uhr
Kein Problem, hier ist das ganze Script. Da hast du recht, vielleicht hilft es jemand.

Die Kommentare sollten den Rest erklären..

Viele Grüße
CopyPaste


01.
@ECHO ON & SETLOCAL ENABLEDELAYEDEXPANSION 
02.
 
03.
REM Profilpfad zu den Roaming Profiles eintragen 
04.
 
05.
SET PROFILEDIR=\\SERVER\FREIGABE 
06.
 
07.
 
08.
REM Da in unserer Infrastruktur zwei Typen von Roaming Profiles ( Windows Roaming Profiles & Citrix User Profile Management ) genutzt werden und ich nur möchte, dass die Citrix Profile angefasst werden, Filtere ich die Ausgabe auf die Verzeichnissnamen, die ein .CPM enthalten 
09.
 
10.
FOR /F "TOKENS=1 DELIMS=*" %%i IN ('DIR /B /A:D %PROFILEDIR% ^| FINDSTR /I .CPM') DO ( 
11.
 
12.
REM !!!ACHTUNG!!! Bitte die Verzeichnisse individuell anpassen 
13.
REM Folgende Verzeichnisse werden dann aus dem Citrix Profil gelöscht. Zuvor wurden von mir händisch diese Verzeichnisse in dem GPO für das Citrix UPM eingetragen.  
14.
REM Dieses Script sollte am besten Nachts ausgeführt werden, wenn die User nicht angemeldet sind. 
15.
 
16.
RD /S /Q %PROFILEDIR%\%%i\UPM_Profile\AppData\Local\Mozilla 
17.
RD /S /Q %PROFILEDIR%\%%i\UPM_Profile\AppData\Local\Citrix\GoToMeeting 
18.
RD /S /Q %PROFILEDIR%\%%i\UPM_Profile\AppData\Local\Microsoft\Windows\WebCache 
19.
RD /S /Q %PROFILEDIR%\%%i\UPM_Profile\AppData\Local\Microsoft\Windows\Temporary Internet Files 
20.
RD /S /Q %PROFILEDIR%\%%i\UPM_Profile\AppData\Local\Google 
21.
RD /S /Q %PROFILEDIR%\%%i\UPM_Profile\AppData\Roaming 
22.
RD /S /Q %PROFILEDIR%\%%i\UPM_Profile\AppData\TEMP 
23.
RD /S /Q %PROFILEDIR%\%%i\UPM_Profile\Desktop 
24.
RD /S /Q %PROFILEDIR%\%%i\UPM_Profile\Downloads 
25.
RD /S /Q %PROFILEDIR%\%%i\UPM_Profile\Documents 
26.
RD /S /Q %PROFILEDIR%\%%i\UPM_Profile\Favorites 
27.
RD /S /Q %PROFILEDIR%\%%i\UPM_Profile\Pictures 
28.
RD /S /Q %PROFILEDIR%\%%i\UPM_Profile\Music 
29.
RD /S /Q %PROFILEDIR%\%%i\UPM_Profile\Links 
30.
RD /S /Q %PROFILEDIR%\%%i\UPM_Profile\Videos 
31.
RD /S /Q %PROFILEDIR%\%%i\UPM_Profile\Saved Games 
32.
RD /S /Q %PROFILEDIR%\%%i\UPM_Profile\Searches 
33.
 
34.
)
Bitte warten ..
Mitglied: CopyPaste
03.07.2014 um 11:01 Uhr
Es scheint mit dem IF und der ) zusammen zu hängen. Füge ich in meinem letzterem Script nach dem :NEXTFILE in der nächsten Zeile ein ECHO. ein funktioniert das Script problemlos.
Also So:
01.
02.
	:NEXTFILE 
03.
	ECHO. 
04.
 )
Aber verstehen würde ich das noch gerne.
Ich habe diesen Beitrag gefunden http://www.supportnet.de/t/2454232 . Aber ich kann in dem IF /? nicht die nötigen Informationen über die Klammern finden.

Weiss irgendjemand warum das so ist?
Bitte warten ..
Mitglied: bastla
LÖSUNG 03.07.2014, aktualisiert um 15:28 Uhr
Hallo CopyPaste!

Einen Sprung innerhalb eines IF-Blocks solltest Du eigentlich nicht benötigen - Dein ursprünglicher Ansatz könnte ja (unabhängig von den Vorschlägen oben) auf
01.
@ECHO ON & SETLOCAL ENABLEDELAYEDEXPANSION 
02.
 
03.
SET PATHCSV="\\SERVER\ZUGANGS-CODES" 
04.
 
05.
FOR /F %%i IN ('DIR /B /A-D %PATHCSV%\Neue_Codelisten') DO ( 
06.
 
07.
    IF NOT EXIST "%PATHCSV%\Bearbeitete_Codelisten\%%i" ( 
08.
        ECHO CODE>>%PATHCSV%\Bearbeitete_Codelisten\%%i 
09.
        FOR /F "TOKENS=1 DELIMS=;" %%j IN (%PATHCSV%\Neue_Codelisten\%%i) DO ( 
10.
            ECHO %%j >>%PATHCSV%\Bearbeitete_Codelisten\%%i  
11.
12.
13.
)
geändert werden ...

Grüße
bastla
Bitte warten ..
Mitglied: CopyPaste
03.07.2014 um 15:34 Uhr
Servus Bastla!

da war mein Denkfehler. Das GOTO kann an der Stelle einfach nicht korrekt verarbeitet werden und ist ja auch wirklich komplett überflüssig^^

Falls ich mal wieder das Problem habe, denk ich dran

Cheers
CP
Bitte warten ..
Neuester Wissensbeitrag
CPU, RAM, Mainboards

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

Ähnliche Inhalte
Batch & Shell
gelöst Batch Problem bei einer For Schleife (2)

Frage von Juergen42 zum Thema Batch & Shell ...

Batch & Shell
Batch: Variable Expansion in einer FOR-Schleife (9)

Frage von .Sessl zum Thema Batch & Shell ...

Batch & Shell
gelöst Batch Probleme mit Dateipfaden in for-Schleife (1)

Frage von Jonas1806 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Windows Server
Mailserver auf Windows Server 2012 (8)

Frage von StefanT81 zum Thema Windows Server ...

Backup
Clients als Server missbrauchen? (8)

Frage von 1410640014 zum Thema Backup ...

DSL, VDSL
DSL-Signal bewerten (8)

Frage von SarekHL zum Thema DSL, VDSL ...