12

のWindowsネイティブの代替ln -smklink.

のネイティブな代替手段はありreadlinkますか? または、ファイルがシンボリックリンクかどうかをネイティブに識別する方法は?

4

2 に答える 2

6

に直接相当するツールはないと思いますreadlinkdirただし、アイテムがシンボリックリンクであるかどうかの出力で確認できるため、コマンドラインまたはスクリプトでこれを判断できます。

シンボリックリンクかどうかをテストします

次のような構文を使用して、特定のファイルがシンボリックリンクであるかどうかを非常に簡単にテストできます。

 dir mysymlink  | find "<SYMLINK>" >NUL
 if not errorlevel 1  echo. It's a symlink!

エラーレベルは、「」が見つかった場合は0になり、それ以外の<SYMLINK>場合は1になります。

シンボリックリンクのターゲットを決定します

シンボリックリンクの実際のターゲットを決定することは別の問題であり、私の意見ではそれほど単純ではありません。の出力は次のdir mysymlink | find "<SYMLINK>"ようになります

11/13/2012  12:53 AM    <SYMLINK>      mysymlink [C:\Windows\Temp\somefile.txt]

これを解析することはできますが、一部の文字では1つの変数ですべてを処理するのが難しいため、一時ファイルを処理する方が簡単であることがわかりました。

 dir mysymlink | find "<SYMLINK>" > temp.txt
 for /f "tokens=6" %i in (temp.txt) do @echo %i

これにより、のような出力が得られます[C:\Windows\Temp\somefile.txt]。(バッチスクリプト内で使用することを忘れないでください%%i。上記はコマンドプロンプトからのものです。)

角かっこなしで結果を得るには、次のようにします。

 dir mysymlink | find "<SYMLINK>" > temp.txt
 for /f "tokens=6" %i in (temp.txt) do set answer=%i
 echo %answer:~1,-1%

変数%answer%には角かっこ付きの結果が含まれているため%answer:~1,-1%、最初または最後の文字なしの結果も含まれます。

于 2012-11-13T09:13:53.747 に答える