No necesariamente necesita descargar programas adicionales para enumerar uniones, enlaces simbólicos y enlaces duros, pero si tiene requisitos de formato de salida específicos, pueden ayudar.
Enumere todas las uniones, enlaces simbólicos y directorios de enlaces simbólicos en el directorio actual y sus subdirectorios:
dir /al /s
O si quieres que se enumeren por separado ...
Enumere todas las uniones en el directorio actual y sus subdirectorios:
dir /al /s | findstr "<JUNCTION>"
Lista todos los enlaces simbólicos en el directorio actual y sus subdirectorios:
dir /al /s | findstr "<SYMLINK>"
Enumere todos los directorios de enlaces simbólicos en el directorio actual y sus subdirectorios:
dir /al /s | findstr "<SYMLINKD>"
El l
indicador de atributo es clave aquí; l
es para Reparse Points
(uniones, enlaces simbólicos y directorios de enlaces simbólicos)
Enlaces duros
Desafortunadamente, dir
enumera los enlaces duros como archivos normales, por lo que no puede usarlos para identificar enlaces duros. Puedes usar el incorporado en su fsutil
lugar. Debe ejecutarse desde un símbolo del sistema elevado.
Con fsutil
, enumere todos los enlaces duros en el directorio actual y sus subdirectorios:
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.
Este one-liner no es ideal, y agradecería cualquier mejora.
- Usar
forfiles
con la opción de subdirectorios recurse ( /s
) martilló mi CPU y tardé un tiempo en completarse.
- El
fsutil
básicamente termina corriendo dos veces; la primera vez para identificar los enlaces duros contando el número de líneas de salida devueltas por cada llamada, y la segunda vez en los enlaces duros recién encontrados para obtener la salida correcta.
- Habrá líneas duplicadas. Para eliminarlos, querrá redirigir la salida a un archivo y luego ejecutar el archivo a través de una herramienta como
uniq
.
Aquí hay un archivo por lotes que se usa solo for
para identificar enlaces duros. Como forfiles
no está involucrado, puede ser un poco más rápido, sin embargo, todavía sufre las advertencias restantes de la línea anterior.
@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.
)
)
Hay algunas otras opciones (no probadas):
Use la utilidad (antigua) Microsoft HL Scan
hlscan /dir %CD%
Use el comando find alternativo que viene con el kit de herramientas de utilidad SFUA de Microsoft:
find . -links +1
Utilice la utilidad findlinks de Sysinternals de una manera similar a la fsutil
mencionada anteriormente
Use el programa ListLinks de Uwe Sieber - vea el enlace para el uso
El uso de Nirsoft NTFSLinksView Si prefiere una aplicación GUI