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 l
drapeau d'attribut est clé ici; l
est pour Reparse Points
(jonctions, liens symboliques et répertoires de liens symboliques)
Liens durs
Malheureusement, dir
ré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 fsutil
place. 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
forfiles
de l'option ( /s
) des sous-répertoires recurse a martelé mon processeur et a pris du temps.
- Le
fsutil
principe 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 for
pour identifier les liens durs. Comme il forfiles
n'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 fsutil
mentionné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