Board logo

标题: [文本处理] [已解决]批处理从fsutil fsinfo drives得到想要的盘符字符串 [打印本页]

作者: jackerloo2009    时间: 2009-5-19 19:04     标题: [已解决]批处理从fsutil fsinfo drives得到想要的盘符字符串

  1. fsutil fsinfo drives
复制代码
执行后显示
  1. 驱动器: C:\ D:\ E:\
复制代码
如果从中得到以下结果呢
  1. C: D: E:
复制代码

[ 本帖最后由 jackerloo2009 于 2009-5-20 13:55 编辑 ]
作者: someone    时间: 2009-5-19 19:08

看for /?中关于/f的
作者: 小勇12    时间: 2009-5-19 19:15

@echo off
setlocal enabledelayedexpansion
for /f "delims=\" %%i in ('fsutil fsinfo drives^|find /v " "') do (
    set var=%%i
    set drive=!var:~-2!
    echo !drive!
)   

pause>nul
作者: jackerloo2009    时间: 2009-5-20 09:39     标题: 回复 3楼 的帖子

不知道为什么用你的不能满足我的要求,但仍感谢你提供find的思路,只好自己琢磨了个代码
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=\" %%i in ('fsutil fsinfo drives ^| find /v "\\"') do (
  4.     set var=%%i
  5.     set "drives=!drives!!!var:~-2!! "
  6. )
  7. echo !drives!   
  8. pause>nul
复制代码
另外还有个问题就是只能用find吗,findstr可不可以?网上关于find和findstr的解释仍然很模糊

[ 本帖最后由 jackerloo2009 于 2009-5-20 10:31 编辑 ]
作者: sniperhgy    时间: 2009-5-20 11:07

試了一下,樓上兩位的代碼都只能得到第一個分區阿,還有爲何要'fsutil fsinfo drives ^| find /v "\\"'或者'fsutil fsinfo drives^|find /v " "',這樣做,感覺沒有必要……
我覺得關鍵問題是,不知道到底可能有幾個驅動器,要是知道,就很簡單了,可是樓主的想法應該是可以自動識別出來,我是弄不出來了,等高手來解決一下

[ 本帖最后由 sniperhgy 于 2009-5-20 11:19 编辑 ]
作者: Batcher    时间: 2009-5-20 12:47     标题: 回复 4楼 的帖子

你自己试试不就知道findstr是否了么?
作者: Batcher    时间: 2009-5-20 12:48     标题: 回复 5楼 的帖子

“感觉没必要”?请亲自按照自己的想法来测试一下,看看结果跟感觉是否一致。
作者: sniperhgy    时间: 2009-5-20 12:54

原帖由 Batcher 于 2009-5-20 12:48 发表
“感觉没必要”?请亲自按照自己的想法来测试一下,看看结果跟感觉是否一致。

'fsutil fsinfo drives ^| find /v "\\"' :這句話,是説用fsutil fsinfo drives得到的結果中,過濾掉包含\\的,樓主得到的結果中,哪裏有\\?
'fsutil fsinfo drives ^| find /v " "'  :同上,就是過濾包含" " 的,那麽看樓主得到的結果。裏面包含空格,一下子不就被過濾了?
作者: Batcher    时间: 2009-5-20 13:08     标题: 回复 8楼 的帖子

你按照自己的思路写段代码出来给大家看看结果?
作者: sniperhgy    时间: 2009-5-20 13:25

不好意思,我對於如何從不能確定特徵体個數的文本裏取得我想要的東西這個技巧還沒有掌握
樓主得到的結果是“驱动器: C:\ D:\ E:\ ”
我得到的結果是“ドライブ: C:\ D:\ E:\ F:\ H:\ I:\”
這裡面“\”的個數是不一樣的,對於這個問題,我還不能解決
作者: jackerloo2009    时间: 2009-5-20 13:58     标题: 回复 6楼 的帖子

不是我不测试,是没有完全理解find和findstr,所以无从测试
作者: jackerloo2009    时间: 2009-5-20 14:03     标题: 回复 8楼 的帖子

因为里面牵涉到了搜索一个特殊字符 \ 所以用了两个,换个方式应该也可以的
  1. 'fsutil fsinfo drives ^| find /v "^\"'
复制代码

作者: jackerloo2009    时间: 2009-5-20 14:10     标题: 回复 10楼 的帖子

