gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 12:40:32 25 4
gpt4 key购买 nike

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

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com