web-dev-qa-db-ja.com

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

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

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

ファイルを右クリックして[プロパティ]をオンにすると、それがシンボリックリンクであることがわかりません。

28
BearCode

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
30
Steven Penny

StackOverFlow からコピーしました。この行を使用しただけで機能します

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

説明

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

ここでは、「シンボリックリンク」が含まれている行を出力するように注意します。シンボリックの場合はfindになり、findが成功した場合は1つ出力されます。そうでない場合は、別の出力を行います。

注記

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

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プロパティを出力します。 Linkic値がSymbolicLinkのアイテムは、そのシンボルであることを意味します。

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

ファイル項目を取得し、そのModeプロパティを出力します。 Mode値にlが含まれるアイテムは、それがシンボリックリンクであることを示します。

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
2
marckassay

fsutilを使用して、アイテムがシンボリックリンクかどうかを確認しないでください。最初はerrorlevelにエラーがあるため、場合によっては0のままで、実際のフォルダーはシンボリックリンクとして表示されます。エラーレベルは信頼できません。

findの問題は、find "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」はシンボリックリンク用です。

1
Celes

これがシンボリックリンクを保存する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
mosh

@ SecurityAndPrivacyGur へのすべてのクレジット、[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
ilias

Powershellの場合:

dir | select Name, LinkType
0
John

本当に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
0
Celes