Board logo

标题: for取变量如何去头去尾 [打印本页]

作者: alex0007     时间: 2007-9-3 11:35    标题: for取变量如何去头去尾

近日,在朋友处使用u盘后。中了病毒(trojan .hider ve),此毒会把u盘中的目录设置成为隐藏以及系统性质(在gui界面下面还居然不能修改目录的系统性质,只能用attrib改),,也因此要用到for来取我要的变量

Z:\>for /f "tokens=4  " %a in ('dir /ah') do @echo %a
KINGSTON
个人资料
Security
200706
200707
Deepin5.6
Lisp
D-Program
E-Program
Setup
200708
Lisp教程
兴荣水利工程
200705
字节
可用字节

这个命令中间的变量是我想要的,,但是头(KINGSTON
)以及尾(字节     可用字节)却是我想要过滤掉的。。请问如何过滤头和尾??

下面列出dir /ah完整的输出结果,供参考。

Z:\>dir /ah
驱动器 Z 中的卷是 KINGSTON
卷的序列号是 7DC5-8721

Z:\ 的目录

2007-03-14  15:47    <DIR>          个人资料
2007-06-05  17:10    <DIR>          Security
2007-06-11  21:02    <DIR>          200706
2007-06-17  22:49    <DIR>          200707
2007-06-26  04:49    <DIR>          Deepin5.6
2007-07-06  16:43    <DIR>          Lisp
2007-06-23  00:49    <DIR>          D-Program Files
2007-07-07  10:05    <DIR>          E-Program Files
2007-07-24  00:50    <DIR>          Setup
2007-08-06  18:03    <DIR>          200708
2007-08-13  17:14    <DIR>          Lisp教程
2007-08-29  01:10    <DIR>          兴荣水利工程
2007-08-30  22:28    <DIR>          200705
               0 个文件              0 字节
              13 个目录    326,778,880 可用字节
作者: wudixin96     时间: 2007-9-3 11:48
用dir /ah /b提取
作者: alex0007     时间: 2007-9-3 12:05
for /f "skip=5 tokens=2  delims=>" %a in (' dir /ah') do @echo %a
经过学习,,使用上述语句,基本搞电,,但是又有一个新问题。就是当我用:

for /f "skip=5 tokens=2  delims=>" %a in (' dir /ah') do @attrib %a -s -h时提示:

Z:\>for /f "skip=5 tokens=2  delims=>" %a in (' dir /ah') do @attrib %a -s -h
参数格式不正确 -
参数格式不正确 -

我再试:
Z:\>attrib D-Program Files -s -h
参数格式不正确 -

然后再来:
Z:\>attrib "D-Program Files" -s -h                                         (成功了!!!)

原因就在于对于长文件名必须用""括起来!!于是我再试:
Z:\>for /f "skip=5 tokens=2  delims=>" %a in (' dir /ah') do @attrib "%a" -s -h
找不到文件 -           D-Program Files
找不到文件 -           E-Program Files

问题出来了,,如何给for出来的变量添加""呢??
作者: alex0007     时间: 2007-9-3 12:11


  Quote:
Originally posted by wudixin96 at 2007-9-3 11:48 AM:
用dir /ah /b提取

谢谢兄弟指教。。但是你的语句对于有长文件名的情况不妙,,请看:

Z:\>dir /ah /b
E-Program Files

Z:\>for /f %a in (' dir /ah /b') do @echo %a
E-Program
作者: wudixin96     时间: 2007-9-3 12:17
呵呵

for /f "delims=" %a in (' dir /ah /b') do @echo %a
作者: wudixin96     时间: 2007-9-3 12:19
看楼主也是深度系统爱好者嘛
作者: alex0007     时间: 2007-9-3 15:49


  Quote:
Originally posted by wudixin96 at 2007-9-3 12:19 PM:
看楼主也是深度系统爱好者嘛

这你也能看得出来??强!!:o

忘记自己的u盘上有一个deepin5.6文件夹出卖了自己。。:D

[ Last edited by alex0007 on 2007-9-3 at 04:01 PM ]
作者: alex0007     时间: 2007-9-3 15:53


  Quote:
Originally posted by wudixin96 at 2007-9-3 12:17 PM:
呵呵

for /f "delims=" %a in (' dir /ah /b') do @echo %a

这句的确可以哦。。兄弟能解析一下此句与
for /f  %a in (' dir /ah /b') do @echo %a
为何产生此区别吗??
作者: wudixin96     时间: 2007-9-3 16:08
取消的默认的空格和跳格分隔符
作者: Climbing     时间: 2007-9-4 08:48
for /f "tokens=*" %a in ('dir /ad/b') do attrib -s -r -h "%a"