【发布时间】:2014-12-11 01:39:33
【问题描述】:
ln -s 的 Windows native 替代方案是 mklink。
readlink 是否有任何本地替代方案?或者如何本地识别文件是否是符号链接?
【问题讨论】:
标签: windows cmd native symlink
ln -s 的 Windows native 替代方案是 mklink。
readlink 是否有任何本地替代方案?或者如何本地识别文件是否是符号链接?
【问题讨论】:
标签: windows cmd native symlink
无需将标准输出重定向到 temp.txt 文件。您可以简单地在一行中执行此操作:
for /f "tokens=6" %i in ('dir mysymlink ^| FIND "<SYMLINK>"') do @echo %i
另请注意,Lars 的上述方法仅适用于“文件”符号链接。该方法必须针对目录符号链接进行调整,因为将目录传递给“dir”命令将列出该目录的实际内容(其中不会包含自身)
所以你会使用:
for /f "tokens=6" %i in ('dir mysymlink* ^| FIND "<SYMLINKD>"') do @echo %i
注意在 dir 调用中包含 * 并在 FIND 中添加“D”
星号将阻止 dir 列出该目录的内容。
为了进一步简化处理文件或目录符号链接的过程,您只需始终包含星号,对于 FIND 参数,您可以将其更改为部分匹配,以便它在结尾处匹配或不匹配“D”
for /f "tokens=6" %i in ('dir mysymlink* ^| FIND "<SYMLINK"') do @echo %i
最后,由于该方法实际上返回括号 [].. 内的文件。您最好将它们分隔开,留下最后一个方法:
for /f "tokens=2 delims=[]" %i in ('dir mysymlink* ^| FIND "<SYMLINK"') do @echo %i
【讨论】:
C:\app\ 和C:\app2\ 都是符号目录链接,您需要C:\app 的目标。您的代码必须检查令牌 5。重新解析“app [target-path-string]”并仅将其作为答案返回。
我不相信有任何工具直接等同于readlink。但是您可以在dir 的输出中看到一个项目是否是符号链接,因此您仍然可以从命令行或脚本中确定这一点。
您可以使用以下语法轻松测试给定文件是否为符号链接:
dir mysymlink | find "<SYMLINK>" >NUL
if not errorlevel 1 echo. It's a symlink!
如果找到“<SYMLINK>”,Errorlevel 将为 0,否则为 1。
确定符号链接的实际目标是另一回事,在我看来并不那么简单。 dir mysymlink | find "<SYMLINK>" 的输出可能看起来像
11/13/2012 12:53 AM <SYMLINK> mysymlink [C:\Windows\Temp\somefile.txt]
你可以解析这个,但是有些字符很难处理一个变量,所以我发现处理一个临时文件更容易:
dir mysymlink | find "<SYMLINK>" > temp.txt
for /f "tokens=6" %i in (temp.txt) do @echo %i
这会产生类似[C:\Windows\Temp\somefile.txt] 的输出。 (记得在任何批处理脚本中使用%%i;以上来自命令提示符。)
要获得不带括号的结果,您可以执行以下操作:
dir mysymlink | find "<SYMLINK>" > temp.txt
for /f "tokens=6" %i in (temp.txt) do set answer=%i
echo %answer:~1,-1%
变量%answer% 包含带括号的结果,因此%answer:~1,-1% 是没有第一个或最后一个字符的结果。
【讨论】:
<SYMLINKD> 标识,但请注意dir mysymlinkdir 将显示该符号链接目录的内容而不是摘要信息。所以也许dir |find "mysymlinkdir" |find "<SYMLINKD>" 会是一个有用的结构。
dir 在 Windows 7 上未被识别为命令 - 至少在我的机器上没有。
dir 是 cmd.exe 的内部命令,而不是可执行文件。
DIR | find ... 如果有两个符号链接目录,则可以返回 2 行,例如。 mysymlinkdir 和 mysymlinkdir2 存在,所以如果你使用它,你需要检查匹配的目录名称。 (我对下面另一个答案的评论中的相同问题)。当我正在编写一个类似的脚本以将目录更改为符号目录链接的目标目录时,重新提出了这个问题。