无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 10778|回复: 20
打印 上一主题 下一主题

如何通过命令行判断分区格式

[复制链接]
跳转到指定楼层
1#
发表于 2006-9-3 22:01:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如何通过命令行判断分区格式?请问有谁知道吗?只要能区分fat和ntfs即可
2#
发表于 2006-9-4 12:30:42 | 只看该作者
  1. CHKNTFS C:
复制代码
回复

使用道具 举报

3#
 楼主| 发表于 2006-9-4 19:43:33 | 只看该作者
那么我想根据检测分区结果的不同执行不同的指令,该怎么写这个bat呢?

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

使用道具 举报

4#
发表于 2006-9-5 10:19:27 | 只看该作者
原帖由 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 编辑 ]
回复

使用道具 举报

5#
发表于 2006-9-5 10:26:52 | 只看该作者
老毛桃真是批处理高手。。这个贴子收藏
回复

使用道具 举报

6#
发表于 2006-9-5 10:40:40 | 只看该作者
原帖由 strongchen 于 2006-9-5 10:26 发表
老毛桃真是批处理高手。。这个贴子收藏

晕死,Magictek 和 GMY 还有 Willsort 才是真真的专家!
回复

使用道具 举报

7#
发表于 2006-9-5 10:46:18 | 只看该作者
奇怪,检测NTFS分区是没问题的,检测 Fat32 的分区却说“无法识别”

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

CHKNTFS C:|FIND "FAT" >NUL
IF %Errorlevel%==0 (
echo You C drivers is Fat
) ELSE (
echo You C drivers is UNKONOW
)
)
回复

使用道具 举报

8#
发表于 2006-9-5 10:52:09 | 只看该作者
原帖由 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 试试行不行
回复

使用道具 举报

9#
发表于 2006-9-5 11:29:24 | 只看该作者
加了/I 还是无法显示
回复

使用道具 举报

10#
发表于 2006-9-5 12:47:32 | 只看该作者
原帖由 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
回复

使用道具 举报

11#
 楼主| 发表于 2006-9-5 13:18:52 | 只看该作者
还是不能检测fat分区
回复

使用道具 举报

12#
发表于 2006-9-5 13:22:44 | 只看该作者
原帖由 wjgyz740526 于 2006-9-5 13:18 发表
还是不能检测fat分区

晕,我这里没有 FAT 分区,无法测试。
回复

使用道具 举报

13#
发表于 2006-9-5 13:47:33 | 只看该作者
  虽然返回码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 编辑 ]
回复

使用道具 举报

14#
发表于 2006-9-5 13:57:36 | 只看该作者
原帖由 namejm 于 2006-9-5 13:47 发表
  虽然返回码0和1在一般情况下表示执行成功和失败,但是,在每个具体的命令中,返回码表示的含义有可能不太一样;在不知道每个具体命令的每个返回码的具体含义之前,用返回码来判断是容易犯错的。

  在我的 ...

嘿嘿,高手终于出招了。

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

使用道具 举报

15#
发表于 2006-9-5 14:18:53 | 只看该作者
用了老毛桃第二个cmd还是无法认识。。
回复

使用道具 举报

16#
发表于 2006-9-5 14:20:35 | 只看该作者
原帖由 namejm 于 2006-9-5 01:47 PM 发表
  虽然返回码0和1在一般情况下表示执行成功和失败,但是,在每个具体的命令中,返回码表示的含义有可能不太一样;在不知道每个具体命令的每个返回码的具体含义之前,用返回码来判断是容易犯错的。

  在我的 ...


这个不错,我使用没问题
回复

使用道具 举报

17#
发表于 2006-9-5 14:22:01 | 只看该作者
原帖由 strongchen 于 2006-9-5 14:18 发表
用了老毛桃第二个cmd还是无法认识。。

哈哈,我就这点三脚猫了。。。
回复

使用道具 举报

18#
发表于 2006-9-5 14:40:33 | 只看该作者
原帖由 老毛桃 于 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 编辑 ]
回复

使用道具 举报

19#
发表于 2006-9-5 14:53: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%中所有可能存在的句号。

太感谢了,真得要好好学习一下了,此帖我收藏了,嘿嘿!
回复

使用道具 举报

20#
发表于 2006-9-5 15:55:50 | 只看该作者
学习,收藏
回复

使用道具 举报

21#
发表于 2006-9-8 15:09:42 | 只看该作者
CHKNTFS 只应用于2K—XP,DOS下要用CHKDSK,如果是NTFS的,还要加载NTFSPRO。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-5-6 11:48

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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