windows 窗口符号链接目标

nbysray5  于 2022-12-19  发布在  Windows
关注(0)|答案(7)|浏览(214)

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

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

编者按:选项/D--用于创建 * directory * 符号链接--与目标 * files * 不一致,如本例所示,这会引起一些混乱。要创建 * file * 符号链接,只需省略/D
是否有办法使用命令行查看mytextfile.txt的目标是什么?

7fhtutme

7fhtutme1#

正如Harry约翰斯顿所说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]
col17t5w

col17t5w2#

要补充Paul Verest's helpful answer

  • 虽然cmddir确实显示了链接类型和目标路径,但 * 提取 * 这些信息并不简单--请参阅下面的PowerShell替代方法。
  • 要发现当前目录中的所有链接,请使用**dir /aL**。
    PowerShell(PSv 5+)解决方案:

以完整路径形式列出当前目录中的所有链接及其目标:

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
d4so4syb

d4so4syb3#

编写一个批处理文件(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
jaxagkaj

jaxagkaj4#

也许有人对解析目录中所有目录符号链接的C#方法很感兴趣,该方法类似于Directory.GetDirectories()。要列出Junctions或File符号链接,只需更改regex。

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

icnyk63a5#

@安全和隐私Maven的所有署名,[cmd]
读取符号链接的完整批处理脚本/函数{|s在文件夹}中,并列出输出及其目标路径

@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
s71maibg

s71maibg6#

命令行选项

超级用户Julian Knight的answer列出了一些Linux命令的Windows等价物的资源。与此最相关的命令是ln.exe。这里有下载链接,以及如何使用这些实用程序。

使用Windows GUI

或者,如果您希望使用Windows GUI界面(具体而言,文件属性窗口)查看符号链接的目标,请安装Windows Link Shell Extension(直接链接到文件下载):
超级用户Julian Knight的answer对我来说很好用。
安装Windows链接 shell 扩展后,您可以在Windows资源管理器中右键单击链接并检查属性。有一个选项卡允许您直接更改链接。
安装Link Shell Extension后:

  • 右键单击文件打开“属性”窗口时,它包括一个附加选项卡:“链接属性”,显示符号链接的目标。
  • 也可以编辑此“目标”字段以更改符号链接的目标。
  • 而且,由于字段是可编辑的,因此复制粘贴目标链接很容易。
  • 因为是滚动查看目标文件的整个路径!

(In相反,“属性”窗口中其他位置的“位置”字段不允许滚动以查看正在检查的文件的完整路径。)

顺便说一句

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

svgewumm

svgewumm7#

已接受答案的附录,在Windows GUI中查看符号链接:

  • 文件夹符号链接标记为文件文件夹
  • 添加“属性”列有助于区分
  • “大小”列报告不一致:只有快捷方式报告实际大小包括文件夹

下面的每个文件和文件夹都包含相同的2KB数据。

相关问题