2012-04-17 8 views
13

は私のセットアップシンボリックリンクがあると言いますか?窓シンボリックリンクターゲット

+0

またはそれはmytextfile.txtという名前のディレクトリを持つことが少し奇妙だどのように私はperlの –

+5

内のリンクを追いかけない可能ならば、あなたは/ Dオプションを使うつもりですか? –

+3

とにかく、 "dir"コマンドはシンボリックリンクのターゲットをデフォルトで表示します。 –

答えて

12

ハリー・ジョンストンが言ったように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] 
+2

これは実際にはシンボリックリンクではなく、接続点ですが、シンボリックリンクのディレクトリリストは非常によく似ています。 –

+1

git bashを使うと、 'dir'は利用できませんが、' cmd // C dir'の代わりに書くことができます –

1

の目標を示したぶん誰かが)(Directory.GetDirectoriesに似たディレクトリ内のすべてのディレクトリのシンボリックリンクを解決するためにC#メソッドに興味があります。 JunctionsまたはFileのシンボリックリンクを表示するには、単に正規表現を変更します。

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; } 
}