Board logo

标题: [已解决]如何提取文本第一行作为新建文件夹的名字 [打印本页]

作者: chenai79921     时间: 2007-12-19 09:31    标题: [已解决]如何提取文本第一行作为新建文件夹的名字

例如:1.txt内容如下
2131241
6564556
5474577

现在要提取文本第一行内容,并新建文件夹的名字为第一行内容~~~?
怎么解决?谢谢~~

[ Last edited by chenai79921 on 2007-12-25 at 10:54 AM ]
作者: fastslz     时间: 2007-12-19 09:54
@echo off
for /f "tokens=2 delims=:" %%i in ('findstr /n . 1.txt^|findstr /b "1:"') do md %%i
作者: cad55     时间: 2007-12-19 10:54
成功.......
作者: chenai79921     时间: 2007-12-19 11:00
谢谢fastslz啊~~~每次求助都有人帮忙 太感动了,,,
有啥批处理的教程啊,我也想好好学学。
作者: tempuser     时间: 2007-12-19 16:56


  Quote:
Originally posted by fastslz at 2007-12-19 09:54:
@echo off
for /f "tokens=2 delims=:" %%i in ('findstr /n . 1.txt^|findstr /b "1:"') do md %%i

tokens=2是选取文本第2列内容吗?
delims=:是用:做分隔符吗?文本中没有分号啊!
能否解释('findstr /n . 1.txt^|findstr /b "1:"')含义?
谢谢,等待中...
作者: chenai79921     时间: 2007-12-19 17:14
1:内容
2:内容

tokens=2 第二个参数为内容,, :是分隔符

findstr /n  就是在匹配的每行前打印行数,,在每行的开始和1: 进行配对
在帮助里看到的,,还有^是什么意思,我也不知
作者: huahua0919     时间: 2007-12-19 18:45


  Quote:
Originally posted by fastslz at 2007-12-19 09:54 AM:
@echo off
for /f "tokens=2 delims=:" %%i in ('findstr /n . 1.txt^|findstr /b "1:"') do md %%i

那是否也可以将文本的最后一行,当作文件的名字呢
是最后一行,不是第三行;)
作者: terse     时间: 2007-12-19 19:11


  Quote:
Originally posted by huahua0919 at 2007-12-19 18:45:


那是否也可以将文本的最后一行,当作文件的名字呢
是最后一行,不是第三行;)

未行应该可以:
@echo off
for /f "delims=" %%a in (a.txt) do set "fss=%%a"
md "%fss%"
另第一行也可以这样的:
@echo off
for /f "delims=" %%a in (a.txt) do  if not defined fss set fss="%%a"
md %fss%

作者: huahua0919     时间: 2007-12-19 19:16
简单!简单!再简单!

第一行用的很妙!
作者: jmz573515     时间: 2007-12-19 20:09

@echo off
for /f "delims=" %%i in (a.txt) do md "%%i" &exit

作者: lxmxn     时间: 2007-12-20 00:48

set/p file=<a.txt
md %file%

作者: huahua0919     时间: 2007-12-23 10:43


  Quote:
Originally posted by lxmxn at 2007-12-20 12:48 AM:
set/p file=<a.txt
md %file%

不得不佩服斑竹的功力!
那是否也可以用同样的方法将第二行创建为一个文件夹的名字?
作者: lxmxn     时间: 2007-12-24 00:01
不行,此方法只能取文件的第一行。
作者: jinthree     时间: 2007-12-25 13:46
真是强,我以前碰到遇到一个问题。
想用findstr找文件中一个出现的字串的那一行文本。然后再从这一行里读出第7个字串是这样处理的。看看有没有更简便的方法呢?

%1 为想要查找的内容,

@FINDSTR /i %1 log.txt >temp01.txt
FOR /F "eol=; tokens=7 delims= " %%1 in (temp01.txt) do (
Echo %%1 > temp02.txt
goto :jump1
)

:jump1
作者: zh159     时间: 2007-12-25 14:03
FINDSTR放到for里面
FOR /F "eol=; tokens=7 delims= " %%i in ('FINDSTR /i %1 log.txt') do Echo %%i
作者: jinthree     时间: 2007-12-25 14:34


  Quote:
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 ]
作者: cdmtys168     时间: 2008-11-14 03:55    标题: 如何提取文本文件建立多个文件夹

如何提取文本文件里的每一行,作为名字来建立多个文件夹?
作者: iyou     时间: 2008-11-14 16:39
set/p file=<a.txt
md %file%
能具体解释一下嘛,为什么有逗号会忽略逗号之前的呢,有空格还会以空格为界建2格文件夹呢
作者: tireless     时间: 2008-11-14 17:56


  Quote:
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
___________________________________________________________

  Quote:
为什么有逗号会忽略逗号之前的呢

??

[ Last edited by tireless on 2008-11-14 at 17:58 ]
作者: slw218856     时间: 2008-11-14 18:25


  Quote:
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这个不是很清楚,解释一下如何实现第一行为文件名的?
先谢谢
作者: tireless     时间: 2008-11-14 19:05    标题: Re 20楼

例如 a.txt 的内容是:

第一行
第二行
第三行

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

因为 for 是每读取一行,然后把读取到的字符套入 for 语句中:

  Quote:
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%

作者: kissbill     时间: 2008-11-15 00:26
都是经典解决方案啊   学习了

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

[ Last edited by kissbill on 2008-11-15 at 00:29 ]