gerry56
Goto Top

Wie kann ich die Art eines Verzeichnisses (DIR oder Verknüpfung, junction) abfragen

Hallo!
Ich möchte mittels einer Batch-Datei auslesen, ob das Verzeichnis (Directory) eine Verknüpfung (Junction) oder ein echtes Directory ist.

So weit habe ich es geschafft

set datei="D:\1c\Testeneu"
for /f "tokens=3 delims= " %%a in ('dir %datei% /a:d ^|find "Testordner"') do set dirart=%%a


Danach möchte ich, wenn es sich um ein echtes Directory (DIR) handelt, das Verzeichnis löschen.
Handelt es sich um eine Verknüpfung, so möchte ich überprüfen, wohin die Verknüpfung verweist.

Die Verknüpfung erstelle ich als junction mit dem Befehl mklink /j

Bei der Abfrage mit if bekomme ich immer wieder die Fehlermeldung "<" ist syntaktisch an dieser Stelle nicht verarbeitbar,

Das ist eventuell wichtig:
Diese Batchdatei soll in der DosBox von Win-XP, Win-7, Win-8 laufen.

Bitte um Hilfe
Gerry

Content-ID: 275051

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

Ausgedruckt am: 18.11.2024 um 09:11 Uhr

gerry56
gerry56 19.06.2015 um 16:09:08 Uhr
Goto Top
Hat denn niemand eine Ahnung wie das geht?

Gerry
Endoro
Lösung Endoro 19.06.2015 aktualisiert um 17:56:11 Uhr
Goto Top
Hey,
doch ich weiß wie. Ist mir aber mit pure batch zu aufwendig vorm WE ;)
Fang den Output von dir /ad mit einer for /f-Schleife und extrahiere die gewünschten Infos.
Setz die Delimiter auf <>, dann sind die schon mal weg.
Vorsicht, es gibt reichlich Stolpersteine.
Viel Glück und Gruß, Endoro

PS: vielleicht gibts mit VB oder Powershell einen vernünftigen Weg.
gerry56
gerry56 19.06.2015 um 17:58:35 Uhr
Goto Top
Danke an Endoro

Die Lösung lautet

set datei="D:\1c\Testeneu"
for /f "tokens=2 delims=<>" %%a in ('dir %datei% /a:d ^|find "Testordner"') do set dirart=%%a

if %dirart% == DIR GOTO istdir
if %dirart% == VERBINDUNG GOTO istverb
goto nachdir

Gerry
114757
114757 19.06.2015, aktualisiert am 22.06.2015 um 12:46:34 Uhr
Goto Top
Und mit Powershell sieht's so aus:
if ((get-item 'C:\temp\testordner').Attributes -band [System.IO.FileAttributes]::ReparsePoint){  
  write-host "Ordner ist ein Softlink"  
}else{
  write-host "Ordner ist kein Softlink"  
}
Gruß jodel32
AnkhMorpork
AnkhMorpork 22.06.2015 um 12:42:47 Uhr
Goto Top
Zitat von @114757:

Und mit Powershell sieht's so aus:
> if ((get-item 'C:\temp\testordner').Attributes -band [System.IO.FileAttributes]::ReparsePoint){  
>   write-host "Ordner ist ein Softlink"  
> }else{
>   write-host "Ordner ist ein Softlink"  
> }
> 
Gruß jodel32

Im else-Zweig wohl eher nicht? face-wink

Gruß Ankh
114757
114757 22.06.2015 aktualisiert um 12:46:55 Uhr
Goto Top
Zitat von @AnkhMorpork:
Im else-Zweig wohl eher nicht? face-wink
OMG face-smile da hat das k seinen Bestimmungsort nicht gefunden ...

Danke.

Gruß jodel