无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 7155|回复: 20
打印 上一主题 下一主题

[求助] 求助,下面这个批处理怎么改?

[复制链接]
跳转到指定楼层
1#
发表于 2020-7-15 21:38:09 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
求助,下面这个批处理怎么改?

1. 盘符,卷名,文件系统名,显示在同1行。
2. 不显示标题 "卷名,文件系统名" 效果如下:

c: os NTFS
d: 程序 FAT32
e: bak NTFS
...
  1. @echo off&color 1f
  2. for %%a in (c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z) do (
  3.   if exist %%a: (
  4.      echo %%a:
  5.      fsutil fsinfo volumeinfo %%a:\|find "卷名"
  6.      fsutil fsinfo volumeinfo %%a:\|find "文件系统名"
  7.   )
  8. )
  9. echo.&echo 按任意键退出...&pause >nul
复制代码



2#
发表于 2020-7-15 23:10:27 | 只看该作者
@echo off&color 1f&setlocal EnableDelayedExpansion
for %%a in (c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z) do (
  if exist %%a: (
     FOR /F "tokens=3 delims= " %%i in ('fsutil fsinfo volumeinfo %%a:\^|find "磁碟區名"') do set MyVol=%%i
     FOR /F "tokens=3 delims= " %%i in ('fsutil fsinfo volumeinfo %%a:\^|find "檔案系統名"') do set MyFS=%%i
     echo %%a: !MyVol! !MyFS!
  )
)
echo.&echo 按任意鍵結束...&pause >nul



评分

参与人数 2无忧币 +8 收起 理由
807979023 + 5 赞一个!
holley2008 + 3 赞一个!

查看全部评分

回复

使用道具 举报

3#
 楼主| 发表于 2020-7-16 10:31:01 | 只看该作者
谢谢指点,在win10和win7中运行成功,在xp中显示不正常。

win7.jpg (38.01 KB, 下载次数: 147)

win7.jpg

winxp.jpg (39.23 KB, 下载次数: 140)

winxp.jpg

点评

虽然 4F foxfirefox 大牛给出了修改, 但我还是不解, 同样的批处理, 理论上应会得到相同的结果. 好奇心研究了一下原因为何 ? 发现了是 MS 真是太牛逼了, 在 Windows XP 会多显示一个 0xD 字符, 而 0xD 字符  详情 回复 发表于 2020-7-17 02:53
回复

使用道具 举报

4#
发表于 2020-7-16 13:04:29 | 只看该作者
xp下改为:
@echo off&color 1f&setlocal EnableDelayedExpansion
for %%a in (c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z) do (
  if exist %%a: (
    FOR /F "tokens=3 delims= " %%i in ('fsutil fsinfo volumeinfo %%a:\^|find "卷名"') do set MyVol=%%i
    FOR /F "tokens=3 delims= " %%i in ('fsutil fsinfo volumeinfo %%a:\^|find "文件系统名"') do set MyFS=%%i
    echo.          !MyVol! %%a: !MyFS!
  )
)
echo.&echo 按任意鍵結束...&pause >nul

评分

参与人数 1无忧币 +5 收起 理由
807979023 + 5 赞一个!

查看全部评分

回复

使用道具 举报

5#
发表于 2020-7-17 02:53:27 | 只看该作者
807979023 发表于 2020-7-16 10:31
谢谢指点,在win10和win7中运行成功,在xp中显示不正常。

虽然 4F foxfirefox 大牛给出了修改,
但我还是不解,
同样的批处理,
理论上应会得到相同的结果.

好奇心研究了一下原因为何 ?
发现了是 MS 真是太牛逼了,
在 Windows XP 会多显示一个 0xD 字符,
而 0xD 字符可是 RETURN,
导致发生奇怪的结果,
MS 你累了吗 ?

所以改法就是,
把它的结果去掉一个字符.
set MyVol=!MyVol:~0,-1!

@echo off&color 1f&setlocal EnableDelayedExpansion
for %%a in (c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z) do (
  if exist %%a: (
     FOR /F "tokens=3 delims= " %%i in ('fsutil fsinfo volumeinfo %%a:\^|find "磁碟区名"') do set MyVol=%%i&set MyVol=!MyVol:~0,-1!
     FOR /F "tokens=3 delims= " %%i in ('fsutil fsinfo volumeinfo %%a:\^|find "档案系统名"') do set MyFS=%%i&set MyFS=!MyFS:~0,-1!
     echo %%a: !MyVol! !MyFS!
  )
)
echo.&echo 按任意键结束...&pause >nul



