windows - 批处理文件 (windows cmd.exe) 测试目录是否为链接 (symlink)

标签 windows batch-file directory symlink

我刚刚了解到这是一种在批处理文件中测试文件是否为链接的方法:

dir %filename% |  find "<SYMLINK>" && (
   do stuff
)

如果一个目录是一个符号链接(symbolic link),我怎样才能做一个类似的技巧来测试。仅替换 <SYMLINK> 是行不通的与 <SYMLINKD> ,因为 dir %directoryname%列出目录的内容,而不是目录本身。

似乎我需要一些方法来让 dir 告诉我有关目录的信息,就像我在父目录中询问时那样。 (就像 unix 中的 ls -d 一样)。

或者任何其他测试目录是否为符号链接(symbolic link)的方法?

谢谢!

最佳答案

你有三种方法

方案一:fsutil reparsepoint

将符号链接(symbolic link)/连接与 fsutil reparsepoint query 结合使用并检查 %errorlevel% 是否成功,如下所示:

set tmpfile=%TEMP%\%RANDOM%.tmp

fsutil reparsepoint query "%DIR%" >"%tmpfile%"
if %errorlevel% == 0 echo This is a symlink/junction
if %errorlevel% == 1 echo This is a directory

这行得通,因为 fsutil reparsepoint query 无法在标准目录上执行任何操作并抛出错误。 但是权限错误也会导致%errorlevel%=1!

方案二:dir + find

使用dir 列出父目录的链接,使用find 过滤输出并检查%errorlevel% 是否成功,如下所示:

set tmpfile=%TEMP%\%RANDOM%.tmp

dir /AL /B "%PARENT_DIR%" | find "%NAME%" >"%tmpfile%"
if %errorlevel% == 0 echo This is a symlink/junction
if %errorlevel% == 1 echo This is a directory

解决方案 3:(最好的)

for 获取目录的属性并检查它的最后一个,因为这表示链接。我认为这是更聪明的最佳解决方案。

for %i in ("%DIR%") do set attribs=%~ai
if "%attribs:~-1%" == "l" echo This is a symlink/junction

仅供引用:此解决方案不依赖于 %errorlevel%,因此您也可以检查“有效错误”!

来源

关于windows - 批处理文件 (windows cmd.exe) 测试目录是否为链接 (symlink),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18883892/

相关文章:

windows - 如何在 Windows 上从 git bash 运行 PHPUnit?

在 Windows XP 中编译 C 代码

c++ - GetTokenInformation 返回 ERROR_INSUFFICIENT_BUFFER

windows - 是否可以在 batch/cmd 中回显一些不可打印的字符?

file - Go 中的 dirname 等价物

c - 如何在 Windows 中创建目录树?

c++ - 非 GPL XMPP 客户端库

batch-file - 将批处理文件与Cmd.exe重新关联

java - 获取 JAR 文件的位置

variables - 批处理 - 在另一个变量中回显变量的值?