Не обов’язково завантажувати додаткові програми, щоб перелічити переходи, символьні посилання та жорсткі посилання, але якщо у вас є конкретні вимоги до вихідного формату, вони можуть допомогти.
Перерахуйте всі каталоги переходів, символьних посилань та символьних посилань у поточному каталозі та його підкаталогах:
dir /al /s
Або якщо ви хочете, щоб їх було вказано окремо ...
Перерахуйте всі з'єднання в поточному каталозі та його підкаталогах:
dir /al /s | findstr "<JUNCTION>"
Перерахуйте всі посилання в поточному каталозі та його підкаталогах:
dir /al /s | findstr "<SYMLINK>"
Перерахуйте всі каталоги символьних посилань у поточному каталозі та його підкаталогах:
dir /al /s | findstr "<SYMLINKD>"
Тут l
є ключовим прапором атрибута; l
призначений для Reparse Points
(каталоги переходів, символьних посилань та символьних посилань)
Жорсткі посилання
На жаль, dir
список жорстких посилань є звичайними файлами, тому ви не можете використовувати їх для ідентифікації жорстких посилань. Ви використовуєте вбудований fsutil
натомість. Його потрібно запустити з підвищеного командного рядка.
З fsutil
, перерахуйте всі жорсткі посилання в поточному каталозі та його підкаталогах:
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.
Цей одноколісний шар не є ідеальним, і я вітаю будь-які вдосконалення.
- Використання
forfiles
параметрів підкаталогій повторного запису ( /s
) забило мій процесор, і на його завершення пішло час.
- В
fsutil
основному закінчується бігом двічі; перший раз ідентифікувати жорсткі посилання шляхом підрахунку кількості вихідних рядків, що повертаються під час кожного виклику, і другий раз на щойно знайдених жорстких посиланнях, щоб отримати правильний вихід.
- Будуть дублікати рядків. Щоб їх усунути, ви хочете перенаправити вихід у файл, а потім запустити файл через такий інструмент, як
uniq
.
Ось пакетний файл, який використовується лише for
для виявлення жорстких посилань. Оскільки forfiles
це не задіяно, воно може бути трохи швидшим, однак воно все ще страждає від інших застережень вищевказаного одноводкового.
@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.
)
)
Є кілька інших (неперевірених) варіантів:
Використовуйте (стару) утиліту Microsoft HL Scan
hlscan /dir %CD%
Скористайтеся командою альтернативного пошуку, яка постачається з інструментальним інструментом Microsoft SFUA:
find . -links +1
Використовуйте утиліту пошуку посилань Sysinternals аналогічним чином, як fsutil
зазначено вище
Використовуйте програму ListLinks Uwe Sieber - див. Посилання для використання
Використовуйте NTFSLinksView Nirsoft, якщо ви віддаєте перевагу додатку GUI