Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Orginalpfad eines verlinkten Verzeichnisses oder einer verlinkten Datei herausfinden

Frage Entwicklung Batch & Shell

Mitglied: Scar61

Scar61 (Level 1) - Jetzt verbinden

07.11.2014, aktualisiert 14.11.2014, 1031 Aufrufe, 8 Kommentare

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
Mitglied: rubberman
07.11.2014, aktualisiert um 18:05 Uhr
Hallo Scar61,

mit Batch pur geht das sicher nicht.

Aber wie soll ich mir das vorstellen? Das Script soll den gesamten Pfad ablaufen und nach *.LNK Dateien suchen? Was wenn mehrere Verknüpfungen gefunden werden? Wie sieht das denn in der Realität aus?

Grüße
rubberman
Bitte warten ..
Mitglied: colinardo
07.11.2014, aktualisiert 13.11.2014
Hallo scar61,
meinst du symbolische Verzeichnis-Verknüpfungen (Junctions) ?
Dieses Sysinternals-Tool zeigt sie dir an:
"Junction" von Mark Russinovich

Grüße Uwe
Bitte warten ..
Mitglied: Scar61
13.11.2014 um 17:04 Uhr
Hallo Uwe,

war gerade ein paar Tage offline...

Ja, ich meine die seit Windows 7 offiziell verfügbaren symbolischen Links, wie man sie von UNIX Betriebssystemen kennt (kann man mittlerweile auch mit dem eingebauten Kommando mklink herstellen).
Letztendlich fehlt mir im Skript die Möglichkeit sprachunabhängig zu erkennen, ob ein in meinem Pfad enthaltener Teilpfad ein Verzeichnis, eine Datei oder ein Link ist. Wenn ich wüsste, wie ich das sicher erkennen könnte, bekäme ich den Rest per Batch schon hin.
So etwas wie 'GetRealPath()' wird es ja nicht 'out of the box' geben.

Grüße Scar61
Bitte warten ..
Mitglied: colinardo
LÖSUNG 13.11.2014, aktualisiert 14.11.2014
In batch kannst du dir symbolische Links so für ein Verzeichnis inkl. Unterordner anzeigen lassen
01.
dir C:\test /AL /S
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
01.
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.
01.
Const REPARSE_POINT = &h400 
02.
Set fso = CreateObject("Scripting.FileSystemObject") 
03.
parsefolders fso.GetFolder(wscript.arguments(0)) 
04.
sub parsefolders(fldr) 
05.
	for each f in fldr.files 
06.
		If (f.Attributes And REPARSE_POINT) = REPARSE_POINT Then 
07.
  			wscript.echo "[SYMLINK-FILE] " & f.path 
08.
		End If 
09.
	next 
10.
	for each folder in fldr.subfolders 
11.
		If (folder.Attributes And REPARSE_POINT) = REPARSE_POINT Then 
12.
  			wscript.echo "[SYMLINK-FOLDER] " & folder.path 
13.
		else 
14.
			parsefolders folder 
15.
		End If 
16.
	next 
17.
end sub 
18.
set fso = nothing
Das Script kannst du dann so auf ein Verzeichnis loslassen welches dann rekursiv durchlaufen wird und symbolische Links und Ordner ausgegeben werden:
01.
cscript //NOLOGO searchlinks.vbs "C:\deinordner"
Grüße Uwe
Bitte warten ..
Mitglied: rubberman
LÖSUNG 13.11.2014, aktualisiert 14.11.2014
Hallo Uwe.

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?

Ich habe mich gerade mal daran versucht. Buggy, aber sollte in den meisten Fällen funktionieren.
01.
@echo off &setlocal DisableDelayedExpansion 
02.
 
03.
set "filepath=C:\a\b\c\d\f.txt" 
04.
 
05.
 
