无忧启动论坛

标题: 如何通过命令行判断分区格式 [打印本页]

作者: wjgyz740526    时间: 2006-9-3 22:01
标题: 如何通过命令行判断分区格式
如何通过命令行判断分区格式?请问有谁知道吗?只要能区分fat和ntfs即可
作者: 老毛桃    时间: 2006-9-4 12:30
  1. CHKNTFS C:
复制代码

作者: wjgyz740526    时间: 2006-9-4 19:43
那么我想根据检测分区结果的不同执行不同的指令,该怎么写这个bat呢?

好像不能根据错误码来判断,那么是跟据屏幕上的文本来作条件判断吗?
作者: 老毛桃    时间: 2006-9-5 10:19
原帖由 wjgyz740526 于 2006-9-4 19:43 发表
那么我想根据检测分区结果的不同执行不同的指令,该怎么写这个bat呢?

好像不能根据错误码来判断,那么是跟据屏幕上的文本来作条件判断吗?
  1. @ECHO OFF

  2. SET TestD=D

  3. CHKNTFS %TestD%:|FIND /I "NTFS" >NUL

  4. IF %Errorlevel%==0 (
  5. GOTO NTFS
  6. ) ELSE (
  7. CHKNTFS %TestD%:|FIND /I "FAT" >NUL
  8. IF %Errorlevel%==0 (
  9. GOTO FAT
  10. ) ELSE (
  11. GOTO ERR1
  12. )
  13. )

  14. :NTFS
  15. ECHO 您的 %TestD% 盘分区格式为 NTFS
  16. GOTO EXIT

  17. :FAT
  18. ECHO 您的 %TestD% 盘分区格式为 FAT
  19. GOTO EXIT

  20. :ERR1
  21. ECHO 您的 %TestD% 盘分区格式无法识别
  22. GOTO EXIT

  23. :EXIT
  24. ECHO.
  25. ECHO 请按任意键退出 。。。
  26. PAUSE >NUL
复制代码

[ 本帖最后由 老毛桃 于 2006-9-5 10:51 AM 编辑 ]
作者: strongchen    时间: 2006-9-5 10:26
老毛桃真是批处理高手。。这个贴子收藏
作者: 老毛桃    时间: 2006-9-5 10:40
原帖由 strongchen 于 2006-9-5 10:26 发表
老毛桃真是批处理高手。。这个贴子收藏

晕死,Magictek 和 GMY 还有 Willsort 才是真真的专家!
作者: strongchen    时间: 2006-9-5 10:46
奇怪,检测NTFS分区是没问题的,检测 Fat32 的分区却说“无法识别”

但是我用这个片段去可以检测到结果

CHKNTFS C:|FIND "FAT" >NUL
IF %Errorlevel%==0 (
echo You C drivers is Fat
) ELSE (
echo You C drivers is UNKONOW
)
)
作者: 老毛桃    时间: 2006-9-5 10:52
原帖由 strongchen 于 2006-9-5 10:46 发表
奇怪,检测NTFS分区是没问题的,检测 Fat32 的分区却说“无法识别”

但是我用这个片段去可以检测到结果

CHKNTFS C:|FIND "FAT" >NUL
IF %Errorlevel%==0 (
echo You C drivers is Fat
) EL ...

啊?是这样吗?我的机子上没有 FAT 分区,全是 NTFS,麻烦你帮我测试看看。在 FIND 后面加上 /I 试试行不行
作者: strongchen    时间: 2006-9-5 11:29
加了/I 还是无法显示
作者: 老毛桃    时间: 2006-9-5 12:47
原帖由 strongchen 于 2006-9-5 11:29 发表
加了/I 还是无法显示

晕,我知道原因了,%Errorlevel% 前面就用了一次,后面的 %Errorlevel% 的值永远是 1

试试下面的行不行
@ECHO OFF

SET TestD=D

CHKNTFS %TestD%:|FIND /I "NTFS" >NUL

IF %Errorlevel%==0 (
GOTO NTFS
) ELSE (
SET Errorlevel=0
CHKNTFS %TestD%:|FIND /I "FAT" >NUL
IF %Errorlevel%==0 (
GOTO FAT
) ELSE (
GOTO ERR1
)
)

:NTFS
ECHO 您的 %TestD% 盘分区格式为 NTFS
GOTO EXIT

:FAT
ECHO 您的 %TestD% 盘分区格式为 FAT
GOTO EXIT

:ERR1
ECHO 您的 %TestD% 盘分区格式无法识别
GOTO EXIT

:EXIT
ECHO.
ECHO 请按任意键退出 。。。
PAUSE >NUL
再不行,将 SET Errorlevel=0 修改成 SET /a Errorlevel=0
作者: wjgyz740526    时间: 2006-9-5 13:18
还是不能检测fat分区
作者: 老毛桃    时间: 2006-9-5 13:22
原帖由 wjgyz740526 于 2006-9-5 13:18 发表
还是不能检测fat分区

晕,我这里没有 FAT 分区,无法测试。
作者: namejm    时间: 2006-9-5 13:47
  虽然返回码0和1在一般情况下表示执行成功和失败,但是,在每个具体的命令中,返回码表示的含义有可能不太一样;在不知道每个具体命令的每个返回码的具体含义之前,用返回码来判断是容易犯错的。

  在我的机子上(XP下,每个分区为NTFS格式),使用以下代码可以探测到硬盘的分区为NTFS、FAT移动硬盘为FAT、光盘为RAW,不知道在FAT格式下chkntfs命令是否有效。

  1. @echo off
  2. for /f "tokens=1,2" %%i in ('chkntfs c:') do (
  3.     set var=%%j
  4.     goto type
  5. )
  6. goto :eof
  7. :type
  8. set var=%var:。=%
  9. echo 该分区的文件系统类型是 %var%
  10. pause
复制代码

[ 本帖最后由 namejm 于 2006-9-5 01:50 PM 编辑 ]
作者: 老毛桃    时间: 2006-9-5 13:57
原帖由 namejm 于 2006-9-5 13:47 发表
  虽然返回码0和1在一般情况下表示执行成功和失败,但是,在每个具体的命令中,返回码表示的含义有可能不太一样;在不知道每个具体命令的每个返回码的具体含义之前,用返回码来判断是容易犯错的。

  在我的 ...

嘿嘿,高手终于出招了。

还请大侠将你的给逐句解释一下,想学学,先谢了!
作者: strongchen    时间: 2006-9-5 14:18
用了老毛桃第二个cmd还是无法认识。。
作者: strongchen    时间: 2006-9-5 14:20
原帖由 namejm 于 2006-9-5 01:47 PM 发表
  虽然返回码0和1在一般情况下表示执行成功和失败,但是,在每个具体的命令中,返回码表示的含义有可能不太一样;在不知道每个具体命令的每个返回码的具体含义之前,用返回码来判断是容易犯错的。

  在我的 ...


这个不错,我使用没问题
作者: 老毛桃    时间: 2006-9-5 14:22
原帖由 strongchen 于 2006-9-5 14:18 发表
用了老毛桃第二个cmd还是无法认识。。

哈哈,我就这点三脚猫了。。。
作者: namejm    时间: 2006-9-5 14:40
原帖由 老毛桃 于 2006-9-5 01:57 PM 发表

嘿嘿,高手终于出招了。

还请大侠将你的给逐句解释一下,想学学,先谢了!


  大侠还称不上,老毛桃夸奖了,真正的专家应该是willsort和gmy这些人。

  这段代码主要用到了for语句提取指定字符串中某列字符串的功能,然后再对取到的字符串进行些去符号的操作。”tokens=1,2"表示按照空格或者制表符分隔由chkntfs c:这条命令得到的结果(该命令执行成功后会返回两行内容,都用空格分列),我们要取的字符串是NTFS、FAT或者RAW,它位于chkntfs c:这条命令执行结果的第一行第二列,用"tokens=1,2"后,第二个变量%%j就取到了NTFS。,因为结果带了句号,所以还要去掉句号。由于for对字符串是逐行进行解析,所以,当取到第一行的内容之后,不能让for循环继续执行下去,而要直接跳出来(否则%var%的值就是最后一行第二列的内容了),跳到type标签段,在type标签段中进行去句号的操作,set var=%var:。=%就表示把%var%中所有可能存在的句号设置为空值。

[ 本帖最后由 namejm 于 2006-9-5 02:43 PM 编辑 ]
作者: 老毛桃    时间: 2006-9-5 14:53
原帖由 namejm 于 2006-9-5 14:40 发表
  这段代码主要用到了for语句提取指定字符串中某列字符串的功能,然后再对取到的字符串进行些去符号的操作。”tokens=1,2"表示按照空格或者制表符分隔由chkntfs c:这条命令得到的结果(该命令执行成功后会返回两行内容,都用空格分列),我们要取的字符串是NTFS、FAT或者RAW,它位于chkntfs c:这条命令执行结果的第一行第二列,用"tokens=1,2"后,第二个变量%%j就取到了NTFS。,因为结果带了句号,所以还要去掉句号。由于for对字符串是逐行进行解析,所以,当取到第一行的内容之后,不能让for循环继续执行下去,而要直接跳出来(否则%var%的值就是最后一行第二列的内容了),跳到type标签段,在type标签段中进行去句号的操作,set var="var:。="就表示去掉%var%中所有可能存在的句号。

太感谢了,真得要好好学习一下了,此帖我收藏了,嘿嘿!
作者: bdfcy    时间: 2006-9-5 15:55
学习,收藏
作者: tmt2008    时间: 2006-9-8 15:09
CHKNTFS 只应用于2K—XP,DOS下要用CHKDSK,如果是NTFS的,还要加载NTFSPRO。




欢迎光临 无忧启动论坛 (http://bbs.wuyou.net./) Powered by Discuz! X3.3