这个跟 \  多少没有关系吧?
作者: sniperhgy    时间: 2009-5-20 14:10

原帖由 jackerloo2009 于 2009-5-20 14:03 发表
因为里面牵涉到了搜索一个特殊字符 \ 所以用了两个,换个方式应该也可以的'fsutil fsinfo drives ^| find /v "^\"'


哦,這個自不必説,我的意思是
  1. fsutil fsinfo drives ^| find /v "^\"
复制代码


  1. fsutil fsinfo drives
复制代码

在結果上有區別沒有?貌似沒有區別阿
作者: sniperhgy    时间: 2009-5-20 14:38

剛才又想了一下,寫出了一個
  1. for /f "tokens=1,* delims= " %%a in ('fsutil fsinfo drives') do set var=%%b
  2. set "var=%var:\=%"
  3. echo %var%
复制代码

這個可以滿足樓主的需求
作者: jackerloo2009    时间: 2009-5-20 14:40     标题: 回复 14楼 的帖子

横列和竖列的区别,你那不能测试吗?
作者: sniperhgy    时间: 2009-5-20 14:49

橫列竪列?
看一下我的運行結果
[attach]1392[/attach]

[ 本帖最后由 Batcher 于 2009-5-22 22:13 编辑 ]
作者: jackerloo2009    时间: 2009-5-20 14:49     标题: 这个命令挺奇怪的哦

如果想把冒号也去掉,结果要求C D E 该怎么处理?
作者: jackerloo2009    时间: 2009-5-20 14:51     标题: 回复 17楼 的帖子

呵呵,中日不和。。。你加我QQ吧282944445,咱俩仔细看看是不是你我不同

应该说日本用这个¥符号挺好的,不会象\这样在批中出现特殊符号要转义,你后面只用一个试试find /v "¥"

[ 本帖最后由 jackerloo2009 于 2009-5-20 14:54 编辑 ]
作者: sniperhgy    时间: 2009-5-20 14:51

原帖由 jackerloo2009 于 2009-5-20 14:49 发表
如果想把冒号也去掉,结果要求C D E 该怎么处理?

那也很簡單
  1. for /f "tokens=1,* delims= " %%a in ('fsutil fsinfo drives') do set var=%%b
  2. set "var=%var:\=%"
  3. set "var=%var::=%"
  4. echo %var%
复制代码

作者: jackerloo2009    时间: 2009-5-20 14:56     标题: 回复 20楼 的帖子

你没明白我说的意思,可能是中日对于老美电脑细节的翻译理解出现了两个版本
作者: jackerloo2009    时间: 2009-5-20 15:15     标题: 特别说明

我俩一个是中国xp,一个是日本vista
确实是不一样,难怪分歧这么大,我俩测试的结果不同
可是我感觉xp这个的存在问题,哪位高人有空研究一下我发的这个问题!

[ 本帖最后由 jackerloo2009 于 2009-5-20 17:52 编辑 ]
作者: fyb198351    时间: 2009-5-22 04:03

@echo off
for /f "delims=\:" %%i in ('fsutil fsinfo drives ^| find /v " "') do set/p=%%i <nul
pause>nul

看看这个行不
作者: jackerloo2009    时间: 2009-5-22 18:48     标题: 回复 23楼 的帖子

你这个我运行只出来D E没有C
反正个人感觉这个命令的例子挺怪的
作者: fyb198351    时间: 2009-5-22 23:27

不好意思~~~
上面那个第一个分区没显示出来~~~我自己的这台电脑有个A:\~~~
@echo off
setlocal enabledelayedexpansion
for /f "delims=" %%i in ('fsutil fsinfo drives^|find /v ""') do (
set dr=%%i
set sdr=!dr:~-3,1!
echo !sdr!
)   

pause>nul


这个和你那个差不多..为了要把第一个分区显出来想了半天才想到要用延迟变量~~
作者: jackerloo2009    时间: 2009-5-27 18:44     标题: 回复 25楼 的帖子

感谢楼上慷慨分享!辛苦了
作者: 随风    时间: 2009-5-27 18:50

获取所有盘符。
:
  1. @echo off
  2. for /f "delims=驱动器:\ " %%a in ('fsutil fsinfo drives^|more') do echo %%a:
  3. pause
复制代码

作者: jackerloo2009    时间: 2009-6-17 13:37     标题: 回复 27楼 的帖子

哎!还是老大牛。。。。




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2