标题: [文本处理] 【已解决】批处理如何把文本结果竖排变横排? [打印本页]
作者: freesoft00 时间: 2015-3-21 21:34 标题: 【已解决】批处理如何把文本结果竖排变横排?
本帖最后由 freesoft00 于 2015-3-23 16:05 编辑
mountvol|find ":\"
执行的结果是复制代码
如何让这些结果文本横排显示,在一行显示,再者,如何去除后面的:\只显示盘符
如何把结果作为下一步执行的变量,类似下面(下面的批处理不正确,我只是表达意思)
for %%a in (mountvol|find ":\") do (
echo %%a
)
作者: bailong360 时间: 2015-3-21 21:44
本帖最后由 bailong360 于 2015-3-21 22:23 编辑
- @Echo Off
- For /F "Delims=: " %%i in ('mountvol^|find ":\"') Do If Not "%%i:"=="%~d0" Set /P =%%i <nul
- Echo;
- For /F "Delims=: " %%i in ('mountvol^|find ":\"') Do If Not "%%i:"=="%~d0" Echo %%i
复制代码
已修改
作者: freesoft00 时间: 2015-3-21 21:45
另外一个要求是,列出来当前的盘符后,如何用命令过滤掉当前的盘符,盘符是从a到z的吧,过滤掉当前有的,然后取第一个当前系统中没有的盘符作为变量显示出来。
作者: freesoft00 时间: 2015-3-21 22:03
回复 2# bailong360
第一个是横排显示的,是否可以去掉:\
作者: pcl_test 时间: 2015-3-21 22:04
回复 3# freesoft00 - @echo off
- setlocal enabledelayedexpansion
- set "str=CDEFGHIJKLMNOPQRSTUVWXYZ"
- for /f "tokens=1* delims=: " %%a in ('mountvol^|find ":\"') do set "s=!s!%%a "
- echo,!s!
- for %%i in (!s!) do set "str=!str:%%i=!"
- echo !str:~,1!
- pause
复制代码
作者: freesoft00 时间: 2015-3-21 22:14
ok了,谢谢各位的热心!
作者: freesoft00 时间: 2015-3-21 22:52
另外一个命令
fsutil fsinfo drives执行的解决是横排,复制代码
同样也是,把上面的结果作为变量参数传递到下面的命令执行,下面的命令比如是echo吧,上面的运行结果中有一个驱动器:是需要去掉的。
作者: freesoft00 时间: 2015-3-21 22:53
比如我要执行fsutil fsinfo drives列出来本地硬盘,然后把执行后的结果作为盘符变量
执行后面的格式化命令
format %str%
作者: pcl_test 时间: 2015-3-21 23:49
本帖最后由 pcl_test 于 2015-3-21 23:51 编辑
回复 9# freesoft00 - @echo off
- setlocal enabledelayedexpansion
- for /f "tokens=1*" %%a in ('fsutil fsinfo drives ^|find ":\"') do (
- for %%i in (%%b) do set a=%%i & echo format !a:~,2!
- )
- pause
复制代码
作者: freesoft00 时间: 2015-3-22 00:04
回复 10# pcl_test
thank you!
作者: freesoft00 时间: 2015-3-22 03:53
回复 10# pcl_test
再请教:- @echo off
- setlocal enabledelayedexpansion
- for /f "delims=\" %%i in ('fsutil fsinfo drives^|find /v ""') do (
- set var=%%i
- set drive=!var:~-2!
- fsutil fsinfo drivetype !drive!|find "驱动器">nul&& echo !drive!
-
- )
- pause
复制代码
这段在xp下面没有问题,而在win7下面只有一个盘符A(我的系统中有A盘)
作者: bailong360 时间: 2015-3-22 08:53
- @Echo Off
- For /F "Skip=1" %%i In ('Wmic LogicalDisk Where DriveType^="3" Get Caption') Do Echo Format %%i
复制代码
感觉Wmic在这个时候要好用一点
作者: freesoft00 时间: 2015-3-22 10:14
回复 13# bailong360
Format C:
Format D:
Format E:
Format
结果中多了一行后面没有盘符的format
另外,wmi在pe中有很多不支持,而其它的方法只要pe中有文件比较好实现
作者: bailong360 时间: 2015-3-22 11:02
回复 14# freesoft00
第一个问题只要加上2>nul就行了
不支持wmi这倒是没想到...
作者: pcl_test 时间: 2015-3-22 12:20
回复 12# freesoft00
你这个代码本身就只是列出一个盘符,有什么问题?
作者: freesoft00 时间: 2015-3-22 19:50
回复 16# pcl_test
这个只是获取一个盘符的批处理吗?那么请改一下获取全部的盘符,谢谢!横排和竖排分别显示。
但是这个我在xp下面运行是可以获取全部盘符的呀。
作者: pcl_test 时间: 2015-3-22 22:09
回复 17# freesoft00
10楼就是- @echo off
- setlocal enabledelayedexpansion
- for /f "tokens=1*" %%a in ('fsutil fsinfo drives ^|find ":\"') do (
- echo %%b
- for %%i in (%%b) do set a=%%i & echo format !a:~,2!
- )
- pause
复制代码
- @echo off
- setlocal enabledelayedexpansion
- for /f "tokens=1*" %%a in ('fsutil fsinfo drives ^|find ":\"') do (
- for %%i in (%%b) do set a=%%i & set "s=!s!!a:~,2! " & echo !a:~,2!
- )
- echo !s:~,-1!
- pause
复制代码
作者: apang 时间: 2015-3-22 22:26
fsutil fsinfo drives 在xp和win7显示结果不一样,以前有过很多次的讨论
作者: apang 时间: 2015-3-22 22:30
横排- @echo off & 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:\ (
- fsutil fsinfo drivetype %%a:|findstr /i "固定 Fixed" && set "v=!v! %%a:"
- )
- )>nul
- if defined v echo,%v:~1%
- pause
复制代码
竖排- @echo off
- 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:\ (
- fsutil fsinfo drivetype %%a:|findstr /i "固定 Fixed">nul && echo,%%a:
- )
- )
- pause
复制代码
作者: freesoft00 时间: 2015-3-23 06:13
回复 20# apang
哦,是这样呀,我主要是不想用c-z这样的形式都搜索一遍。而是'fsutil fsinfo drives 后迭代一下。c-z都搜索,在一些有读卡器的电脑,会出现驱动器没有准备好或者驱动器空的类似的错误提示。
作者: freesoft00 时间: 2015-3-23 06:16
回复 18# pcl_test
不是,你看我后面还用了一个
fsutil fsinfo drivetype
命令过滤盘符的类型,比如我想类出来U盘,或者本地硬盘,或者光驱,都可以过滤出来,而不是前面的命令所有盘符都出来了。
作者: pcl_test 时间: 2015-3-23 07:26
回复 22# freesoft00 - @echo off
- setlocal enabledelayedexpansion
- ver | find "5.1." >nul && goto aa ||goto bb
- :aa
- echo xp代码
- pause & exit
- :bb
- echo Win7/Win8/win10代码
- pause & exit
复制代码
作者: apang 时间: 2015-3-23 09:10
回复 21# freesoft00
横排- @echo off & setlocal enabledelayedexpansion
- for /f "delims=" %%a in ('fsutil fsinfo drives^|find /v ""') do (
- for %%b in (%%a) do (
- set "Drv=%%b"
- fsutil fsinfo drivetype !Drv:\=!|findstr /i "固定 Fixed">nul && set "v=!v! !Drv:\=!"
- )
- )
- if defined v echo,%v:~1%
- pause
复制代码
竖排- @echo off & setlocal enabledelayedexpansion
- for /f "delims=" %%a in ('fsutil fsinfo drives^|find /v ""') do (
- for %%b in (%%a) do (
- set "Drv=%%b"
- fsutil fsinfo drivetype !Drv:\=!|findstr /i "固定 Fixed">nul && echo,!Drv:\=!
- )
- )
- pause
复制代码
作者: freesoft00 时间: 2015-3-23 11:58
回复 23# pcl_test
我也想到了这个,但是我并不知道如何在win7下面让代码正确
作者: freesoft00 时间: 2015-3-23 11:58
回复 24# apang
这个在win7下面还是不行,还是显示一个盘符。包括上面那个c-z盘符那个也一样。
作者: freesoft00 时间: 2015-3-23 12:01
本帖最后由 freesoft00 于 2015-3-23 12:07 编辑
- setlocal enabledelayedexpansion
- for /f "delims=\" %%i in ('fsutil fsinfo drives^|find /v ""') do (
- set var=%%i
- set drive=!var:~-2!
- echo !drive!>>77.txt
- fsutil fsinfo drivetype !drive!|find "驱动器">nul&& echo !drive!
-
- )
- pause
复制代码
我把第一步输出到77.txt了,你们看一下结果:复制代码
- :next
- @echo off & setlocal enabledelayedexpansion
- for /f "delims=" %%a in ('fsutil fsinfo drives^|find /v ""') do (
- for %%b in (%%a) do (
- echo %%b>>55.txt
- fsutil fsinfo drivetype !Drv:\=!|findstr /i "固定 Fixed">nul && echo,!Drv:\=!
- )
- )
- pause
复制代码
我把第一步的结果输出到55.txt,其内容是:复制代码
这个最终的运行结果是:复制代码
作者: freesoft00 时间: 2015-3-23 12:05
55.txt文本在xp系统中没有看到和win7中有什么区别呀复制代码
xp系统中的结果
作者: freesoft00 时间: 2015-3-23 12:06
77.txt在xp中的结果和win7系统中不同:复制代码
xp中的结果
作者: pcl_test 时间: 2015-3-23 12:19
回复 25# freesoft00
win7的- @echo off
- setlocal enabledelayedexpansion
- for /f "tokens=1*" %%a in ('fsutil fsinfo drives ^|find ":\"') do (
- set s=
- for %%i in (%%b) do (
- set drive=%%i
- set drive=!drive:~,-1!
- fsutil fsinfo drivetype !drive! | find "移动">nul && (echo !drive! & set "s=!s!!drive! ")
- )
- echo !s:~,-1!
- )
- pause
复制代码
作者: freesoft00 时间: 2015-3-23 12:35
回复 30# pcl_test
ok,这次这个可以在win7下正常显示了。
作者: freesoft00 时间: 2015-3-23 12:35
回复 30# pcl_test
ok,这次这个可以在win7下正常显示了。
作者: apang 时间: 2015-3-23 13:57
回复 27# freesoft00
你可以在xp和win7中分别执行下面的命令:- fsutil fsinfo drives > d:\a.txt
复制代码
然后用16进制编辑器软件打开比较一下(xp下的a.txt含有00字符)
findstr /i "固定 Fixed" 的意思是筛选本地磁盘驱动器,win7只显示一个盘符C:,有可能你的A:和D:是软驱或光驱盘符
作者: freesoft00 时间: 2015-3-23 14:01
回复 33# apang
哦,我再测试一下。谢谢!
作者: freesoft00 时间: 2015-3-23 16:04
回复 33# apang
确实是你说的问题,我这里只有C盘是硬盘分区。谢谢了再次!
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |