[英]How to follow a symbolic/soft link in cmd or PowerShell?
我的搜索仅显示了如何在cmd中使用mklink创建符号链接。 我已经看到一些事情说要使用readlink ,但是PowerShell和cmd不知道什么是readlink ,而cd显然不起作用。 那么我该如何遵循?
为了避免您的问题引起的混乱:
Windows 快捷方式文件 ( *.lnk
文件)是Windows(GUI) 外壳程序的功能,与 符号链接 ( symlinks ) (其是(NTFS) 文件系统的功能)不同 。
快捷方式文件 (您感兴趣的)存储它们指向文件内部的文件或文件夹的路径,这就是为什么:
cd
到快捷方式文件的目标文件夹 ,因为cd
文件系统命令对文件的内容一无所知。 cd
或Set-Location
(在PowerShell中)。 快捷方式文件的文件格式是二进制的,可以通过公开Windows外壳功能的内置COM组件进行读取。 例如,要确定名为Samples.lnk
的快捷文件的目标文件夹并更改为该文件夹,请使用PowerShell:
# NOTE: * Despite the name "CreateShortcut()", the method is also # used to *read* shortcut files. # * Prefixing the filename with "$PWD/" is needed in order # to target a file in the current directory, because # the method doesn't know what PowerShell's current dir. is. cd (New-Object -ComObject WScript.Shell).CreateShortcut("$PWD/Samples.lnk").TargetPath
相反 , 符号链接 :
(通常)透明地重定向到其目标 ,即他们指向的文件系统项(文件或文件夹)。
因此,您可以将cd
与指向文件夹的符号链接直接使用 ,但是请注意,仍然显示符号链接的路径。
要打印符号链接的目标 (类似于readlink
实用程序在类Unix平台上的功能) ,请使用PowerShell; 例如,在当前目录中打印名为Samples
的符号链接的目标:
(Get-Item Samples).Target # Or, after running `cd Samples`: (Get-Item .).Target
请注意,在cmd.exe
获取符号链接的目标并cmd.exe
,但如果您使用
dir /al <link-path>*
,该列表还将在名称后显示链接的目标路径,并用[...]
括起来; 请注意,为了显示有关链接本身的信息,而不是其目标的内容 ,结尾的*
是必需的; 请注意,尽管不太可能,但它可能也匹配以相同路径开头的其他链接。
与快捷方式文件不同, 符号链接在Windows世界中仍然很少见 ,尤其是因为在Windows 10之前,它们总是需要管理员权限才能创建。 在Windows 10中,如果(管理员)启用了开发人员模式,那么即使非管理用户/未提升权限的进程现在也可以创建符号链接-请参阅https://blogs.windows.com/buildingapps/2016/12/02/symlinks -windows-10 / ,这也解释了为什么符号链接将来可能会越来越多地使用 。
对于您的问题,我做了这个批处理文件:
mkdir truedir
dir > truedir\fileone.txt
mklink /d symdir truedir
cd symdir
dir
而且我发现从命令提示符处获取到目录的符号链接的内容没有问题。 Powershell 5.1(Win 10)也没有问题:
Get-ChildItem C:\Users\<user>\OneDrive\Desktop\test2\symdir
您能给我们一个代码示例(批处理或Powershell相同)来复制您的问题吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.