Sie müssen nicht unbedingt zusätzliche Programme herunterladen, um Junctions, Symlinks und Hardlinks aufzulisten. Wenn Sie jedoch bestimmte Anforderungen an das Ausgabeformat haben, können diese hilfreich sein.
Listen Sie alle Junctions, Symlinks und Symlink-Verzeichnisse im aktuellen Verzeichnis und seinen Unterverzeichnissen auf:
dir /al /s
Oder wenn Sie möchten, dass sie separat aufgeführt werden ...
Listen Sie alle Junctions im aktuellen Verzeichnis und seinen Unterverzeichnissen auf:
dir /al /s | findstr "<JUNCTION>"
Listen Sie alle Symlinks im aktuellen Verzeichnis und seinen Unterverzeichnissen auf:
dir /al /s | findstr "<SYMLINK>"
Listen Sie alle Symlink-Verzeichnisse im aktuellen Verzeichnis und seinen Unterverzeichnissen auf:
dir /al /s | findstr "<SYMLINKD>"
Das l
Attribut-Flag ist hier der Schlüssel. l
ist für Reparse Points
(Junctions, Symlinks und Symlink-Verzeichnisse)
Harte Verbindungen
dir
Listet Hardlinks leider als normale Dateien auf, sodass Sie sie nicht zur Identifizierung von Hardlinks verwenden können. Sie können fsutil
stattdessen den eingebauten verwenden. Es muss an einer Eingabeaufforderung mit erhöhten Rechten ausgeführt werden.
Mit fsutil
allen Hard - Links im aktuellen Verzeichnis und dessen Unterverzeichnissen, die Liste:
for /F "usebackq tokens=2* delims=:" %G in (`forfiles /s /c "cmd /c fsutil hardlink list @path | findstr /n .* | findstr /b /v 1"`) do @fsutil hardlink list "%G" & echo.
Dieser Einzeiler ist nicht ideal und ich würde Verbesserungen begrüßen.
- Die Verwendung von
forfiles
( /s
) mit der Option "recurse subdirectories" schlug auf meine CPU ein und es dauerte eine Weile, bis der Vorgang abgeschlossen war.
- Das
fsutil
endet im Grunde zweimal ausgeführt; Das erste Mal, um die Hardlinks durch Zählen der Anzahl der von jedem Aufruf zurückgegebenen Ausgabezeilen zu identifizieren, und das zweite Mal, um bei gerade gefundenen Hardlinks die Ausgabe richtig zu machen.
- Es wird doppelte Zeilen geben. Um sie zu beseitigen, sollten Sie die Ausgabe in eine Datei umleiten und die Datei dann mit einem Tool wie dem folgenden ausführen
uniq
.
Hier ist eine Batch-Datei, die nur for
zum Identifizieren von Hardlinks verwendet wird. Da forfiles
es nicht involviert ist, kann es etwas schneller sein, es leidet jedoch immer noch an den verbleibenden Vorbehalten des obigen Einzeilers.
@echo off
AT > NUL
if %ERRORLEVEL% NEQ 0 echo You need to run this script from an elevated command prompt. Exiting. && exit /B 1
for /R "%CD%" %%a IN (*.*) do (
for /F "usebackq tokens=2* delims=:" %%b in (`fsutil hardlink list "%%a" ^| findstr /n .* ^| findstr /b /v 1`) do (
fsutil hardlink list "%%b"
REM The following echo command breaks up each group of hard links with a blank line
echo.
)
)
Es gibt einige andere (nicht getestete) Optionen:
Verwenden Sie das (alte) Microsoft HL Scan- Dienstprogramm
hlscan /dir %CD%
Verwenden Sie den alternativen Befehl find , der mit dem SFUA-Dienstprogramm-Toolkit von Microsoft geliefert wird:
find . -links +1
Verwenden Sie das Dienstprogramm findlinks von Sysinternals auf ähnliche Weise wie fsutil
oben beschrieben
Verwenden Sie das ListLinks- Programm von Uwe Sieber - siehe Link für die Verwendung
Verwenden Sie NTFSLinksView von Nirsoft, wenn Sie eine GUI-Anwendung bevorzugen