gerry56
Goto Top

Abfrage mit Batchdatei, ob ein Link vorhanden ist

Ich will über eine Batchdatei abfragen, ob ein bestimmter Link vorhanden ist.
Der allgemein bekannte Befehl
if exist testdatei.lnk echo vorhanden
funktioniert nicht.
Dieser Befehl funktioniert zwar bei allen anderen Dateiarten und auch bei Verzeichnissen.
Bei Links wird angezeigt, daß der Link angeblich nicht vorhanden ist.

Wie lautet der Befehl bei Links, die ganz einfach in Windows erzeugt wurden, und daher die Endung lnk haben.

Gerry

Content-ID: 668734

Url: https://administrator.de/contentid/668734

Ausgedruckt am: 21.11.2024 um 17:11 Uhr

MirkoKR
MirkoKR 13.10.2024 aktualisiert um 00:21:44 Uhr
Goto Top
Im Zweifel: Schon auf Englisch gesucht?

https://www.google.com/search?q=test+if+.lnk+source+exists
gerry56
gerry56 13.10.2024 aktualisiert um 01:44:30 Uhr
Goto Top
Ich will für eine einfache Abfrage kein Englisch lernen.
Zweitens will ich die Abfrage mittels Batchdatei erledigen und nicht mit Zusatzprogrammen.
150704
Lösung 150704 13.10.2024, aktualisiert am 15.10.2024 um 08:06:13 Uhr
Goto Top
Zitat von @gerry56:
Ich will für eine einfache Abfrage kein Englisch lernen.
screenshot

Ich will über eine Batchdatei abfragen, ob ein bestimmter Link vorhanden ist.
Der allgemein bekannte Befehl
if exist "c:\Pfad\testdatei.lnk" echo vorhanden  
funktioniert nicht.
Blödsinn natürlich funktioniert das auch mit *.lnk, das sind am Ende auch nur einfache Dateien ! Meine Vermutung, du bist nur im falschen Arbeitsverzeichnis und hast keine absoluten Pfade genutzt. Also entweder absolute Pfade verwenden oder sicherstellen das du dich im richtigen Verzeichnis befindest wenn du relative Pfade nutzt!

screenshot

Oder willst du prüfen ob das Ziel des Links existiert??

Wenn du das Ziel des Links meinst das kannst du stattdessen so prüfen:
@echo off
set "link=D:\testdatei.lnk"  
for /f "delims=" %%a in ('powershell -EP Bypass -C "Test-Path -LiteralPath (New-Object -Com Wscript.Shell).CreateShortcut('%link%').TargetPath"') do set "result=%%a"  
if /i "%result%" == "True" (  
    echo Ziel des Links existiert.
) else (
    echo Ziel des Links wurde nicht gefunden.
)

Gruß in die müffelnde Batch-Gruft ...
Penny.Cilin
Lösung Penny.Cilin 13.10.2024 um 09:47:58 Uhr
Goto Top
Ich will für eine einfache Abfrage kein Englisch lernen
Tja, dann wirst Du zukünftig evtl. auf Probleme stoßen. Denn mit englischen Begriffen findet man mehr Informationen als in Deutsch.

Außerdem hat Deine Verknüpfung evtl. Leerzeichen?
Dann solltest Du diese in Hochkommata setzen.

if exist "testdatei.lnk" echo vorhanden  

Gruss Penny.
gerry56
gerry56 14.10.2024 um 15:48:45 Uhr
Goto Top
Daß Dateinamen / Verzeichnisnamen bei vorhandenen Leerzeichen in Anführungszeichen zu setzen sind, ist mir klar.
Jedoch ist damit mein Problem, daß ein Link als NICHT VORHANDEN angezeigt wird, obwohl dieser Link vorhanden ist, noch immer nicht gelöst.

Eventuell sucht ihr den Fehler an der falschen Stelle, da ich keinen Hardlink und auch keinen Softlink meine.
Ich will überprüfen, ob eine Windowsverknüpfung, gekennzeichnet mit der Endung LNK vorhanden ist, oder nicht.
150704
Lösung 150704 14.10.2024 aktualisiert um 17:26:14 Uhr
Goto Top
Ich will überprüfen, ob eine Windowsverknüpfung, gekennzeichnet mit der Endung LNK vorhanden ist, oder nicht.
Steht oben und geht einwandfrei! Fehler liegt bei deiner Anwendung. Wenn dazu nichts weiter an Umgebungsbedingungen postest kann dir keiner helfen.
Eventuell sucht ihr den Fehler an der falschen Stelle, da ich keinen Hardlink und auch keinen Softlink meine.
Und nein, das obige Skriptbeispiel behandelt nur das Ziel des Links, keine Soft- oder Hardlinks! Ein Überprüfen einer LNK Datei selbst auf vorhanden sein klappt mit if exist einwandfrei siehst du ja oben im Screenshot!
Es gibt für *.lnk keine Sonderbehandlung, das sind schlicht ganz normale Dateien im Dateisystem die mit if exist problemlos gefunden werden wenn man es richtig einsetzt!
gerry56
gerry56 15.10.2024 um 00:02:27 Uhr
Goto Top
Entschuldigung!!!
Das war mein Fehler!
Der zu suchende Dateilink hat eine Leerstelle.
jedoch habe ich mich beim Befehl
set "linkverzeichnis=D:\daten\test muster-datei.lnk"
durch die befehlsbedingten Anführungszeichen irritieren lassen.
Ich habe den Befehl auf
set linkverzeichnis="D:\daten\test muster-datei.lnk"
geändert.

Jetzt funktioniert alles.

Danke an alle geduldigen Helfer
Gerry
150704
150704 15.10.2024 aktualisiert um 08:03:50 Uhr
Goto Top
Was zu erwarten war.
durch die befehlsbedingten Anführungszeichen irritieren lassen.
Best Practice ist es aber es so zu schreiben und um die Pfadvariablen immer Anführungszeichen setzen.
set "linkverzeichnis=D:\daten\test muster-datei.lnk"  
if exist "%linkverzeichnis%" ........  
Wenn man Pfade nämlich nachträglich ergänzen oder bearbeiten will sind eingebaute Anführungszeichen in einer Variablen immer kontraproduktiv und führen zu Fehlern. Indem du es so wie oben schreibst vermeidest du solche Probleme.