Windows 7에서 기호 링크가 가리키는 위치 확인


24

Windows 7에서 파일이 심볼릭 링크인지 여부를 확인하고 폴더가 정션인지 여부를 확인하는 방법과 파일이 가리키는 위치를 확인하는 방법 (symlink / junction 인 경우) 탐색기와 명령 줄 모두에서.

폴더 트리의 정확한 복제본을 만들려고 할 때 다른 컴퓨터에서 심볼릭 링크를 복제하는 방법을 알기 위해서는 명령 줄에서 수행 할 수있는 방법이 매우 중요합니다.

파일을 마우스 오른쪽 버튼으로 클릭하고 "속성"을 확인하면 파일이 심볼릭 링크라는 표시를 찾을 수 없습니다.

답변:


26

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 탐색기를 사용할 수 있습니다.

Right click column, More, Link Target

Windows 7 (Microsoft Windows [버전 6.1.7601])에서는 작동하지 않습니다.
gonzalezea

1
@gonzalezea 예, 그렇습니다. 나는이를 게시 할 때 2012 년 윈도우 7 다시 함께 일, 그리고 지금 너무 일
스티븐 페니

아마도 새로운 사용자에게는 그다지 명백하지 않을 수도 있지만 이것은 명령 행 솔루션입니다. 사용자는 명령 프롬프트를 연 다음 CD 명령을 사용하여 디렉토리를 기호 링크가 포함 된 디렉토리로 변경 한 다음 DIR 명령을 입력하고 'enter'키를 눌러야합니다. 잘못된 디렉토리에서 DIR 명령을 실행하는 것은 일반적인 실수입니다. 그러나 symlink가 어느 디렉토리에 있는지 확실하지 않으면 이해할 수 있습니다 (Windows GUI가 특정 디렉토리에 symlink 또는 junction이 있는지 여부를 명시 적으로 알려주지 않기 때문에 항상 명확하지는 않습니다). SHORTCUT 대신 FILE FOLDER 유형의 바로 가기를 찾으십시오 .
Ed999

2
링크 대상 필드는 Windows 7에서 비어 있습니다
Ronen Festinger

1
명령 행에서 입력 한 dir /a다음 Enter를 누르십시오. / a를 포함하지 않으면 창에 접합점이 표시되지 않습니다. 디렉토리 dirdir /a디렉토리 의 차이점을 시도해보십시오\Users\YourUsername
Paulus

4

StackOverFlow 에서 복사하여 방금이 줄을 사용했으며 작동합니다.

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

설명 :

에서 MSDN 파일 할당 테이블 (FAT) 및, 재분석 지점을 관리하는 스파 스 파일을 관리하거나 볼륨을 마운트 해제와 같은 NTFS 파일 시스템에 관련된 수행합니다 작업 : FSUtil에 대해. 매개 변수없이 사용하면 fsutil은 지원되는 하위 명령 목록을 표시합니다.

우리는 사용하기 위해 "심볼릭 링크"가있는 라인을 출력하고, 그것이 심볼릭이라면 find, find성공하면, 한 가지를 출력하고, 그렇지 않으면 다른 것을 출력합니다.

참고 사항 :

  • 경로에 공백이 있으면 폴더 이름을 따옴표로 묶어야합니다.
  • 폴더가 존재하지 않거나 심볼릭 링크가 아닌지 여부에 관계없이 동일한 출력을 제공합니다.

2

최소한 Windows OS에서 PowerShell을 사용하면 다음과 같은 지정된 디렉토리에서 기호 링크를 찾을 수 있습니다.

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

더 간결한 대안은 Get-ChildItem의 별칭 을 사용하는 것입니다 ls.

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

다음 중 하나를 수행하여 심볼릭 링크에 대한 관련 정보를 얻을 수 있습니다.

파일 항목을 가져 와서 Target 속성을 출력하십시오 . 대상은 심볼릭 링크의 "값"입니다. 또한 운영 체제 간 병치시 심볼릭 링크를 작성하기위한 메소드 또는 명령 시그니처에서 인수 이름 'target', 'path'및 / 또는 'value'는 다른 OS에서 다른 메소드 시그니처와 다른 의미를 가질 수 있습니다.

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모드 값에 있는 항목은 해당 항목이 심볼릭 링크임을 나타냅니다.

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

파일 항목을 가져 와서 속성 속성을 출력하십시오 . 아이템은 ReparsePoint 값 기인 어쩌면 심볼릭 링크를 나타내는.

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

1

fsutil항목이 기호 링크인지 여부를 확인하는 데 사용하지 마십시오 . 처음에는 errorlevel에 오류가 있기 때문에 때때로 0으로 유지되고 실제 폴더는 심볼릭 링크로 표시됩니다. 오류 수준을 신뢰할 수 없습니다.

문제 findfind "Symbolic Link"영어로는 가능하지만 다른 언어로는 불가능 하기 때문 입니다.

좋은 방법은 속성에서 검색하는 것입니다.

for %%i in ("%file_to_test%") do set attribute=%%~ai
set attribute=%attribute:~8,1%
if "%attribute%" == "l" (
    echo It's a symlink!
) else (
    echo Damned! It's real!
)

% a가있는 속성은 "drahscotlep"이고 "l"은 기호 링크입니다.


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

2
특히 이것은 이미 좋은 답변을 가진 오래된 질문이므로 답변에 추가되는 내용과 명령의 각 부분이 수행하는 작업을 설명하는 것이 더 나은 방법입니다.
music2myear

0

@SecurityAndPrivacyGuru의 모든 크레딧 , [cmd]

폴더의 symlink {| s}를 읽고 해당 경로 및 대상 경로와 함께 목록을 출력하는 완전한 배치 스크립트 / 기능

@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

실제로 fsutil을 사용하려면 두 기술을 모두 사용하여 오류가 발생하지 않도록 할 수 있습니다. (나는 ver> nul을 사용하여 오류 수준을 재설정합니다)

:function_is_symlink_file_folder item_to_test result
rem 0 = Error
rem 1 = Symlink
rem 2 = File
rem 3 = Folder

:function_is_symlink_file_folder
    setlocal enabledelayedexpansion
    set item_to_test=!%~1!
    set /a result=0
    for %%i in ("%item_to_test%") do set attributes=%%~ai
    set attribute_1=%attributes:~0,1%
    set attribute_9=%attributes:~8,1%
    ver >nul
    fsutil reparsepoint query "%item_to_test%" >nul
    if %errorlevel% == 1 (
        if "%attribute_1%" == "d" (
            set /a result=3
        ) else (
            set /a result=2
        )
    ) else (
        if "%attribute_9%" == "l" (
            set /a result=1
        ) else (
            if "%attribute_1%" == "d" (
                set /a result=3
            ) else (
                set /a result=2
            )
        )
    )
    endlocal & set /a %~2=%result%
goto :eof
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.