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.01.2025 um 11:01 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
Lösung 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.
gerry56
gerry56 25.12.2024 um 13:28:04 Uhr
Goto Top
Hallo Steffen.
Daß 2.934 und 2934 nicht das selbe ist, ist mir natürlich klar.
Wie im Eingangspost angeführt, habe ich natürlich zum testen den Inhalt der Variablen am Bildschirm anzeigen lassen.
Da war der Variableninhalt 2.934.
Auch bei der Umleitung des Variableninhaltes in eine Textdatei habe ich beim Auslesen der Textdatei den Wert 2.934 als Textinhalt erhalten.
Den Wert 2934 - und nicht den angezeigten Wert 2.934 - zusätzlich abzufragen, war nur ein verzweifelter Versuch von mir, eine eventuell nicht berücksichtigte Abfragemöglichkeit zu berücksichtigen.
rubberman
Lösung rubberman 25.12.2024 aktualisiert um 18:23:07 Uhr
Goto Top
Wie gesagt, beide Vergleichsoperanden in Anführungszeichen setzen sollte das Problem lösen, da diese mit verglichen werden.
gerry56
gerry56 25.12.2024 um 22:45:24 Uhr
Goto Top
Hallo Rubberman!

Bitte um Entschuldigung, daß ich mich erst jetzt mit der Erfolgsmeldung melde.
Da ich vorher nur die Antworten durchgelesen habe, und keine Zeit hatte, die Lösungsansätze zu testen, dauerte meine Rückmeldung länger als gewollt.
Danke für den Denkanstoß.
Ja, diese Anführungszeichen.
Beides unter Anführungszeichen gesetzt, und es funktioniert.

Danke und schöne, streßfreie Feiertage
Gerry