繁体   English   中英

如何在cmd或PowerShell中遵循符号/软链接?

[英]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文件系统命令对文件的内容一无所知。
    • 必须阅读快捷方式文件的内容以确定其目标 ,然后才能将其传递到cdSet-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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM