Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
windows符号链接目标_Windows_Symlink - Fatal编程技术网

windows符号链接目标

windows符号链接目标,windows,symlink,Windows,Symlink,假设我设置了一个符号链接: mklink /D C:\root\Public\mytextfile.txt C:\root\Public\myothertextfile.txt @echo off for /f "tokens=2 delims=[]" %%H in ('dir /al %1 ^| findstr /i /c:"%2"') do ( echo %%H ) 编者按:选项/D-用于创建目录符号链接-与目标文件不一致,如本例所示,这导致了一些混乱。要创建文件符号链接,只

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

mklink  /D C:\root\Public\mytextfile.txt C:\root\Public\myothertextfile.txt
@echo off
for /f "tokens=2 delims=[]" %%H in  ('dir /al %1 ^| findstr /i /c:"%2"') do (
    echo %%H
)
编者按:选项
/D
-用于创建目录符号链接-与目标文件不一致,如本例所示,这导致了一些混乱。要创建文件符号链接,只需省略
/D


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

正如Harry Johnston所说的
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/07/31 11:22 libs
2014/08/01 13:53 4997 mobile.iml
2014/07/31 11:22 689 proguard-rules.pro
2014/09/28 10:54 res[\??\C:\Users\\uuuuuuuuuuuuuuuuuuuuuuuuuumobile\src\main\res]

可能有人对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; }
}
静态IEnumerable GetAllSymLinks(字符串工作目录)
{
流程转换器=新流程();
converter.StartInfo=newprocessstartinfo(“cmd”,“/c dir/Al”){RedirectStandardOutput=true,UseShellExecute=false,CreateNoWindow=true,WorkingDirectory=workingdir};
字符串输出=”;
converter.OutputDataReceived+=(发送方,e)=>
{
输出+=e.数据+“\r\n”;
};
converter.Start();
converter.BeginOutputReadLine();
WaitForExit();
Regex Regex=new Regex(@“\n.*\\s(.*)\s\[(.*)\]\r”);
var matches=regex.matches(输出);
foreach(匹配中的匹配)
{
var name=match.Groups[1].Value.Trim();
var target=match.Groups[2].Value.Trim();
Console.WriteLine(“符号链接:+name+”-->“+target”);
返回新的Symlink(){Name=Name,Target=Target};
}
}
类符号链接
{
公共字符串名称{get;set;}
公共字符串目标{get;set;}
}
补充:

  • 虽然
    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
所有贷记到[cmd]

完整的批处理脚本/函数,用于读取符号链接{s in folder},并输出带有符号链接{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
@echo关闭
setlocal enableExtensions enableDelayedExpansion
cd/D“%~dp0”
设置br=^
rem br;
设置“pafIf=”
设置“gIfZsymLink=”
对于('dir“!pafIf!”/al/b)中的/f“tokens=*”%%q,请执行以下操作(
对于/f“tokens=2 delims=[]”%%r in('dir/al^ findstr/i/c:%%q')do(
设置“gIfZsymLink=!gIfZsymLink!%%~fq>%%%r!br!”
)
)
设置“gIfZsymLink=!gIfZsymLink:~0,-1!”
rem回声“!gIfZsymLink!”
对于(“!gIfZsymLink!”)中的/f“tokens=1,2 delims=>”%%q,请执行以下操作(
回显符号链接:%%q,文件路径:%%r
)
:scIn
rem endlocal
暂停
rem退出/b
编写批处理文件(get_target.bat)以获取符号链接的目标:

mklink  /D C:\root\Public\mytextfile.txt C:\root\Public\myothertextfile.txt
@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
命令行选项 超级用户朱利安·奈特(Julian Knight)为Linux命令列出了一些Windows等效资源。与此最相关的命令是
ln.exe
。以下是下载链接,以及如何使用这些实用程序

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

超级用户朱利安·奈特对我很有效

安装Windows链接外壳扩展后,您可以在Windows资源管理器中右键单击该链接并检查属性。有一个选项卡允许您直接更改链接

已安装:

  • 右键单击文件以打开“属性”窗口时,其中包含一个附加选项卡:“链接属性”,显示符号链接的目标
  • 也可以编辑此目标字段以更改符号链接的目标
  • 由于该字段是可编辑的,因此目标链接的复制粘贴很容易
  • 正如滚动查看目标文件的整个路径一样
    (与此相反,“属性”窗口中其他位置的“位置”字段不允许滚动查看正在检查的文件的完整路径。)
顺便说一句

安装链接外壳扩展后不久,WAMP服务器图标不再出现在系统托盘中(已注意到),这意味着虽然WAMPP仍在运行(本地网站按预期工作),但无法访问任何WAMP功能。

目前还不能确定安装是否导致WAMPP托盘图标消失,但好消息是,重新启动后,WAMPP会像正常情况一样重新出现在系统托盘中。:-)

或者,如果可能的话,我如何在perlIt的有点奇怪的目录mytextfile.txt中追踪链接;您确定要使用/D选项吗?无论如何,“dir”命令默认显示符号链接的目标。这实际上是一个连接点,不是符号链接,但符号链接的目录列表看起来非常类似。使用git bash时,
dir
不可用,但您也可以编写
cmd//C dir
,使用Powershell时,
dir
可能是别名。与关于git bash的注释一样,使用
cmd/C dir
获得预期的输出。
^
是转义字符。在命令符号之前添加转义字符可以将其视为普通文本。当管道传输或重定向这些字符时,应以转义字符作为前缀:&\<>^|