点评

学习知识了!去掉一个字符后win7显示又不正常了。 为了少点代码,改成以下内容。 @echo off&color 1f&setlocal EnableDelayedExpansion for /f "tokens=1* delims=[" %%a in ('ver') do set b=%%b set b=%b:*  详情 回复 发表于 2020-7-17 11:30
回复

使用道具 举报

6#
 楼主| 发表于 2020-7-17 11:30:39 | 只看该作者
plusv 发表于 2020-7-17 02:53
虽然 4F foxfirefox 大牛给出了修改,
但我还是不解,
同样的批处理,

学习知识了!去掉一个字符后win7显示又不正常了。
为了少点代码,改成以下内容。

@echo off&color 1f&setlocal EnableDelayedExpansion
for /f "tokens=1* delims=[" %%a in ('ver') do set b=%%b
set b=%b:* =%
set b=%b:~0,3%
set c=%b:~0,2%
for %%a in (c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z) do (
  if exist %%a: (
    FOR /F "tokens=3 delims= " %%i in ('fsutil fsinfo volumeinfo %%a:\^|find "卷名"') do set MyVol=%%i
    FOR /F "tokens=3 delims= " %%i in ('fsutil fsinfo volumeinfo %%a:\^|find "文件系统名"') do set MyFS=%%i
    if "%c%" == "5." (
      echo.          !MyFS! %%a: !MyVol!
    ) else (
      echo %%a: !MyVol! !MyFS!
    )
  )
)
echo.&echo 按任意键退出...&pause >nul


回复

使用道具 举报

7#
发表于 2020-7-17 11:48:09 | 只看该作者
本帖最后由 foxfirefox 于 2020-7-17 11:49 编辑

请将 %%a:\ 后面的\删除 (WIN10 X64 测试)
@echo off&color 1f&setlocal EnableDelayedExpansion
for /f "tokens=1* delims=[" %%a in ('ver') do set b=%%b
set b=%b:* =%
set b=%b:~0,3%
set c=%b:~0,2%
for %%a in (c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z) do (
  if exist %%a: (
    FOR /F "tokens=3 delims= " %%i in ('fsutil fsinfo volumeinfo %%a:^|find "卷名"') do set MyVol=%%i
    FOR /F "tokens=3 delims= " %%i in ('fsutil fsinfo volumeinfo %%a:^|find "文件系统名"') do set MyFS=%%i
    if "%c%" == "5." (
      echo.          !MyFS! %%a: !MyVol!
    ) else (
      echo %%a: !MyVol! !MyFS!
    )
  )
)
echo.&echo 按任意键退出...&pause >nul
回复

使用道具 举报

8#
 楼主| 发表于 2020-7-17 12:43:33 | 只看该作者
本帖最后由 807979023 于 2020-7-18 14:04 编辑
foxfirefox 发表于 2020-7-17 11:48
请将 %%a:\ 后面的\删除 (WIN10 X64 测试)
@echo off&color 1f&setlocal EnableDelayedExpansion
for /f ...

谢谢,已去掉%%a:\ 后面的\
xp  win7x32  win10x64 都显示正常。

补充: 还是加上了%%a:后面的\ ,  xp  win7x32  win10x64 都显示正常。
如果去掉这个\ ,xp中,本批处理所在分区卷标显示不正常。
回复

使用道具 举报

9#
发表于 2020-7-17 16:23:21 | 只看该作者
本帖最后由 dos时代菜鸟 于 2020-7-17 16:32 编辑

三个 for 循环 外加两个 if  可否搞定?
不用 find 也不用 设置  C d e f g 。。。。 矩阵式排查。也不用 判断 系统版本。
只在 win10 下测试了。算是 能用吧。



  1. @echo off
  2. setlocal ENABLEDELAYEDEXPANSION
  3. for /f "tokens=1*" %%c in ('fsutil fsinfo drives') do (
  4.         for %%e in (%%d) do (
  5.                 set drv_info=%%~de
  6.                 for /f "tokens=1,2 delims=: " %%f in ('fsutil fsinfo volumeinfo %%~de') do (
  7.                         if %%f==卷名 (set drv_info=!drv_info! %%g)
  8.                         if %%f==文件系统名 (set drv_info=!drv_info! %%g)
  9.                 )
  10.                 echo !drv_info!
  11.         )
  12. )
  13. pause
复制代码

点评

谢谢,代码很简洁,10和7显示正常,xp不行。  详情 回复 发表于 2020-7-17 19:22
回复

使用道具 举报

10#
 楼主| 发表于 2020-7-17 19:22:42 | 只看该作者
dos时代菜鸟 发表于 2020-7-17 16:23
三个 for 循环 外加两个 if  可否搞定?
不用 find 也不用 设置  C d e f g 。。。。 矩阵式排查。也不用 ...

谢谢,代码很简洁,10和7显示正常,xp不行。

点评

没有 xp 环境,不知差哪  详情 回复 发表于 2020-7-17 22:45
回复

使用道具 举报

11#
发表于 2020-7-17 22:45:57 来自手机 | 只看该作者
807979023 发表于 2020-7-17 19:22
谢谢,代码很简洁,10和7显示正常,xp不行。

没有 xp 环境,不知差哪
回复

使用道具 举报

12#
发表于 2020-7-17 22:59:43 | 只看该作者
我也来凑个热闹

  1. @echo off

  2. for /f "tokens=1* " %%a in ('fsutil fsinfo drives') do (
  3.     for %%c in (%%b) do (
  4.         for /f "tokens=1,2 delims=: " %%d in ('fsutil fsinfo volumeinfo %%~dc') do if "%%d"=="文件系统名" (
  5.             for /f "tokens=1,3*" %%f in ('vol %%~dc') do if "%%f"=="驱动器" echo;%%~dc %%e  %%h
  6.         )
  7.     )
  8. )
  9. echo;------------------------------------------------
  10. setlocal enabledelayedexpansion
  11. for %%a in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (
  12.     cd %%a:>nul 2>&1
  13.     if !errorlevel!==0 for /f "tokens=1,2 delims=: " %%b in ('fsutil fsinfo volumeinfo %%a:') do if "%%b"=="文件系统名" (
  14.             for /f "tokens=1,3*" %%d in ('vol %%a:') do if "%%d"=="驱动器" echo;%%a: %%c  %%f
  15.         )
  16.     )
  17. )
  18. echo;------------------------------------------------
  19. wmic volume get driveletter,filesystem,label|find ":"
  20. pause
复制代码


还是WMIC来的简单,一句!

点评

谢谢回复 方法1 7x32 10x64 显示正常,xp 显示错误。 方法2 7x32 10x64 显示正常,xp 显示错误。 方法3 7x32 显示正常,xp 10x64 显示错误。  详情 回复 发表于 2020-7-18 14:09
回复

使用道具 举报

13#
发表于 2020-7-17 23:00:21 | 只看该作者
仅测试Win8.1,XP这种古董没有。
回复

使用道具 举报

14#
发表于 2020-7-18 09:51:45 来自手机 | 只看该作者
对于 输出行结尾 带回车字符的情况,用 for/f  +echo字符串,的方式二次获取之,估计能解决。

点评

xp下运行结果  详情 回复 发表于 2020-7-18 14:07
回复

使用道具 举报

15#
 楼主| 发表于 2020-7-18 14:07:37 | 只看该作者
dos时代菜鸟 发表于 2020-7-18 09:51
对于 输出行结尾 带回车字符的情况,用 for/f  +echo字符串,的方式二次获取之,估计能解决。

xp下运行结果

xp.jpg (34.69 KB, 下载次数: 132)

xp.jpg
回复

使用道具 举报

16#
 楼主| 发表于 2020-7-18 14:09:13 | 只看该作者
nttwqz 发表于 2020-7-17 22:59
我也来凑个热闹

谢谢回复
方法1  7x32 10x64 显示正常,xp 显示错误。
方法2  7x32 10x64 显示正常,xp 显示错误。
方法3  7x32 显示正常,xp 10x64 显示错误。


点评

无论那种方法,在Win10x64上面都正常。 [attachimg]461690[/attachimg] 又回想起来,最初Victor888编写的盘符整理为何要自带一个fsutil.exe了,因为这个程序有太多的坑! xp上fsutil fsinfo volumeinfo C:\结果  详情 回复 发表于 2020-7-18 18:02
回复

使用道具 举报

17#
发表于 2020-7-18 17:40:37 | 只看该作者
  1.     @echo off
  2.     setlocal ENABLEDELAYEDEXPANSION
  3.     for %%e in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (
  4.     if exist %%e: (
  5.             SET DRV_INFO=
  6.             for /f "tokens=1,2 delims=: " %%f in ('fsutil fsinfo volumeinfo %%e:\') do (
  7.                   if %%f==卷名 ( for /f  %%h in ('echo %%g') do ( set drv_info=%%e: !drv_info! %%h))
  8.                   if %%f==文件系统名 (for /f  %%h in ('echo %%g') do (ECHO !drv_info! %%h))
  9.             )
  10.     )
  11.     )
  12.     pause
复制代码
就这几句话,xp win10 都通过了



点评

然而,我测试的是你这XP、Win10都不行 fsutil的坑太多,我们还是建议楼主用坑少一点的diskpart吧,哈哈哈哈~ [attachimg]461706[/attachimg]  详情 回复 发表于 2020-7-18 18:17
回复

使用道具 举报

18#
发表于 2020-7-18 18:02:05 | 只看该作者
本帖最后由 nttwqz 于 2020-7-18 18:03 编辑
807979023 发表于 2020-7-18 14:09
谢谢回复
方法1  7x32 10x64 显示正常,xp 显示错误。
方法2  7x32 10x64 显示正常,xp 显示错误。

无论那种方法,在Win10x64上面都正常。


又回想起来,最初Victor888编写的盘符整理为何要自带一个fsutil.exe了,因为这个程序有太多的坑!
xp上fsutil fsinfo volumeinfo C:\结果和Win7以后系统不同虽然看似一样,到了10这句命令又错了,又不支持最后的\了,而Win8.1带不带都正常,XP不带不正常,这该让人说什么好,个人认为XP的错了,\不该有,还是Win8.1好,都兼容,也没有那么积极的推广PowerShell,右键默认CMD不像10还要改注册表,不想学PS。

下面代码在XP、Win8.1x64、Win10x64上测试通过。
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=2 delims=[" %%Q in ('ver') do for /f "tokens=2,3 delims=. " %%R in ("%%Q") do set ver=%%R%%S
  4. if %ver%==51 set "fix=\"
  5. for %%a in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (
  6.     cd %%a:>nul 2>&1
  7.     if !errorlevel!==0 (
  8.         for /f "tokens=1,2*" %%d in ('fsutil fsinfo volumeinfo %%a:%fix%') do (
  9.             for /f "tokens=1,2*" %%i in ("%%d %%f") do (
  10.                 if "%%i"=="文件系统名" set "vara=%%j"
  11.                 if "%%i"=="卷名" set "varb=%%j"
  12.             )
  13.         )
  14.         echo %%a: !vara!   !varb!
  15.     )
  16. )
  17. echo;------------------------------------------------
  18. echo list vol|diskpart|findstr /i "卷 ---"
  19. pause
复制代码


XP上个人测试前面一堆代码还没有最后一句echo list vol|diskpart|findstr /i "卷 ---"执行速度快

评分

参与人数 1无忧币 +5 收起 理由
807979023 + 5 赞一个!

查看全部评分

回复

使用道具 举报

19#
发表于 2020-7-18 18:17:08 | 只看该作者
dos时代菜鸟 发表于 2020-7-18 17:40
就这几句话,xp win10 都通过了

然而,我测试的是你这XP、Win10都不行

fsutil的坑太多,我们还是建议楼主用坑少一点的diskpart吧,哈哈哈哈~

点评

可能是 有的卷 没有卷标 导致的,  详情 回复 发表于 2020-7-18 18:42
回复

使用道具 举报

20#
发表于 2020-7-18 18:42:50 | 只看该作者
nttwqz 发表于 2020-7-18 18:17
然而,我测试的是你这XP、Win10都不行

fsutil的坑太多,我们还是建议楼主用坑少一点的diskpa ...

可能是 有的卷 没有卷标 导致的,
回复

使用道具 举报

21#
发表于 2020-7-18 18:48:56 | 只看该作者
本帖最后由 dos时代菜鸟 于 2020-7-18 20:37 编辑
  1.     @echo off
  2.     setlocal ENABLEDELAYEDEXPANSION
  3.     for %%e in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (
  4.     if exist %%e: (
  5.              SET DRV_INFO=
  6.                      for /f "tokens=1,2 delims=: " %%f in ('fsutil fsinfo volumeinfo %%e:\') do (
  7.                             if %%f==卷名 ( for /f "delims=" %%h in ('echo %%e: %%g') do (
  8.                               set drv_info=%%h____________
  9.                               set drv_info=!drv_info:~0,15!
  10.                             ))
  11.                             if %%f==文件系统名 (for /f  %%h in ('echo %%g') do (ECHO !drv_info! %%h))
  12.                     )
  13.     )
  14.                     
  15.     )
  16.     pause
复制代码
这回 XP  win10 都应该可以了。


评分

参与人数 1无忧币 +5 收起 理由
807979023 + 5 赞一个!

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-11-16 06:06

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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