Non è necessario scaricare programmi aggiuntivi per elencare giunzioni, collegamenti simbolici e collegamenti reali, ma se si dispone di requisiti specifici per il formato di output, potrebbero essere di aiuto.
Elenca tutte le giunzioni, i collegamenti simbolici e le directory dei collegamenti simbolici nella directory corrente e nelle sue sottodirectory:
dir /al /s
O se li vuoi elencati separatamente ...
Elenca tutte le giunzioni nella directory corrente e nelle sue sottodirectory:
dir /al /s | findstr "<JUNCTION>"
Elenca tutti i collegamenti simbolici nella directory corrente e nelle sue sottodirectory:
dir /al /s | findstr "<SYMLINK>"
Elenca tutte le directory dei link simbolici nella directory corrente e nelle sue sottodirectory:
dir /al /s | findstr "<SYMLINKD>"
Il lflag dell'attributo è la chiave qui; lè per Reparse Points(giunzioni, collegamenti simbolici e directory symlink)
Collegamenti reali
Sfortunatamente direlenca i collegamenti fisici come file normali, quindi non è possibile utilizzarlo per identificare i collegamenti fisici. Puoi usare fsutilinvece l'integrato . Deve essere eseguito da un prompt dei comandi con privilegi elevati.
Con fsutil, elenca tutti i collegamenti reali nella directory corrente e nelle sue sottodirectory:
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.
Questo one-liner non è l'ideale e gradirei qualsiasi miglioramento.
- L'utilizzo
forfilescon l'opzione delle sottodirectory recurse ( /s) ha martellato la mia CPU e ha richiesto del tempo per il completamento.
- I
fsutilfondamentalmente finisce per correre due volte; la prima volta per identificare gli hard link contando il numero di linee di output restituite da ciascuna chiamata e la seconda volta su hard link appena trovati per ottenere l'output corretto.
- Ci saranno righe duplicate. Per eliminarli dovresti reindirizzare l'output su un file e quindi eseguire il file tramite uno strumento come
uniq.
Ecco un file batch che utilizza solo forper identificare i collegamenti reali. Dato che forfilesnon è coinvolto, può essere leggermente più veloce, tuttavia soffre ancora delle avvertenze rimanenti del sopra uno strato.
@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.
)
)
Esistono alcune altre opzioni (non testate):
Utilizzare la (vecchia) utility Microsoft HL Scan
hlscan /dir %CD%
Utilizzare il comando di ricerca alternativo fornito con il toolkit di utilità SFUA di Microsoft:
find . -links +1
Utilizzare l' utilità di ricerca dei collegamenti di Sysinternals in un modo simile a quello fsutilsopra menzionato
Usa il programma ListLinks di Uwe Sieber - vedi il link per l'uso
Utilizzare NTFSLinksView di Nirsoft se si preferisce un'applicazione GUI