06.
set "n=0" 
07.
for %%i in ("%filepath:\=" "%") do ( 
08.
  setlocal EnableDelayedExpansion 
09.
  for /f %%j in ("!n!") do ( 
10.
    endlocal 
11.
    set "f_%%j=%%~i" 
12.
13.
  set /a "n+=1" 
14.
15.
 
16.
set "newpath=%f_0%" 
17.
for /l %%h in (1 1 %n%) do ( 
18.
  set "repl=" 
19.
  setlocal EnableDelayedExpansion 
20.
  for /f "tokens=3*" %%i in ('2^>nul dir /al "!newpath!\" ^|findstr /rc:"\<<SYMLINKD>\>"') do ( 
21.
    if "!!"=="" endlocal 
22.
    set "name=%%j" 
23.
    setlocal EnableDelayedExpansion 
24.
    for %%k in ("!name:[=" "!") do ( 
25.
      endlocal 
26.
      set "target=%%~k" 
27.
      setlocal EnableDelayedExpansion 
28.
29.
 
30.
    for /f "delims=" %%k in (" [!target!") do ( 
31.
      if "!name:%%k=!"=="!f_%%h!" ( 
32.
        for /f "delims=" %%l in ("!target:~,-1!") do ( 
33.
          endlocal 
34.
          set "newpath=%%l" 
35.
          set "repl=1" 
36.
37.
      ) else endlocal 
38.
39.
 
40.
41.
 
42.
  if not defined repl ( 
43.
    setlocal EnableDelayedExpansion 
44.
    for /f "delims=" %%k in ("!newpath!") do ( 
45.
      for /f "delims=" %%l in ("!f_%%h!") do ( 
46.
        endlocal 
47.
        set "newpath=%%k\%%l" 
48.
49.
50.
51.
 
52.
53.
 
54.
 
55.
 
56.
echo "%newpath%" 
57.
pause
Grüße
rubberman
Bitte warten ..
Mitglied: Scar61
14.11.2014 um 15:50 Uhr
Super,

vielen Dank, das hilft. Weißt du noch ab welchem Windows es diesen 'l' Typ im dir Kommando gibt?

Danke
Scar61
Bitte warten ..
Mitglied: colinardo
14.11.2014, aktualisiert um 15:54 Uhr
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.
Bitte warten ..
Mitglied: Scar61
14.11.2014 um 16:00 Uhr
Danke für deine Idee.
Den Ablauf hatte ich ähnlich, mir hat nur die Erkennung der Links gefehlt, was ja jetzt mit dem 'dir /b /al %f%' sogar sprachunabhängig und generisch geht.

Ist schön, wenn man feststellt, dass man hier immer wieder Leute finden die einen verstehen und so konstruktiv weiterhelfen.

Grüße
Scar61
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
gelöst Verzeichniss überwachen Datei kopieren und umbenennen (6)

Frage von fischle63 zum Thema Batch & Shell ...

Batch & Shell
gelöst Aktueller Besitzer der aktuellen Datei herausfinden und in Variable schreiben (11)

Frage von Peter32 zum Thema Batch & Shell ...

Visual Studio
Herausfinden, ob PDF farbig oder sw ist (3)

Frage von ahstax zum Thema Visual Studio ...

Neue Wissensbeiträge
Sicherheit

Millionen Euro in den Sand gesetzt?

(2)

Information von transocean zum Thema Sicherheit ...

Sicherheit

How I hacked hundreds of companies through their helpdesk

Information von SeaStorm zum Thema Sicherheit ...

Erkennung und -Abwehr

Ccleaner-Angriff war nur auf große Unternehmen gemünzt

(10)

Information von Lochkartenstanzer zum Thema Erkennung und -Abwehr ...

Heiß diskutierte Inhalte
Humor (lol)
gelöst Freidach Beitrag (40)

Frage von Penny.Cilin zum Thema Humor (lol) ...

Firewall
gelöst Firewall Firmeneimsatz (22)

Frage von wiesi200 zum Thema Firewall ...

Multimedia & Zubehör
gelöst 8 GB USB Stick besitzt nur noch 4 MB Kapazität (13)

Frage von Gwahlers zum Thema Multimedia & Zubehör ...