中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-06-24 01:02
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已解决]如何提取文本第一行作为新建文件夹的名字 查看 3,950 回复 21
16 发表于 2007-12-25 14:34 ·  中国 上海 移动
新手上路
积分 18
发帖 8
注册 2006-12-07 01:26
19年会员
UID 72769
性别 男
状态 离线
Originally posted by zh159 at 2007-12-25 02:03 PM:
FINDSTR放到for里面
FOR /F "eol=; tokens=7 delims= " %%i in ('FINDSTR /i %1 log.txt') do Echo %%i



这样会把log.txt 所有含 %1 的文本行找出来。我只要第一个含有%1 行就可以了。找了一下findstr和for的参数都没法控制只找一行。所以用了goto 跳出循环。

现在用这个取代:
for /f "tokens=7 delims= " %%i in ('findstr /n %1 log.txt^|findstr /b "1:"') do echo %%i >> temp03.txt

[ Last edited by jinthree on 2007-12-25 at 03:14 PM ]
17 如何提取文本文件建立多个文件夹 发表于 2008-11-14 03:55 ·  中国 广东 阳江 电信
新手上路
积分 11
发帖 7
注册 2008-11-14 03:27
17年会员
UID 130906
性别 男
状态 离线
如何提取文本文件里的每一行,作为名字来建立多个文件夹?
18 发表于 2008-11-14 16:39 ·  中国 江苏 苏州 电信
新手上路
积分 18
发帖 20
注册 2008-11-05 15:36
17年会员
UID 130077
性别 男
状态 离线
set/p file=<a.txt
md %file%
能具体解释一下嘛,为什么有逗号会忽略逗号之前的呢,有空格还会以空格为界建2格文件夹呢
19 发表于 2008-11-14 17:56 ·  中国 江西 赣州 电信
银牌会员
★★★★
积分 2,025
发帖 1,122
注册 2007-09-05 20:15
18年会员
UID 96653
性别 男
状态 离线
Originally posted by iyou at 2008-11-14 04:39 PM:
set/p file=<a.txt
md %file%
能具体解释一下嘛,为什么有逗号会忽略逗号之前的呢,有空格还会以空格为界建2格文件夹呢

1、set /p str=请输入:
输入的时候能输入两行文字吗?不能!所以 set/p file=<a.txt 只取得第一行字符。

2、md 与 分隔符
如果要创建的文件夹的名称含有空格,必须用双引号括起来。
例:
md "1 2"
:: 创建一个文件夹,名字为 1 2

md 1 2 3
:: 创建三个文件夹,名字分别为 1、2、3

md a,b;c
:: 创建三个文件夹,名字分别为 a、b、c
:: 其中的逗号和分号是分隔符。删除文件夹的时候也可以:rd a;b;c
___________________________________________________________
为什么有逗号会忽略逗号之前的呢

??

[ Last edited by tireless on 2008-11-14 at 17:58 ]
20 发表于 2008-11-14 18:25 ·  中国 江苏 苏州 电信
初级用户
★★
积分 133
发帖 75
注册 2008-08-03 01:08
17年会员
UID 122677
性别 男
状态 离线
Originally posted by terse at 2007-12-19 07:11 PM:
@echo off
for /f "delims=" %%a in (a.txt) do if not defined fss set fss="%%a"
md %fss%

if not defined这个不是很清楚,解释一下如何实现第一行为文件名的?
先谢谢
21 Re 20楼 发表于 2008-11-14 19:05 ·  中国 江西 赣州 电信
银牌会员
★★★★
积分 2,025
发帖 1,122
注册 2007-09-05 20:15
18年会员
UID 96653
性别 男
状态 离线
例如 a.txt 的内容是:

第一行
第二行
第三行

for /f "delims=" %%a in (a.txt) do if not defined fss set fss="%%a"

因为 for 是每读取一行,然后把读取到的字符套入 for 语句中:
C:\>test.bat

C:\>for /F "delims=" %a in (a.txt) do if not defined fss set fss="%a"

C:\>if not defined fss set fss="第一行"

C:\>if not defined fss set fss="第二行"

C:\>if not defined fss set fss="第三行"

在执行这个 for 之前,并没有定义 fss 变量,所以当执行 if not defined fss set fss="第一行" 这句后,就设置了变量 fss 的值为 第一行。从第二行开始就不再设置变量 fss 的值了,因为 if not defined fss ... 而我已经 defined fss 过了(第一行)... ...

——————————————————————————————————

这是一个方法,但最好的两种方法是:

10 楼:读取文本中的第一行的字符,执行相应命令后就跳出 for 循环。
@echo off 
for /f "delims=" %%i in (a.txt) do md "%%i" &exit

11 楼:
set/p file=<a.txt
md %file%
22 发表于 2008-11-15 00:26 ·  中国 天津 电信
初级用户
积分 61
发帖 35
注册 2008-10-04 13:00
17年会员
UID 127389
性别 男
状态 离线
都是经典解决方案啊 学习了

不小心把分加到楼主帖子上了 HAT版主的没加上分 汗

[ Last edited by kissbill on 2008-11-15 at 00:29 ]
论坛跳转: