web-dev-qa-db-fra.com

Vérification de l'emplacement d'un lien symbolique dans Windows 7

Dans Windows 7, comment puis-je vérifier si un fichier est un lien symbolique ou non, si un dossier est une jonction ou non, et comment puis-je vérifier leur direction (dans le cas où ils sont un lien symbolique/une jonction). À la fois dans l'explorateur et dans la ligne de commande.

Il est très important de pouvoir le faire depuis la ligne de commande afin de savoir comment dupliquer les liens symboliques sur un autre ordinateur lorsque vous souhaitez créer une réplique exacte d'une arborescence de dossiers.

Si je clique avec le bouton droit sur un fichier et coche la case "Propriétés", je ne trouve aucune indication indiquant qu'il s'agit d'un lien symbolique.

24
BearCode

La commande dir dir /a peut faire ceci:

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]

Alternativement, vous pouvez utiliser l'Explorateur Windows:

Right click column, More, Link Target
21
Steven Penny

Copié à partir de StackOverFlow , je viens d'utiliser cette ligne et cela fonctionne

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

Explication :

De MSDN à propos de FSUtil: effectue des tâches liées aux systèmes de fichiers FAT (table d'allocation de fichiers) et NTFS, telles que la gestion des points d'analyse, la gestion des fichiers fragmentés ou le démontage d'un volume. S'il est utilisé sans paramètre, fsutil affiche une liste des sous-commandes prises en charge.

Pour notre utilisation, nous nous soucions simplement de produire une ligne contenant "Lien symbolique", si elle est symbolique et que nous avons alors find, et si find réussit, nous produisons une chose, sinon, nous produisons autre chose. .

Notes :

  • Les guillemets autour du nom du dossier sont obligatoires si le chemin contient des espaces.
  • Si le dossier n'existe pas ou s'il ne s'agit pas d'un lien symbolique, utilisez-le avec précaution.
4
Cat Boss

À l'aide de PowerShell, sur au moins le système d'exploitation Windows, vous pouvez rechercher des liens symboliques dans n'importe quel répertoire, par exemple:

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

Une alternative plus concise consisterait à utiliser l'alias de Get-ChildItemls:

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

Et vous pouvez obtenir des informations pertinentes sur un lien symbolique en effectuant l’une des opérations suivantes:

Récupère l'élément de fichier et affiche sa propriété Target . La cible étant la "valeur" du lien symbolique. En outre, les signatures de méthode ou de commande permettant de créer des liens symboliques lors de la juxtaposition de systèmes d’exploitation, les noms d’arguments de: 'cible', 'chemin' et/ou 'valeur' ​​peuvent avoir des significations différentes de celles d’une autre signature de méthode sur un système d’exploitation différent.

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

Récupère l'élément de fichier et affiche sa propriété LinkType . Un élément avec une valeur LinkType de SymbolicLink signifie que c'est bien symbolique.

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

Récupère l'élément de fichier et affiche sa propriété Mode . Un élément avec l dans la valeur Mode indique qu'il s'agit d'un lien symbolique.

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

Récupère l'élément de fichier et affiche sa propriété d'attributs . Un élément attribué avec une valeur ReparsePoint peut-être indiquant un lien symbolique.

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

Voici un script cygwin bash pour enregistrer les liens symboliques, ajouter vos dossiers favoris à la première ligne

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
mosh

tous les crédits à @ SecurityAndPrivacyGuru , [cmd]

script/fonction batch complet qui lit le lien symbolique {| s dans le dossier} et affiche la liste avec eux et leurs chemins cibles

@echo off
setlocal enableExtensions enableDelayedExpansion
cd /D "%~dp0"
set br=^


rem br;


set "pafIf=<<pafToSymlink|pafToFolder>>"
set "gIfZsymLink="
for /f "tokens=*" %%q in ('dir "!pafIf!" /al /b') do (
    for /f "tokens=2 delims=[]" %%r in ('dir /al ^| findstr /i /c:"%%q"') do (
        set "gIfZsymLink=!gIfZsymLink!%%~fq>%%r!br!"
    )
)
set "gIfZsymLink=!gIfZsymLink:~0,-1!"
rem echo "!gIfZsymLink!"

for /f "tokens=1,2 delims=>" %%q in ("!gIfZsymLink!") do (
    echo symlink: %%q , filepath: %%r
)


:scIn
rem endlocal
pause
rem exit /b
0
Ilias

À Powershell:

dir | select Name, LinkType
0
John