我刚刚了解到这是一种在批处理文件中测试文件是否为链接的方法:
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/