シンボリックリンクを設定したとしましょう。
mklink /D C:\root\Public\mytextfile.txt C:\root\Public\myothertextfile.txt
編集者注:オプション/D
-これはディレクトリシンボリックリンクを作成するためのもの-は、この例のように、ターゲティングファイルと対立しているため、混乱が生じています。 fileシンボリックリンクを作成するには、/D
を省略します。
コマンドラインを使用して、mytextfile.txt
のターゲットが何であるかを確認する方法はありますか?
ハリー・ジョンストンが言ったように、dir
コマンドはシンボリックリンクのターゲットを示しています
2014/07/31 11:22 <DIR> libs
2014/08/01 13:53 4,997 mobile.iml
2014/07/31 11:22 689 proguard-rules.pro
2014/09/28 10:54 <JUNCTION> res [\??\C:\Users\_____\mobile\src\main\res]
補足するために ポールベレストの有用な答え :
cmd
のdir
は確かにリンクの種類とターゲットパスを示していますが、その情報を抽出することは重要です-PowerShellの代替手段については以下を参照してください。
現在のディレクトリ内のすべてのリンクを検出するには、dir /aL
を使用します。
PowerShell(PSv5 +)ソリューション:
現在のディレクトリ内のすべてのリンクとそのターゲットをフルパスとして一覧表示します。
PS> Get-ChildItem | ? Target | Select-Object FullName, Target
FullName Target
-------- ------
C:\root\public\mytextfile.txt {C:\root\Public\myothertextfile.txt}
特定のリンクのターゲットを決定します。
PS> (Get-Item C:\root\Public\mytextfile.txt).Target
C:\root\Public\myothertextfile.txt
シンボリックリンクのターゲットを取得するためのバッチファイル(get_target.bat)を記述します。
@echo off
for /f "tokens=2 delims=[]" %%H in ('dir /al %1 ^| findstr /i /c:"%2"') do (
echo %%H
)
たとえば、C:\root\Public\mytextfile.txt
のターゲットを取得するには:
get_target.bat C:\root\Public\ mytextfile.txt
Directory.GetDirectories()のようなディレクトリ内のすべてのディレクトリシンボリックリンクを解決するC#メソッドに興味がある人がいるかもしれません。ジャンクションまたはファイルのシンボリックリンクを一覧表示するには、正規表現を変更するだけです。
static IEnumerable<Symlink> GetAllSymLinks(string workingdir)
{
Process converter = new Process();
converter.StartInfo = new ProcessStartInfo("cmd", "/c dir /Al") { RedirectStandardOutput = true, UseShellExecute = false, CreateNoWindow = true, WorkingDirectory = workingdir };
string output = "";
converter.OutputDataReceived += (sender, e) =>
{
output += e.Data + "\r\n";
};
converter.Start();
converter.BeginOutputReadLine();
converter.WaitForExit();
Regex regex = new Regex(@"\n.*\<SYMLINKD\>\s(.*)\s\[(.*)\]\r");
var matches = regex.Matches(output);
foreach (Match match in matches)
{
var name = match.Groups[1].Value.Trim();
var target = match.Groups[2].Value.Trim();
Console.WriteLine("Symlink: " + name + " --> " + target);
yield return new Symlink() { Name = name, Target = target };
}
}
class Symlink
{
public string Name { get; set; }
public string Target { get; set; }
}
@ SecurityAndPrivacyGur 、[cmd]へのすべてのクレジット
シンボリックリンク{| 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