标题: [文件操作] [已解决]批处理如何判断是文件还是文件夹、是否是符号链接? [打印本页]
作者: cntanglang 时间: 2021-9-22 01:33 标题: [已解决]批处理如何判断是文件还是文件夹、是否是符号链接?
本帖最后由 cntanglang 于 2021-10-4 22:55 编辑
一个目录下有文件、也有文件夹、也有符号链接的文件、也有符号链接的文件夹
使用DIR 可以看出它们的不同,如下图
可以看出:
dir1是普通文件夹
dir2是符号链接的文件夹
file1是普通文件
file2是符号链接的文件
请问:如何通过批处理快速判断一个给定的路径对象,到底是文件、还是文件夹、还是符号链接的文件、还是符号链接的文件夹?
例如给定 "C:\test\dir2" 则判断是符号链接的文件夹;给定 "C:\test\file1.txt" 则判断是普通文件。
——————————————————————————
已解决,具体见 4楼,感谢 Batcher 大神!
作者: Batcher 时间: 2021-9-22 08:58
回复 1# cntanglang - @echo off
- if not exist "%~1" (
- goto :end
- )
-
- dir "%~1" | findstr "<DIR>" >nul 2>&1
- if errorlevel 1 (
- goto :CheckJunk
- ) else (
- echo 文件夹
- goto :end
- )
-
- :CheckJunk
- dir "%~1" | findstr "<JUNCTION>" >nul 2>&1
- if errorlevel 1 (
- goto :CheckLink
- ) else (
- echo 符号链接的文件夹
- goto :end
- )
-
- :CheckLink
- dir "%~1" | findstr "<SYMLINK>" >nul 2>&1
- if errorlevel 1 (
- echo 普通文件
- ) else (
- echo 符号链接的文件
- )
-
- :end
- pause
复制代码
作者: cntanglang 时间: 2021-9-22 09:11
本帖最后由 cntanglang 于 2021-9-22 09:14 编辑
回复 2# Batcher
我之前写的就是这样的逻辑。。。可是,如果是符号链接的文件夹,是无法通过这个判断的。
因为
Dir 目录
返回的是这个目录下的子目录和文件的信息,而不是目录本身的信息
Dir 文件
返回的则是这个文件本身的信息
这导致,如果是一个有效目录或有效符号链接目录,都会返回其子目录信息,无法区别是不是符号链接目录。
作者: Batcher 时间: 2021-9-23 16:38
回复 3# cntanglang - @echo off
- set "TempFile=%temp%\FsutilTemp.txt"
-
- if not exist "%~1" (
- echo 不存在 "%~1"
- goto :end
- )
-
- pushd "%~1" 2>nul
- if errorlevel 1 (
- goto :CheckFile
- ) else (
- popd
- goto :CheckFolder
- )
-
- :CheckFolder
- fsutil reparsepoint query "%~1" >"%TempFile%" 2>&1
- if errorlevel 1 (
- echo 普通文件夹
- ) else (
- goto :CheckJunkFolder
- goto :end
- )
-
- :CheckJunkFolder
- for /f "skip=3 delims=" %%i in ('type "%TempFile%"') do (
- if "%%i" equ "标记值: 装入点" (
- echo 软链接的文件夹
- ) else if "%%i" equ "标记值: 符号链接" (
- echo 符号链接的文件夹
- )
- )
- goto :end
-
- :CheckFile
- fsutil reparsepoint query "%~1" >"%TempFile%" 2>&1
- if errorlevel 1 (
- echo 普通文件
- ) else (
- goto :CheckJunkFile
- )
- goto :end
-
- :CheckJunkFile
- for /f "skip=3 delims=" %%i in ('fsutil reparsepoint query "%~1"') do (
- if "%%i" equ "标记值: 装入点" (
- echo 软链接的文件
- ) else if "%%i" equ "标记值: 符号链接" (
- echo 符号链接的文件
- )
- )
- goto :end
-
- :end
- pause
复制代码
作者: gcbgczhang 时间: 2021-9-25 21:38
用type能不能行?
作者: 极品小猫 时间: 2021-9-26 10:17
回复 5# gcbgczhang
方案1:曲线救国,dir 无法查看当前路径是否为符号链接,那就返回到上一级目录去查看
方案2:使用fileinfo查看目录信息,但信息内容不够详细,只能区分是目录链接还是目录
http://www.ltr-data.se/opencode.html/,搜fileinfo
另外你判断的作用是什么?如果不是符号链接,
作者: cntanglang 时间: 2021-9-27 13:19
回复 cntanglang
Batcher 发表于 2021-9-23 16:38
亲测可行,学到了,感谢感谢 :handshake
作者: Batcher 时间: 2021-9-27 14:44
回复 6# 极品小猫
方案1是行不通的,你尝试写一写就发现问题了
作者: 极品小猫 时间: 2021-9-29 09:37
本帖最后由 极品小猫 于 2021-9-29 09:40 编辑
回复 8# Batcher
可操作吧?这里的操作首先需要假设目标路径有可能是链接文件
通过回到上一层路径dir获取目录信息,比较路径的文件名(目录名)- for /f "tokens=3,4 delims= " %i in ('dir Android\..^|findstr /i Android') do @echo %i %j
复制代码
只是这个方案无法细化到这是什么“链接”
作者: Batcher 时间: 2021-9-29 21:07
回复 9# 极品小猫
是的 dir + findstr 的方案无法满足楼主的需求
作者: tiandyoin 时间: 2023-8-13 10:43
我用 everything 软件 查看所有链接- ext:desklink;mapimail;mydocs;lnk;pif;scf;url;ZFSendToTarget|attrib:DL|<attributes:AL !attributes:P>|<attrib:RD child:target.lnk>
复制代码
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |