无忧启动论坛

 找回密码
 注册
搜索

批处理判断文件夹是否为目录链接

查看数: 4750 | 评论数: 22 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2022-10-23 21:31

正文摘要:

想通过批处理判断某文件夹是否为目录链接,网上找了一段代码,但是却无法实现,不明白问题出在哪里?有大神指点一下么? 代码如下 @echo on &pushd %~dp0 setlocal enabledelayedexpansion for /f "eol=# ...

回复

窄口牛 发表于 2022-10-24 16:20:51
有个专门的第三方命令,可以判断链接。
jxyun99 发表于 2022-10-24 14:07:26
sunsea 发表于 2022-10-24 14:03
是空格处理的问题。

这下应该可以了。

多谢版主,热心
jxyun99 发表于 2022-10-24 14:07:05

感谢,测试成功
sunsea 发表于 2022-10-24 14:03:23
本帖最后由 sunsea 于 2022-10-24 14:07 编辑
jxyun99 发表于 2022-10-24 10:49
运行版主的代码,路径下明明有文件夹,但是提示找不到
  1. @echo off
  2. pushd "%~dp0"
  3. setlocal enabledelayedexpansion

  4. for /f "delims=; tokens=1,2" %%i in (config.txt) do (
  5.         call :judge "%%i"
  6.         if ERRORLEVEL 1 此处做你想做的事情
  7. )
  8. pause
  9. goto :eof

  10. :judge
  11. set founded=0
  12. pushd %1
  13. pushd "../"
  14. for /f "delims=" %%k in ('dir /ADL /b') do if /i "%%k"=="%~n1" set founded=1
  15. popd
  16. popd
  17. exit /b !founded!
复制代码

是空格处理的问题。以及config.txt里每个目录名字结尾后面不要加“\”。

这下应该可以了。

点评

多谢版主,热心  详情 回复 发表于 2022-10-24 14:07
szwp 发表于 2022-10-24 13:49:27
jxyun99 发表于 2022-10-24 13:28
dir的方式有瑕疵,比如我同一个目录下有linkPath(普通目录)和linkPath999(JUNCTION目录),这时候如果用 ...

去14楼,看16行,学习if
szwp 发表于 2022-10-24 13:46:34
jxyun99 发表于 2022-10-24 13:28
dir的方式有瑕疵,比如我同一个目录下有linkPath(普通目录)和linkPath999(JUNCTION目录),这时候如果用 ...

可以对结果判断啊,加 /b
singel 发表于 2022-10-24 13:43:02
  1. @echo off
  2. pushd "%~dp0"
  3. setlocal enabledelayedexpansion

  4. rem 根据文件夹属性判断是否为目录链接
  5. for /f "eol=# skip=1 delims=; tokens=1,2" %%a in (config.txt) do (
  6.         set "lp=%%a"
  7.         if exist "!lp!" (
  8.                 for %%i in ("!lp!") do (
  9.                         set attribs=%%~ai
  10.                         if not "!attribs:~-3,-2!"=="l" (echo "!lp!"不是目录链接) else (echo "!lp!"是目录链接)
  11.                         )
  12.         )
  13. )
  14. pause
  15. exit
复制代码

点评

感谢,测试成功  详情 回复 发表于 2022-10-24 14:07
sunsea 发表于 2022-10-24 10:12:55
本帖最后由 sunsea 于 2022-10-24 10:18 编辑
  1. @echo off
  2. pushd "%~dp0"
  3. setlocal enabledelayedexpansion

  4. for /f "eol=# skip=1 delims=; tokens=1,2" %%i in (config.txt) do (
  5.         set founded=0
  6.         call :judge %%i
  7.         if ERRORLEVEL 1 此处做你想要做的事情
  8. )
  9. goto :eof

  10. :judge
  11. set founded=0
  12. pushd "%1"
  13. pushd "../"
  14. for /f "delims=" %%k in ('dir /ADL /b') do if /i "%%k"=="%~n1" set founded=1
  15. popd
  16. popd
  17. exit /b !founded!
复制代码

建议小规模测试

点评

