Batch: Syntaktischer Fehler in For-Schleife
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
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
Das gleiche Problem tritt wieder auf... neue Batch Datei, gleiche Meldung wie oben
Hier mal die komplette Batch
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.
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
@ECHO ON & SETLOCAL ENABLEDELAYEDEXPANSION
SET PROFILEDIR=\\THDAFS\PROFILE_V2
IF EXIST C:\PROFILE_LIST.TXT DEL /F C:\PROFILE_LIST.TXT
DIR %PROFILEDIR%>>C:\PROFILE_LIST.TXT
FOR /F "USEBACKQ TOKENS=4 DELIMS== " %%i IN (C:\PROFILE_LIST.TXT) DO (
IF EXIST %PROFILEDIR%\%%i\UPM_Profile\AppData\Local\Mozilla RD /S /Q %PROFILEDIR%\%%i\UPM_Profile\AppData\Local\Mozilla
)
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
@ECHO ON & SETLOCAL ENABLEDELAYEDEXPANSION
SET PATHCSV="\\SERVER\ZUGANGS-CODES"
FOR /F %%i IN ('DIR /B /A-D %PATHCSV%\Neue_Codelisten') DO (
IF EXIST "%PATHCSV%\Bearbeitete_Codelisten\%%i" GOTO NEXTFILE
ECHO CODE>>%PATHCSV%\Bearbeitete_Codelisten\%%i
FOR /F "TOKENS=1 DELIMS=;" %%j IN (%PATHCSV%\Neue_Codelisten\%%i) DO (
ECHO %%j >>%PATHCSV%\Bearbeitete_Codelisten\%%i
)
:NEXTFILE
)
PAUSE
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...
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 237397
Url: https://administrator.de/contentid/237397
Ausgedruckt am: 25.11.2024 um 20:11 Uhr
14 Kommentare
Neuester Kommentar
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.
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.
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)
oder
verwenden, wobei in letzterem Fall in %%i der gesamte Pfad, nicht nur der Ordnername, steht ...
Grüße
bastla
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 (
FOR /D %%i IN ("%PROFILEDIR%\*") DO (
Grüße
bastla
Hallo CopyPaste!
Poste doch bitte nochmals Deinen aktuellen Code und die damit erzeugte Ausgabe.
Dass bei der "
oder auf das Nötige reduziert so
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
Poste doch bitte nochmals Deinen aktuellen Code und die damit erzeugte Ausgabe.
Dass bei der "
for /d
"-Variante die Zeile 9 etwa soIF EXIST "%%i\UPM_Profile\AppData\Local\Mozilla" RD /S /Q "%%i\UPM_Profile\AppData\Local\Mozilla"
RD /S /Q "%%i\UPM_Profile\AppData\Local\Mozilla" 2>nul
Ansonsten stellt sich natürlich auch die Frage nach den Rechten für "\\THDAFS\PROFILE_V2" ...
Grüße
bastla
[OT] Moin CopyPaste
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]
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]
Hallo CopyPaste!
Einen Sprung innerhalb eines
geändert werden ...
Grüße
bastla
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@ECHO ON & SETLOCAL ENABLEDELAYEDEXPANSION
SET PATHCSV="\\SERVER\ZUGANGS-CODES"
FOR /F %%i IN ('DIR /B /A-D %PATHCSV%\Neue_Codelisten') DO (
IF NOT EXIST "%PATHCSV%\Bearbeitete_Codelisten\%%i" (
ECHO CODE>>%PATHCSV%\Bearbeitete_Codelisten\%%i
FOR /F "TOKENS=1 DELIMS=;" %%j IN (%PATHCSV%\Neue_Codelisten\%%i) DO (
ECHO %%j >>%PATHCSV%\Bearbeitete_Codelisten\%%i
)
)
)
Grüße
bastla