23

В Windows 7, как я могу проверить, является ли файл символической ссылкой или нет, является ли папка соединением или нет, и как я могу проверить, куда они указывают (в случае, если это символическая ссылка / соединение). И в проводнике, и в командной строке.

Очень важно иметь способ сделать это из командной строки, чтобы знать, как дублировать символические ссылки на другом компьютере, когда вы хотите создать точную копию дерева папок.

Если щелкнуть правой кнопкой мыши файл и выбрать "Свойства", я не смогу найти никаких признаков того, что это символическая ссылка.

5 ответов5

18

Команда dir dir /a может сделать это:

2012-12-26  09:30 PM    <DIR>          .
2012-12-26  09:30 PM    <DIR>          ..
2012-12-26  09:30 PM                 0 a.txt
2012-12-26  09:30 PM    <SYMLINK>      link.txt [a.txt]

Кроме того, вы можете использовать Windows Explorer:

Right click column, More, Link Target
4

Скопировано из StackOverFlow, я просто использовал эту строку, и она работает

fsutil reparsepoint query "folder name" | find "Symbolic Link" >nul && echo symbolic link found || echo No symbolic link

Пояснение:

Из MSDN о FSUtil: выполняет задачи, связанные с таблицей размещения файлов (FAT) и файловыми системами NTFS, такие как управление точками повторной обработки, управление разреженными файлами или отключение тома. Если он используется без параметров, fsutil отображает список поддерживаемых подкоманд.

Для нашего использования мы просто заботимся о том, чтобы он выводил строку, содержащую "символическую ссылку", если она символическая, которую мы затем find , и если find удается, мы выводим одну вещь, если нет, мы выводим что-то другое ,

Примечания:

  • Кавычки вокруг имени папки обязательны, если в пути есть пробелы.
  • Это дает тот же вывод, если папка не существует, или не является символической ссылкой, используйте с осторожностью.
1

Используя PowerShell, по крайней мере в ОС Windows вы можете найти символические ссылки в любом каталоге, например:

Get-ChildItem 'C:\nodejs\bin\' | Where-Object {$_.LinkType -eq 'SymbolicLink'}

Более краткая альтернатива - использовать псевдоним Get-ChildItem:ls:

ls 'C:\nodejs' -Attributes ReparsePoint -Recurse

И вы можете получить соответствующую информацию по символической ссылке, выполнив одно из следующих действий:

Получить элемент файла и вывести его свойство Target. Цель - "значение" символической ссылки. Кроме того, сигнатуры методов или команд для создания символических ссылок при сопоставлении между операционными системами, имена аргументов: 'target', 'path' и / или 'value' могут иметь значения, отличные от сигнатуры другого метода в другой ОС.

E:\AIT> Get-Item -Path 'C:\nodejs\bin\ionic.cmd' | Select-Object -ExpandProperty Target
E:\AIT\out\dependency_symlink.cmd

Получить элемент файла и вывести его свойство LinkType. Элемент со значением LinkType SymbolicLink означает, что он, ну, в общем, символический.

E:\AIT> Get-Item -Path 'C:\nodejs\bin\ionic.cmd' | Select-Object -ExpandProperty LinkType
SymbolicLink

Получить элемент файла и вывести его свойство Mode. Элемент с l в значении Mode указывает, что это символическая ссылка.

E:\AIT> Get-Item -Path 'C:\nodejs\bin\ionic.cmd' | Select-Object -ExpandProperty Mode
-a---l

Получить элемент файла и вывести его свойство Attributes. Элемент, которому присвоено значение ReparsePoint, может указывать на символическую ссылку.

E:\AIT> Get-Item -Path 'C:\nodejs\bin\ionic.cmd' | Select-Object -ExpandProperty Attributes
Archive, ReparsePoint
0

Вот сценарий cygwin bash для сохранения символических ссылок, добавления ваших любимых папок в первую строку

find c:/ C:/Users/$USERNAME/SendTo C:/Users/$USERNAME/Desktop \
      -maxdepth 2 -type l \
      -printf 'mklink\t/D\t"%p"\t"%l"\n' | \
  perl -pne '\
      s!/cygdrive/(\w)/!\1:/!g;\
      s,/a/,/%USERNAME%/,g;\
      1;' | \
  sort -f | uniq  > restore-links.cmd
0

В Powershell:

dir | select Name, LinkType

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .