假设我设置了一个符号链接:
mklink /D C:\root\Public\mytextfile.txt C:\root\Public\myothertextfile.txt
编者注:选项/D
- 用于创建目录符号链接 - 与目标文件不一致,如本示例所示,引起了一些困惑。要创建文件符号链接,只需省略/D
。
有没有办法使用命令行查看mytextfile.txt
的目标是什么?
答案 0 :(得分:16)
正如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]
答案 1 :(得分:4)
补充Paul Verest's helpful answer:
虽然cmd
的{{1}}确实显示了链接类型和目标路径,但提取这些信息并不重要 - 请参阅下面的PowerShell替代方案。
要发现当前目录中的所有链接,请使用 dir
。
PowerShell (PSv5 +)解决方案:
将当前目录中的所有链接及其目标列为完整路径:
dir /aL
确定给定链接的目标:
PS> Get-ChildItem | ? Target | Select-Object FullName, Target
FullName Target
-------- ------
C:\root\public\mytextfile.txt {C:\root\Public\myothertextfile.txt}
答案 2 :(得分: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; }
}
答案 3 :(得分:0)
所有功劳@SecurityAndPrivacyGuru,[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
答案 4 :(得分:0)
编写一个批处理文件(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
答案 5 :(得分:0)
超级用户朱利安·奈特(Julian Knight)的answer列出了Windows命令中与Linux命令等效的一些资源。与此最相关的命令是ln.exe
。这里是下载链接,以及如何使用这些实用程序。
或者,如果要使用Windows GUI界面(特别是文件“属性”窗口)查看符号链接的目标,请安装Windows Link Shell Extension(直接链接到文件下载):
超级用户朱利安·奈特(Julian Knight)的answer对我来说很好。
在安装了Windows Link Shell Extension之后,您可以右键单击Windows资源管理器中的链接并检查属性。有一个标签可让您直接更改链接。
顺便说一句
在安装Link Shell Extension之后不久,WAMP服务器图标不再出现在系统托盘中(已注意到),这意味着尽管WAMPP仍在运行(本地网站按预期运行),但无法访问任何WAMP功能。 /> 不能确定安装是否导致WAMPP托盘图标消失,但是好消息是,重新启动后,WAMPP像往常一样重新出现在系统托盘中。 :-)