gerry56
Goto Top

Fehlermeldung 2.934 kann syntaktisch an dieser Stelle nicht verarbeitet werden

Ich möchte in einer Batchdatei abfragen, ob ein vorhandener Verzeichniseintrag eine Verbindung oder eine Verknüpfung ist.
Die Abfrage erledige ich mit dem Tool ln über den Befehl
D:\daten\hardlink\ln --symbolic "%wohin%"
Natürlich wird die Variable wohin vorher mit einem Verzeichnispfad befüllt.

Da das ganze so weit als möglich automatisch ablaufen soll, wird der Befehl in der Batchdatei wie folgt integriert.
for /f "tokens=* delims=>" %%b in ('D:\daten\hardlink\ln --symbolic "%wohin%"') do set testsymb=%%b  

Bis zu diesem Punkt funktioniert alles wie gewünscht.

Jedoch gibt es bei der Abfrage, ob der Verzeichniseintrag eine Verbindung oder eine Verknüpfung ist, die oben erwähnte Fehlermeldung.

Aus diesem Grund habe ich die Entfernung der Leerzeichen am Beginn und am Ende des Strings eingebaut.
Leider ohne Erfolg, der Fehler bleibt.

Ein anderer Versuch, die Ausgabe in eine Datei umzuleiten, und den Dateiinhalt auszuwerten, bringt auch keinen Erfolg.
Lese ich den Dateiinhalt aus, oder lasse ich den Inhalt der Variablen anzeige, erhalte ich immer die Info ln 2.934
Es ist auch egal, ob ich den Abfragewert in Anführungszeichen setze, oder nicht, die Fehlermeldung bleibt.
Im Anschluß der Inhalt der Batchdatei

@echo symbolic test

            :rem Variable testln1 leeren
set testsymb=
D:\daten\hardlink\ln --symbolic "%wohin%"  
D:\daten\hardlink\ln --symbolic "%wohin%" >d:\test1.txt  

for /f "tokens=* delims=>" %%b in ('D:\daten\hardlink\ln --symbolic "%wohin%"') do set testsymb=%%b  
            :rem Die ersten 5 Zeichen (die linken 5 Zeichen) der Variablen testln1 in die Variable testln2 schreiben
@echo 1 testsymb=%testsymb%
             :rem hier werden alle Leerzeichen am Anfang und am Ende der Stringvariablen entfernt 
:loopLNsymb1xcopyverz
if "%testsymb:~0,1%"==" " set "testsymb=%testsymb:~1%" & goto :loopLNsymb1xcopyverz  
:loopLNsymb2xcopyverz
if "%testsymb:~-1%"==" " set "testsymb=%testsymb:~0,-1%" & goto :loopLNsymb2xcopyverz  
 
@echo 1 testsymb=%testsymb%
set testlnsym3=%testsymb:~0,8% >d:\test3.txt
          @echo 22b symbolic testlnsym3 = %testlnsym3%
         if %testlnsym3% EQU "ln 2934" goto 1459  
Hier wird die Abarbeitung de Batchdatei mit der Fehlermeldung abgebrochen

Auch der Umweg über das Auslesen der gespeicherten Datei mit dem Befehl
set /p testlnsym3=<d:\test1.txt
ändert nichts.

Eine andere Änderung der Abfrage in
if %testlnsym3%=="ln 2934" goto 1459  
bringt auch keine Fehlerbehebung

Wo liegt mein Tippfehler oder mein Denkfehler?

Bitte um Hilfe
Danke im voraus
Gerry

Content-ID: 670347

Url: https://administrator.de/forum/fehlermeldung-2-934-kann-syntaktisch-an-dieser-stelle-nicht-verarbeitet-werden-670347.html

Ausgedruckt am: 24.12.2024 um 16:12 Uhr

gastric
gastric 24.12.2024 aktualisiert um 12:05:49 Uhr
Goto Top
ob ein vorhandener Verzeichniseintrag eine Verbindung oder eine Verknüpfung ist.
@echo off
set "item=D:\Whatever"  
for /f "delims=" %%a in ('powershell -EP Bypass -C "(get-item -LiteralPath '%item%').LinkType -eq 'SymbolicLink'"') do set "isSymLink=%%a"  
if /i "%isSymLink%" == "True" (  
    echo Pfad "%item%" ist ein symbolischer Link  
) else (
    echo Pfad "%item%" ist kein symbolischer Link  
)
Gruß gastric 🎄
rubberman
rubberman 24.12.2024 aktualisiert um 12:21:20 Uhr
Goto Top
Moin.

Eine andere Änderung der Abfrage in
if %testlnsym3%=="ln 2934" goto 1459  
bringt auch keine Fehlerbehebung

Netter Versuch, denn Strings mit Leer-/Sonderzeichen musst du schon in Anführungszeichen setzen. Wenn %testlnsym3% zu einem String mit Leerzeichen expandiert wird, dann natürlich auch dort. Uuund du arbeitest mit Batch, und da gehören die Anführungszeichen zur verglichenen Zeichenfolge. Heißt, xyz und "xyz" sind nicht dasselbe.

Denk noch mal drüber nach, ob Batch wirklich noch eine Sprache ist, wo du Energie rein stecken willst um die ganzen Besonderheiten und Fallstricke zu lernen ...

Grüße
Steffen

EDIT: 2.934 ist auch nicht dasselbe wie 2934, wenn man die Fehlermeldung mal dem gegenüber stellt, was du im Code stehen hast.