中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-05 10:27
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [求助]文本文件批量改名的问题 查看 1,778 回复 8
楼 主 [求助]文本文件批量改名的问题 发表于 2007-07-14 15:23 ·  中国 广东 汕头 电信
初级用户
积分 125
发帖 11
注册 2004-01-25 00:00
22年会员
UID 16050
性别 男
状态 离线
比如在某文件夹有若干文本文件,想在想提取这些文本文件的前两行,并组合更改文本文件的名字,不知道要怎么做呢

比如有这个文件

魔斗士.txt

文件的内容如下


  魔斗士
  作者:徐奇峰


【内容简介】

  身怀一身精湛武艺的张如飞,在一次醉酒之后意外与来自K星球的不明飞行器打了照面,并意外获得了有“南斗六星主生”功效的六粒丹药,此丹药能让受到意外伤害死亡的人起死回生并很快恢复到死前的状态。
  从此,张如飞走上了不平凡的道路。


文件前面都有4个半角字符,不过由于在这里会变形,所以用了两个全角字符代替

现在想提取文件的第一行和第二行,组合成

《魔斗士》作者:徐奇峰.txt

这样的形式,不知道能做到吗,谢谢
2 发表于 2007-07-14 16:12 ·  中国 河北 廊坊 三河市 移动
金牌会员
★★★★
积分 2,725
发帖 1,160
注册 2006-09-23 12:00
19年会员
UID 63486
来自 河北廊坊
状态 离线
试试这个:
@echo off&setlocal enabledelayedexpansion
for /f "tokens=1* delims=:" %%i in ('findstr /n .* a.txt') do (
set var=!var!%%j
set var=!var: =!
if %%i equ 2 ren a.txt !var!.txt
)
三人行,必有吾师焉。 学然后知不足,教然后知困,然后能自强也。
3 发表于 2007-07-14 16:15 ·  中国 河北 廊坊 三河市 移动
金牌会员
★★★★
积分 2,725
发帖 1,160
注册 2006-09-23 12:00
19年会员
UID 63486
来自 河北廊坊
状态 离线
呵呵,加上书名号:
@echo off&setlocal enabledelayedexpansion
for /f "tokens=1* delims=:" %%i in ('findstr /n .* a.txt') do (
set var=《!var!》%%j
set var=!var: =!
set var=!var:《》=!
if %%i equ 2 ren a.txt !var!.txt
)
三人行,必有吾师焉。 学然后知不足,教然后知困,然后能自强也。
4 发表于 2007-07-15 02:30 ·  中国 广东 汕头 电信
初级用户
积分 125
发帖 11
注册 2004-01-25 00:00
22年会员
UID 16050
性别 男
状态 离线
我是要批量的,不是单个的

还有,就算用a.txt也不行,我用下面附件的几个文件测试失败

比如下面的几个文件是想一次性的改名为

《魔斗士》作者:徐奇峰.txt
《逍遥寻秦传》作者:楚凌天.txt
《妖怪传记》作者:岚.txt

不过还是谢谢
附件
temp.rar (1.28 KiB, 下载次数: 15)
5 发表于 2007-07-28 21:08 ·  中国 辽宁 本溪 联通
银牌会员
★★★
积分 1,212
发帖 464
注册 2006-12-13 21:11
19年会员
UID 73417
性别 男
状态 离线

set fso=createobject("scripting.filesystemobject")
set folder=fso.getfolder(".")
for each file in folder.files
if ucase(right(file,3))="TXT" then
with fso.opentextfile(file)
n="《" & trim(.readline) & "》"
n=n & trim(.readline)
.close
end with
file.name=n & ".txt"
end if
next
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
slore +1 2007-07-28 21:26
6 发表于 2007-07-28 21:27 ·  中国 陕西 西安 电信
铂金会员
★★★★
积分 5,212
发帖 2,478
注册 2007-02-08 23:39
19年会员
UID 79003
性别 男
状态 离线
Set fso = CreateObject("Scripting.FileSystemObject")
Set folder = fso.getfolder(".")
For Each file In folder.files
If UCase(Right(file,3)) = "TXT" Then
With
fso.OpenTextFile(file)
n = "" & Trim(.ReadLine) & ""
n = n & Trim(.ReadLine)
.
Close
End With
file.name = n & ".txt"
End If
Next

Set
folder = Nothing
Set
fso = Nothing

VBS脚本对字符串处理还是方便
7 发表于 2007-07-29 09:02 ·  中国 河北 廊坊 三河市 移动
金牌会员
★★★★
积分 2,725
发帖 1,160
注册 2006-09-23 12:00
19年会员
UID 63486
来自 河北廊坊
状态 离线
Originally posted by venchia at 2007-7-15 02:30:
我是要批量的,不是单个的

还有,就算用a.txt也不行,我用下面附件的几个文件测试失败

比如下面的几个文件是想一次性的改名为

《魔斗士》 ...


你的测试失败是因为全角、半角问题。
用你的附件测试了以下代码,成功。

@echo off&setlocal enabledelayedexpansion
for /f %%a in ('dir/b *.txt') do (
for /f "tokens=1* delims=:" %%i in ('findstr /n .* %%a') do (
set "var=!var!%%j"
set var=!var: =!
if %%i equ 2 ren %%a 《%%~na》!var!.txt
set var=
)
)
三人行,必有吾师焉。 学然后知不足,教然后知困,然后能自强也。
8 发表于 2007-08-05 14:32 ·  中国 广东 汕头 电信
初级用户
积分 125
发帖 11
注册 2004-01-25 00:00
22年会员
UID 16050
性别 男
状态 离线
前阵都无法上来,刚刚上来就发现好多解答的方法了,感谢上面所有热心的朋友
9 发表于 2007-08-05 15:04 ·  中国 广东 汕头 电信
初级用户
积分 125
发帖 11
注册 2004-01-25 00:00
22年会员
UID 16050
性别 男
状态 离线
Originally posted by ccwan at 2007-7-29 09:02 AM:


你的测试失败是因为全角、半角问题。
用你的附件测试了以下代码,成功。

@echo off&setlocal enabledelayedexpansion
for /f %%a in ('dir/b *.txt') do (
...

如果遇到全角跟半角都有的,就不行了

还有用的是findstr,遇到文件比较大时候,需要等很久

Originally posted by slore at 2007-7-28 09:27 PM:
Set fso = CreateObject("Scripting.FileSystemObject")

这个遇到有《》符号的文件名,就会出错
论坛跳转: