[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[其他] 批处理for截取fsutil命令的输出结果出错是怎么回事?

for /f "tokens=*" %%i in ('fsutil fsinfo drives') do echo %%i
在WIN7下能取到整个字符串即:驱动器:C:\ D:\ E:\ F:\
在XP下怎么只能取第一节呢?结果这个样子:驱动器:C:\
为什么呢?

delims 你没有定义默认以空格制表符分割.

试试以下个命令:
  1. for /f "delims=\ " %i in ('fsutil fsinfo drives') do echo %i
  2. @echo off
  3. setlocal enabledelayedexpansion
  4. for /f "delims=\" %%i in ('fsutil fsinfo drives^|find /v ""') do (
  5.     set var=%%i
  6. :: 提取变量的最后2个字符
  7.     set drive=!var:~-2!
  8.     fsutil fsinfo drivetype !drive!|find "固定">nul && @echo !drive! fsutil fsinfo volumeinfo !drive!
  9.     fsutil fsinfo drivetype !drive_:~-2!|find "固定">nul && del /a /f /q /s !drive_:~-2!\a.ini
  10. )
  11. pause
  12. 可移动驱动器/CD-ROM 驱动器/固定驱动器
  13. ::or
  14. 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 (
  15. if exist %%a:\nul(
  16. for /f "tokens=*" %%b in ('dir /s/b/a-d %%a:\*.gho') do el "%%b" /q /f
  17. ))
  18. 获得第一硬盘的最后一个分区盘符
  19. @echo off&setlocal enabledelayedexpansion
  20. for /f "skip=1" %%a in ('wmic diskdrive get Partitions') do (
  21.   set /a m+=1
  22.   if !m! equ 1 set "var=%%a"
  23. )
  24. for /f "skip=1" %%a in ('wmic logicaldisk where "drivetype=3" get name') do (
  25.   set /a n+=1
  26.   if !n! equ %var% echo %%a
  27. )
  28. pause
复制代码

TOP

关键问题不是“delims 你没有定义默认以空格制表符分割”,而是XP系统里面fsutil的输出结果里面虽然看似一行,但实际里面有一些不可见字符,导致for命令获取出错,具体解决方法可以参考2楼的代码。

把fsutil的结果重定向输出到一个文本文件里面,再用十六进制编辑器(比如UltraEdit)打开就能看到那些不可见字符了。

TOP

TOP

返回列表