Vous n'avez pas nécessairement besoin de télécharger des programmes supplémentaires pour répertorier les jonctions, les liens symboliques et les liens matériels, mais si vous avez des exigences de format de sortie spécifiques, ils peuvent vous aider.
Répertoriez toutes les jonctions, les liens symboliques et les répertoires de liens symboliques dans le répertoire actuel et ses sous-répertoires:
dir /al /s
Ou si vous voulez qu'ils soient listés séparément ...
Liste toutes les jonctions dans le répertoire courant et ses sous-répertoires:
dir /al /s | findstr "<JUNCTION>"
Liste tous les liens symboliques dans le répertoire courant et ses sous-répertoires:
dir /al /s | findstr "<SYMLINK>"
Liste tous les répertoires de liens symboliques dans le répertoire courant et ses sous-répertoires:
dir /al /s | findstr "<SYMLINKD>"
Le ldrapeau d'attribut est clé ici; lest pour Reparse Points(jonctions, liens symboliques et répertoires de liens symboliques)
Liens durs
Malheureusement, dirrépertorie les liens durs en tant que fichiers normaux, vous ne pouvez donc pas les utiliser pour identifier les liens durs. Vous pouvez utiliser le intégré à la fsutilplace. Il doit être exécuté à partir d'une invite de commandes élevée.
Avec fsutil, listez tous les liens durs dans le répertoire courant et ses sous-répertoires:
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.
Ce one-liner n'est pas idéal et j'accueillerais toute amélioration.
- L'utilisation
forfilesde l'option ( /s) des sous-répertoires recurse a martelé mon processeur et a pris du temps.
- Le
fsutilprincipe finit par fonctionner deux fois; la première fois pour identifier les liaisons matérielles en comptant le nombre de lignes de sortie renvoyées par chaque appel, et la deuxième fois sur les liaisons matérielles qui viennent d'être trouvées pour obtenir la sortie correcte.
- Il y aura des lignes en double. Pour les éliminer, vous souhaitez rediriger la sortie vers un fichier, puis exécuter le fichier via un outil comme
uniq.
Voici un fichier batch qui utilise juste forpour identifier les liens durs. Comme il forfilesn'est pas impliqué, il peut être légèrement plus rapide, mais il souffre toujours des mises en garde restantes de la doublure ci-dessus.
@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.
)
)
Il existe quelques autres options (non testées):
Utilisez l’ancien utilitaire Microsoft HL Scan
hlscan /dir %CD%
Utilisez la commande alternative find fournie avec la boîte à outils de l'utilitaire SFUA de Microsoft:
find . -links +1
Utilisez l' utilitaire findlinks de Sysinternals d' une manière similaire à celle fsutilmentionnée ci-dessus
Utilisez le programme ListLinks d' Uwe Sieber - voir le lien pour l'utilisation
Utilisez NTFSLinksView de Nirsoft si vous préférez une application graphique