31

假设我设置了一个符号链接:

mklink  /D C:\root\Public\mytextfile.txt C:\root\Public\myothertextfile.txt

编者注:选项/D- 用于创建目录符号链接 - 与目标文件不一致,如本例所示,这引起了一些混乱。要创建文件符号链接,只需省略/D.

有没有办法mytextfile.txt使用命令行查看目标是什么?

4

6 回答 6

28

正如哈里约翰斯顿所说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]
于 2014-09-28T03:47:48.867 回答
12

为了补充Paul Verest 的有用答案

  • 虽然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
于 2018-03-23T22:32:15.747 回答
3

编写一个批处理文件(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
于 2019-04-16T12:23:01.440 回答
1

也许有人对解析目录中所有目录符号链接的 C# 方法感兴趣,类似于 Directory.GetDirectories()。要列出连接或文件符号链接,只需更改正则表达式。

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; }
}
于 2015-10-13T14:49:22.933 回答
0

所有功劳归于@SecurityAndPrivacyGuru,[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
于 2019-04-02T19:13:07.830 回答
0

命令行选项

超级用户 Julian Knight 的回答列出了一些 Linux 命令的 Windows 等效资源。最相关的命令是ln.exe. 以下是下载链接以及如何使用这些实用程序。

使用 Windows 图形用户界面

或者,如果您想使用 Windows GUI 界面(特别是文件属性窗口)查看符号链接的目标,请安装 Windows链接外壳扩展(直接链接到文件下载):

超级用户朱利安奈特的回答对我来说效果很好。

安装 Windows Link Shell Extension 后,您可以右键单击 Windows 资源管理器中的链接并检查属性。有一个选项卡可让您直接更改链接。

安装了链接外壳扩展

  • 当您右键单击文件打开“属性”窗口时,它包括一个附加选项卡:“链接属性”,显示符号链接的目标。
  • 您还可以编辑此目标字段以更改符号链接的目标。
  • 由于该字段是可编辑的,因此目标链接的复制粘贴很容易。
  • 就像滚动查看目标文件的整个路径一样!
    (相比之下,“属性”窗口中其他地方的“位置”字段不允许滚动查看您正在检查的文件的完整路径。)

顺便提一句

在安装 Link Shell Extension 后不久,WAMP 服务器图标不再出现在系统托盘中(注意到),这意味着虽然 WAMPP 仍在运行(本地网站按预期工作),但无法访问任何 WAMP 功能。
安装导致 WAMPP 托盘图标消失尚不确定,但好消息是重新启动后,WAMPP 像往常一样重新出现在系统托盘中。:-)

于 2020-10-06T16:15:14.367 回答