无需将stdout重定向到temp.txt文件.您可以在一行中执行此操作:
for /f "tokens=6" %i in ('dir mysymlink ^| FIND "<SYMLINK>"') do @echo %i
Run Code Online (Sandbox Code Playgroud)
另请注意,Lars的上述方法仅适用于"文件"符号链接.必须针对目录符号链接调整该方法,因为将目录传递给"dir"命令将列出该目录的实际内容(其中不会有自己的内容)
所以你会用:
for /f "tokens=6" %i in ('dir mysymlink* ^| FIND "<SYMLINKD>"') do @echo %i
Run Code Online (Sandbox Code Playgroud)
注意在dir调用中包含*并在FIND中添加"D"
星号将阻止dir列出该目录的内容.
为了进一步简化为文件或目录符号链接工作的过程,您只需要包含星号,对于FIND参数,您可以将其更改为部分匹配,以便在末尾匹配或不匹配"D"
for /f "tokens=6" %i in ('dir mysymlink* ^| FIND "<SYMLINK"') do @echo %i
Run Code Online (Sandbox Code Playgroud)
最后,因为该方法实际上返回括号[]内的文件..你最好分隔那些,留下最后的方法:
for /f "tokens=2 delims=[]" %i in ('dir mysymlink* ^| FIND "<SYMLINK"') do @echo %i
Run Code Online (Sandbox Code Playgroud)
小智 6
我不相信有任何工具直接相当于readlink.但是您可以在输出中看到dir项是否是符号链接,因此您仍然可以从命令行或脚本中确定这一点.
您可以使用以下语法轻松测试给定文件是否为符号链接:
dir mysymlink | find "<SYMLINK>" >NUL
if not errorlevel 1 echo. It's a symlink!
Run Code Online (Sandbox Code Playgroud)
在<SYMLINK>找到" " 的情况下,Errorlevel将为0,否则为1.
确定符号链接的实际目标是另一回事,在我看来并不是那么简单.输出dir mysymlink | find "<SYMLINK>"可能看起来像
11/13/2012 12:53 AM <SYMLINK> mysymlink [C:\Windows\Temp\somefile.txt]
Run Code Online (Sandbox Code Playgroud)
你可以解析这个,但是有些字符很难处理一个变量中的所有字符,所以我发现处理临时文件更容易:
dir mysymlink | find "<SYMLINK>" > temp.txt
for /f "tokens=6" %i in (temp.txt) do @echo %i
Run Code Online (Sandbox Code Playgroud)
这会产生类似的输出[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%
Run Code Online (Sandbox Code Playgroud)
变量%answer%包含带括号的结果,因此%answer:~1,-1%结果没有第一个或最后一个字符.