Windows 7でシンボリックリンクが指す場所を確認する


24

Windows 7では、ファイルがシンボリックリンクであるかどうか、フォルダーがジャンクションであるかどうかを確認する方法、およびそれらがポイントしている場所(シンボリックリンク/ジャンクションの場合)を確認する方法を教えてください。エクスプローラーとコマンドラインの両方。

フォルダーツリーの正確なレプリカを作成するときに、別のコンピューターでシンボリックリンクを複製する方法を知るために、コマンドラインから実行する方法があることが非常に重要です。

ファイルを右クリックして[プロパティ]をチェックしても、それがシンボリックリンクであるという兆候を見つけることができません。

回答:


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 Explorerを使用できます。

Right click column, More, Link Target

これはWindows 7(Microsoft Windows [バージョン6.1.7601])では機能しません
-gonzalezea

1
@gonzalezeaええ、そうです。それは私がこれを投稿する場合、2012年にWindows 7の裏で働いていた、そしてそれはあまりにも機能するようになりました
スティーヴン・ペニー

おそらく新しいユーザーにとってそれほど明白ではないかもしれませんが、これはコマンドラインソリューションです。ユーザーはコマンドプロンプトを開き、ディレクトリを(CDコマンドを使用して)シンボリックリンクを含むディレクトリに変更してから、DIRコマンドを入力し、「Enter」キーを押す必要があります。間違ったディレクトリでDIRコマンドを実行することはよくある間違いです。ただし、シンボリックリンクがどのディレクトリにあるかがわからない限り、理解できる(Windows GUIでは特定のディレクトリにシンボリックリンクまたはジャンクションが含まれているかどうかが明示的に示されないため、必ずしも明らかではありません)。SHORTCUTではなくFILE FOLDERタイプのショートカットを探します。
Ed999

2
リンク先のフィールドは、Windows 7上で空である
Ronen氏Festinger

1
コマンドラインからdir /a入力してEnterキーを押します。/ aを含めない場合、ウィンドウはジャンクションポイントをリストしません。あなたは違い試すことができますdirし、dir /aディレクトリ上を\Users\YourUsername
パウルス

4

StackOverFlowからコピーして、この行を使用したところ、動作します

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

説明

FSUtilに関するMSDNから:ファイルアロケーションテーブル(FAT)およびNTFSファイルシステムに関連するタスク(再解析ポイントの管理、スパースファイルの管理、ボリュームのディスマウントなど)を実行します。パラメータなしで使用すると、fsutilはサポートされているサブコマンドのリストを表示します。

私たちの使用のために、私達はちょうど私たちは、その後どの、それは象徴的だ場合には、それに「シンボリックリンク」を持っている行を出力することを気にfindし、もしfindそうでないならば、我々は出力何か他のものを、成功した、我々の出力一つのこと。

  • パスにスペースが含まれる場合、フォルダー名を引用符で囲む必要があります。
  • フォルダーが存在しない場合でもシンボリックリンクではない場合でも、同じ出力が得られます。注意して使用してください。

2

PowerShellを使用して、少なくともWindows OSでは、次のような任意のディレクトリでシンボリックリンクを見つけることができます。

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

より簡潔な代替手段は、Get-ChildItemのエイリアスを使用することlsです。

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

また、次のいずれかを実行することにより、シンボリックリンクに関する関連情報を取得できます。

ファイルアイテムを取得し、そのTargetプロパティを出力します。ターゲットは、シンボリックリンクの「値」です。さらに、オペレーティングシステム間で並置するときにシンボリックリンクを作成するためのメソッドまたはコマンドシグネチャでは、「ターゲット」、「パス」、および/または「値」の引数名は、異なる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プロパティを出力しますlMode値にある項目は、それがシンボリックリンクであることを示します。

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

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 in folder}を読み取り、それらとそのターゲットパスを含むリストを出力する完全なバッチスクリプト/関数

@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.