Orginalpfad eines verlinkten Verzeichnisses oder einer verlinkten Datei herausfinden
Hallo zusammen,
gibt es in einem Batch eine Möglichkeit herauszufinden, ob ein eingegebenes Verzeichnis irgendwo einen Link enthält?
Hintergrund: Ich möchte für verlinkte Pfade oder Dateien den Orginalpfad herausfinden.
Zur Veranschaulichung folgendes Beispiel:
'C:\a\b\c\d\f.txt' enthält in 'c' einen Verzeichnislink, der auf 'D:\a\b\c' verweist.
Wenn ich jetzt 'C:\a\b\c\d\f.txt' in den Batch hineingebe, möchte ich 'D:\a\b\c\d\f.txt' herausbekommen.
Weiß jemand, ob so etwas möglich ist?
Vielen Dank für eure Mühe
Scar61
gibt es in einem Batch eine Möglichkeit herauszufinden, ob ein eingegebenes Verzeichnis irgendwo einen Link enthält?
Hintergrund: Ich möchte für verlinkte Pfade oder Dateien den Orginalpfad herausfinden.
Zur Veranschaulichung folgendes Beispiel:
'C:\a\b\c\d\f.txt' enthält in 'c' einen Verzeichnislink, der auf 'D:\a\b\c' verweist.
Wenn ich jetzt 'C:\a\b\c\d\f.txt' in den Batch hineingebe, möchte ich 'D:\a\b\c\d\f.txt' herausbekommen.
Weiß jemand, ob so etwas möglich ist?
Vielen Dank für eure Mühe
Scar61
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 254177
Url: https://administrator.de/contentid/254177
Ausgedruckt am: 23.11.2024 um 01:11 Uhr
8 Kommentare
Neuester Kommentar
Hallo scar61,
meinst du symbolische Verzeichnis-Verknüpfungen (Junctions) ?
Dieses Sysinternals-Tool zeigt sie dir an:
"Junction" von Mark Russinovich
Grüße Uwe
meinst du symbolische Verzeichnis-Verknüpfungen (Junctions) ?
Dieses Sysinternals-Tool zeigt sie dir an:
"Junction" von Mark Russinovich
Grüße Uwe
In batch kannst du dir symbolische Links so für ein Verzeichnis inkl. Unterordner anzeigen lassen
in der Ausgabe steht dann der Realpfad hinter dem Dateinamen in eckigen Klammern. den kannst du dir dann ja mit einer FOR-Schleife extrahieren.
Das ganze kannst du natürlich auch umdrehen in nur Elemente anzeigen lassen die keine symbolischen Verknüpfungen sind
Mit VBS kann man sich so anzeigen lassen ob ein Ordner oder eine Datei ein symbolischer Link ist.
Das Script kannst du dann so auf ein Verzeichnis loslassen welches dann rekursiv durchlaufen wird und symbolische Links und Ordner ausgegeben werden:
Grüße Uwe
dir C:\test /AL /S
Das ganze kannst du natürlich auch umdrehen in nur Elemente anzeigen lassen die keine symbolischen Verknüpfungen sind
dir C:\test /B /A-L /S
Mit VBS kann man sich so anzeigen lassen ob ein Ordner oder eine Datei ein symbolischer Link ist.
Const REPARSE_POINT = &h400
Set fso = CreateObject("Scripting.FileSystemObject")
parsefolders fso.GetFolder(wscript.arguments(0))
sub parsefolders(fldr)
for each f in fldr.files
If (f.Attributes And REPARSE_POINT) = REPARSE_POINT Then
wscript.echo "[SYMLINK-FILE] " & f.path
End If
next
for each folder in fldr.subfolders
If (folder.Attributes And REPARSE_POINT) = REPARSE_POINT Then
wscript.echo "[SYMLINK-FOLDER] " & folder.path
else
parsefolders folder
End If
next
end sub
set fso = nothing
cscript //NOLOGO searchlinks.vbs "C:\deinordner"
Hallo Uwe.
Ich habe mich gerade mal daran versucht. Buggy, aber sollte in den meisten Fällen funktionieren.
Grüße
rubberman
in der Ausgabe steht dann der Realpfad hinter dem Dateinamen in eckigen Klammern. den kannst du dir dann ja mit einer FOR-Schleife extrahieren.
Ach du meine Güte. Hast du das mal mit ...'C:\a\b\c\d\f.txt' enthält in 'c' einen Verzeichnislink, der auf 'D:\a\b\c' verweist.
Wenn ich jetzt 'C:\a\b\c\d\f.txt' in den Batch hineingebe, möchte ich 'D:\a\b\c\d\f.txt' herausbekommen.
... in Zusammenhang gebracht?Wenn ich jetzt 'C:\a\b\c\d\f.txt' in den Batch hineingebe, möchte ich 'D:\a\b\c\d\f.txt' herausbekommen.
Ich habe mich gerade mal daran versucht. Buggy, aber sollte in den meisten Fällen funktionieren.
@echo off &setlocal DisableDelayedExpansion
set "filepath=C:\a\b\c\d\f.txt"
set "n=0"
for %%i in ("%filepath:\=" "%") do (
setlocal EnableDelayedExpansion
for /f %%j in ("!n!") do (
endlocal
set "f_%%j=%%~i"
)
set /a "n+=1"
)
set "newpath=%f_0%"
for /l %%h in (1 1 %n%) do (
set "repl="
setlocal EnableDelayedExpansion
for /f "tokens=3*" %%i in ('2^>nul dir /al "!newpath!\" ^|findstr /rc:"\<<SYMLINKD>\>"') do (
if "!!"=="" endlocal
set "name=%%j"
setlocal EnableDelayedExpansion
for %%k in ("!name:[=" "!") do (
endlocal
set "target=%%~k"
setlocal EnableDelayedExpansion
)
for /f "delims=" %%k in (" [!target!") do (
if "!name:%%k=!"=="!f_%%h!" (
for /f "delims=" %%l in ("!target:~,-1!") do (
endlocal
set "newpath=%%l"
set "repl=1"
)
) else endlocal
)
)
if not defined repl (
setlocal EnableDelayedExpansion
for /f "delims=" %%k in ("!newpath!") do (
for /f "delims=" %%l in ("!f_%%h!") do (
endlocal
set "newpath=%%k\%%l"
)
)
)
)
echo "%newpath%"
pause
Grüße
rubberman
Zitat von @Scar61:
vielen Dank, das hilft. Weißt du noch ab welchem Windows es diesen 'l' Typ im dir Kommando gibt?
Ich meine erst ab Vista, unter XP gab's den noch nicht.vielen Dank, das hilft. Weißt du noch ab welchem Windows es diesen 'l' Typ im dir Kommando gibt?