运行版主的代码,路径下明明有文件夹,但是提示找不到  详情 回复 发表于 2022-10-24 10:49
cao8mm 发表于 2022-10-24 10:12:39
看看大佬们的解决方案
szwp 发表于 2022-10-24 09:55:56
jxyun99 发表于 2022-10-24 09:45
如果单纯的只是想知道电脑上有哪些文件夹是目录链接,windows下都可以直接用NTFSLinksView了,个人目的不是 ...

给它一个文件,判断所在目录?
szwp 发表于 2022-10-24 09:53:03
jxyun99 发表于 2022-10-24 09:42
在cmd运行了一下,他只能显示出当前文件夹下哪些文件是目录链接,但无法直接告诉我某个文件夹是否目录链 ...

dir /AL C:\linkPath*
将结果贴上来会么?

点评

dir的方式有瑕疵,比如我同一个目录下有linkPath(普通目录)和linkPath999(JUNCTION目录),这时候如果用dir来显示,就会出现错乱的情况。 dir /AL "C:\wen jian jia\linkPath"* 结果却会是显示的linkPath999属性  详情 回复 发表于 2022-10-24 13:28
jxyun99 发表于 2022-10-24 09:45:14
如果单纯的只是想知道电脑上有哪些文件夹是目录链接,windows下都可以直接用NTFSLinksView了,个人目的不是要知道有哪些目录链接,而是给它一个文件,要让批处理判断这个文件夹是否是目录链接,是的话运行代码,不是的话再运行其他代码

点评

给它一个文件,判断所在目录?  详情 回复 发表于 2022-10-24 09:55
jxyun99 发表于 2022-10-24 09:42:00
szwp 发表于 2022-10-24 08:35
去CMD,将结果贴上来看看。

在cmd运行了一下,他只能显示出当前文件夹下哪些文件是目录链接,但无法直接告诉我某个文件夹是否目录链接,比如我要判断C:\linkPath这个文件夹是目录链接还是普通文件夹?,这个代码不能直接实现吧

点评

dir /AL C:\linkPath* 将结果贴上来会么?  详情 回复 发表于 2022-10-24 09:53
szwp 发表于 2022-10-24 08:35:18
jxyun99 发表于 2022-10-23 22:37
这个代码怎么用??

去CMD,将结果贴上来看看。

点评

在cmd运行了一下,他只能显示出当前文件夹下哪些文件是目录链接,但无法直接告诉我某个文件夹是否目录链接,比如我要判断C:\linkPath这个文件夹是目录链接还是普通文件夹?,这个代码不能直接实现吧  详情 回复 发表于 2022-10-24 09:42
jxyun99 发表于 2022-10-23 22:37:39
junyee 发表于 2022-10-23 22:12
这么麻烦干嘛。

'dir /AL'

这个代码怎么用??

点评

去CMD,将结果贴上来看看。  详情 回复 发表于 2022-10-24 08:35
超逸绝尘 发表于 2022-10-23 22:27:27
这个看起来还是非常专业的,看看大佬们的解决方案
hua_wuxin 发表于 2022-10-23 22:26:41
本帖最后由 hua_wuxin 于 2022-10-23 22:29 编辑

建议考虑4楼的方法。

你原来的代码想改对的话:
setlocal enabledelayedexpansion
for /f "eol=# delims=; tokens=1,2" %%i in (config.txt) do (
  for %%A in ("%%i") do (
    set attribs=%%~aA
    if "!attribs:~8,-2!" == "l" (
      echo "%%i" is a symlink/junction
    ) else (
      echo "%%i" is not a symlink/junction
    )
  )
)




junyee 发表于 2022-10-23 22:12:52
这么麻烦干嘛。

'dir /AL'

点评

这个代码怎么用??  详情 回复 发表于 2022-10-23 22:37
jxyun99 发表于 2022-10-23 21:57:09
hua_wuxin 发表于 2022-10-23 21:49
%attribs:~8,-2%改为!attribs:~8,-2!看看

试过,不行的,感觉可能是变量延迟的问题,但不知道如何处理
hua_wuxin 发表于 2022-10-23 21:49:31
%attribs:~8,-2%改为!attribs:~8,-2!看看

点评

试过,不行的,感觉可能是变量延迟的问题,但不知道如果处理  详情 回复 发表于 2022-10-23 21:57

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-9-22 19:45

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表