如何在 cmd 或 PowerShell 中跟随 symbolic/soft link?
How to follow a symbolic/soft link in cmd or PowerShell?
我的搜索只告诉我如何在 cmd 中使用 mklink 创建符号链接。我看到一些东西说使用 readlink,但是 PowerShell 和 cmd 不知道 readlink 是什么,而 cd 显然不行。那我要怎么关注呢?
针对你的问题,我制作了这个批处理文件:
mkdir truedir
dir > truedir\fileone.txt
mklink /d symdir truedir
cd symdir
dir
而且我发现从命令提示符将符号 link 的内容获取到目录没有问题。
powershell 5.1(win 10)也没有问题:
Get-ChildItem C:\Users\<user>\OneDrive\Desktop\test2\symdir
能否给我们一个代码示例(批处理或 powershell 相同)来重现您的问题?
为避免您的问题引起混淆:
Windows shortcut files (*.lnk
files), which are a feature of the Windows (GUI) shell, are distinct from symbolic links (symlinks),它们是 (NTFS) 的 功能文件系统.
快捷方式文件 - 您感兴趣的 - 将它们指向的文件或文件夹的路径存储在文件中,这就是为什么:
- 您不能直接
cd
到快捷方式文件的目标文件夹,因为cd
等文件系统命令对内容一无所知 个文件。
- 您必须阅读快捷方式文件的内容以确定其目标,然后您可以将其传递给
cd
或 Set-Location
(在 PowerShell 中)。
快捷方式文件的文件格式是二进制格式,可以通过公开Windows shell功能的in-box COM component读取;例如,要确定名为 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
Symlinks,对比:
(通常)透明地重定向到他们的目标,即,它们指向的文件系统项(文件或文件夹)。
因此,您可以 直接将 cd
与符号 link 一起使用到文件夹 ,但请注意,它仍然是 symlink显示的路径。
到打印一个符号link的目标 - 类似于readlink
实用程序在 类 Unix 平台上运行 - 使用 PowerShell;例如,要在当前目录中打印名为 Samples
的 symlink 的目标:
(Get-Item Samples).Target
# Or, after running `cd Samples`:
(Get-Item .).Target
请注意,在 cmd.exe
中获取 symlink 的目标并不简单,但如果您使用
dir /al <link-path>*
,则列表还将显示 link 的目标路径,在名称之后,包含在 [...]
中;请注意,为了显示有关 link 本身的信息,尾随 *
是必需的,而不是其目标的 contents;请注意,虽然不太可能,但它也可能匹配以相同路径开头的其他 link。
与快捷方式文件不同,symlinks 在 Windows 世界 中仍然很少见,尤其是因为在 Windows 10 之前它们总是需要管理员权限才能创建;在 Windows 10 中,如果(由管理员)启用开发人员模式,即使是非管理用户/非提升进程现在也可以创建 symlinks - 参见 https://blogs.windows.com/buildingapps/2016/12/02/symlinks-windows-10/,这也解释了为什么 symlinks 将来的使用率可能会增加。
我的搜索只告诉我如何在 cmd 中使用 mklink 创建符号链接。我看到一些东西说使用 readlink,但是 PowerShell 和 cmd 不知道 readlink 是什么,而 cd 显然不行。那我要怎么关注呢?
针对你的问题,我制作了这个批处理文件:
mkdir truedir
dir > truedir\fileone.txt
mklink /d symdir truedir
cd symdir
dir
而且我发现从命令提示符将符号 link 的内容获取到目录没有问题。 powershell 5.1(win 10)也没有问题:
Get-ChildItem C:\Users\<user>\OneDrive\Desktop\test2\symdir
能否给我们一个代码示例(批处理或 powershell 相同)来重现您的问题?
为避免您的问题引起混淆:
Windows shortcut files (
*.lnk
files), which are a feature of the Windows (GUI) shell, are distinct from symbolic links (symlinks),它们是 (NTFS) 的 功能文件系统.快捷方式文件 - 您感兴趣的 - 将它们指向的文件或文件夹的路径存储在文件中,这就是为什么:
- 您不能直接
cd
到快捷方式文件的目标文件夹,因为cd
等文件系统命令对内容一无所知 个文件。 - 您必须阅读快捷方式文件的内容以确定其目标,然后您可以将其传递给
cd
或Set-Location
(在 PowerShell 中)。 快捷方式文件的文件格式是二进制格式,可以通过公开Windows shell功能的in-box COM component读取;例如,要确定名为
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
- 您不能直接
Symlinks,对比:
(通常)透明地重定向到他们的目标,即,它们指向的文件系统项(文件或文件夹)。
因此,您可以 直接将
cd
与符号 link 一起使用到文件夹 ,但请注意,它仍然是 symlink显示的路径。到打印一个符号link的目标 - 类似于
readlink
实用程序在 类 Unix 平台上运行 - 使用 PowerShell;例如,要在当前目录中打印名为Samples
的 symlink 的目标:(Get-Item Samples).Target # Or, after running `cd Samples`: (Get-Item .).Target
请注意,在
cmd.exe
中获取 symlink 的目标并不简单,但如果您使用dir /al <link-path>*
,则列表还将显示 link 的目标路径,在名称之后,包含在[...]
中;请注意,为了显示有关 link 本身的信息,尾随*
是必需的,而不是其目标的 contents;请注意,虽然不太可能,但它也可能匹配以相同路径开头的其他 link。
与快捷方式文件不同,symlinks 在 Windows 世界 中仍然很少见,尤其是因为在 Windows 10 之前它们总是需要管理员权限才能创建;在 Windows 10 中,如果(由管理员)启用开发人员模式,即使是非管理用户/非提升进程现在也可以创建 symlinks - 参见 https://blogs.windows.com/buildingapps/2016/12/02/symlinks-windows-10/,这也解释了为什么 symlinks 将来的使用率可能会增加。