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

时间:2019-02-16 22:59:45

标签: windows powershell cmd symlink desktop-shortcut

我的搜索仅向我展示了如何使用cmd中的 mklink 创建符号链接。我已经看到一些事情说要使用 readlink ,但是PowerShell和cmd不知道什么是 readlink ,并且 cd 显然不起作用。那么我该如何关注?

2 个答案:

答案 0 :(得分:2)

对于您的问题,我制作了此批处理文件:

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相同)来复制您的问题吗?

答案 1 :(得分:1)

为避免因您的问题引起的混乱:

  • Windows shortcut files (*.lnk files) (是Windows (GUI) shell功能)与 symbolic links (symlinks)不同,这是(NTFS)文件系统 功能。

  • 快捷文件-您感兴趣的-将文件或文件夹指向的路径存储在文件内 ,这就是为什么

    • 无法直接cd cd到快捷文件的目标文件夹,因为诸如cd之类的文件系统命令对文件的内容一无所知。
    • 必须阅读快捷文件的内容以确定其目标,然后可以将其传递给Set-LocationSamples.lnk(在PowerShell)。
    • 快捷方式文件的文件格式是二进制的,可以通过公开Windows Shell功能的in-box COM component读取;例如,要确定名为# 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 的快捷方式文件的目标文件夹并更改为该文件夹,请使用PowerShell:

      cd
  • 相比之下,
  • 符号链接

    • (通常)透明地重定向到其目标 ,即它们指向的文件系统项(文件或文件夹)。

    • 因此,您可以直接将readlink与指向文件夹的符号链接一起使用,但是请注意,仍然是 symlink 的路径显示。

    • 打印符号链接的目标-类似于Samples实用程序在类Unix平台上所做的操作-使用PowerShell;例如,在当前目录中打印名为 (Get-Item Samples).Target # Or, after running `cd Samples`: (Get-Item .).Target 的符号链接的目标:

      cmd.exe
    • 请注意,在dir /al <link-path>*中获取符号链接的目标并不是一件容易的事,但是如果您使用
      [...],清单还将在名称后显示链接的目标路径。 ,用*括起来;请注意,尾随mysql -uroot -p'password'是必需的,以便显示有关链接本身的信息,而不是其目标的 contents ;请注意,尽管可能性不大,但也可能会匹配以相同路径开头的其他链接。


与快捷方式文件不同,符号链接在Windows世界中仍然很少使用,尤其是因为在Windows 10之前,它们总是需要创建管理员权限;在Windows 10中,如果(由管理员)启用了开发人员模式,那么即使非管理用户/未提升权限的进程现在也可以创建符号链接-请参见https://blogs.windows.com/buildingapps/2016/12/02/symlinks-windows-10/,这也解释了为什么符号链接可能会增加的原因将来使用