ln -s
的Windows 原生替代方案为mklink
。
readlink
有替代品吗?或者如何本地识别文件是否为符号链接?
答案 0 :(得分:7)
无需将stdout重定向到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
答案 1 :(得分:6)
我不相信有任何工具直接等同于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%
是没有第一个或最后一个字符的结果。