假设我设置了一个符号链接:
mklink /D C:\root\Public\mytextfile.txt C:\root\Public\myothertextfile.txt
编辑注:选项/D
用于创建目录符号链接,与本示例中的针对文件的目标存在冲突,这引起了一些混淆。要创建文件符号链接,只需省略/D
。如何使用命令行查看mytextfile.txt
的目标?
假设我设置了一个符号链接:
mklink /D C:\root\Public\mytextfile.txt C:\root\Public\myothertextfile.txt
编辑注:选项/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]
dir
命令不可用,但可以使用 cmd //C dir
命令代替。 - jakub.gdir
可能是一个别名。就像关于 git bash 的评论一样,使用 cmd /C dir
来获取预期的输出。 - CrazyIvan1974为了补充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
Get-ChildItem | ? Target | Select-Object FullName, Target | Format-List
如果路径被截断显示为 ...
- cyclingLinguist编写一个批处理文件(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
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; }
}
所有的功劳归功于@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
超级用户Julian Knight的答案列出了一些Windows等效于Linux命令的资源。其中最相关的命令是ln.exe
。以下是下载链接以及如何使用这些实用程序。
另外,如果您想使用Windows GUI界面(具体来说是文件属性窗口)查看符号链接的目标,请安装Windows Link Shell Extension(直接下载文件的链接):
超级用户Julian Knight的答案对我很有帮助。
安装了Windows Link Shell Extension后,您可以右键单击Windows Explorer中的链接并检查属性。 有一个选项卡允许您直接更改链接。
安装了Link Shell Extension之后:
顺便说一句
安装Link Shell Extension后,WAMP服务器图标不再出现在系统托盘中(注意到),这意味着虽然WAMPP仍在运行(本地网站按预期工作),但无法访问任何WAMP功能。
尚不能确定安装是否导致了WAMPP托盘图标消失,但好消息是重新启动后,WAMPP会像往常一样重新出现在系统托盘中。 :-)