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

Printed on: November 2, 2024 at 12:11 o'clock

gerry56
gerry56 Jun 19, 2015 at 14:09:08 (UTC)
Goto Top
Hat denn niemand eine Ahnung wie das geht?

Gerry
Endoro
Solution Endoro Jun 19, 2015 updated at 15:56:11 (UTC)
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 Jun 19, 2015 at 15:58:35 (UTC)
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 Jun 19, 2015, updated at Jun 22, 2015 at 10:46:34 (UTC)
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 Jun 22, 2015 at 10:42:47 (UTC)
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 Jun 22, 2015 updated at 10:46:55 (UTC)
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