标题: [文件操作] 批处理如何提取txt文本里第一行中的小说名来重命名该文本文件? [打印本页]
作者: jellyhk 时间: 2011-12-12 11:32 标题: 批处理如何提取txt文本里第一行中的小说名来重命名该文本文件?
如何从 txt 的第一行提取书名,并以此为名重命名该 txt?
1《宦海龙腾》全集声明:本书由奇书网(www.Qisuu.……
2《以鼠之名》全集
作者: jellyhk 时间: 2011-12-12 12:33
代码已经修改!- setlocal EnableDelayedExpansion
- if not exist 小说提取目录 md 小说提取目录
- :l
- set n=0
- for /f %%a in ('dir /b 2*.txt') do (
- for /f "delims=全集 tokens=1" %%b in (%%a) do (
- set /a n+=1
- if !n! == 1 (move %%a 小说提取目录\%%b.txt) else (
- if !n! == 2 goto l
- )
- )
- )
-
- for /f %%a in ('dir /b 2*.txt') do type %%a >$&move $ %%a&goto l
- pause
复制代码
命名是成功的!不过我有个疑问!我看运行记录为什么会读取到作者?
>>>>>>2:
运行到最后没有文件了会显示找不到文件!怎么改下
作者: slore 时间: 2011-12-12 13:11
你的问题是n没有被初始化。。。第2个文本进循环后n不是0开始的,所以不输出。
delims不支持 单词 分割。。。
for这种循环会一直循环到文件结束,你只用第一行,这种方式太浪费了。- if not exist out_dir md out_dir
- for /f %%a in ('dir /b 2*.txt') do (
- CALL :SUB_REN %%a
- )
- pause
- exit
-
- :SUB_REN
- for /f "delims=《》 tokens=2" %%b in (%1) do (
- move %1 out_dir\%%b.txt
- goto :EOF
- )
复制代码
大概写成代码可能能好的。
如果非要2楼的代码能处理第2个文本,请加上
for /f %%a in ('dir /b 2*.txt') do (
set /a n=0
for /f "delims=全集 tokens=1" %%b in (%%a) do (
作者: CrLf 时间: 2011-12-12 16:16
楼主也是铁杆坛友了,以你的经验,这样的标题和顶楼内容能过关吗...
作者: jellyhk 时间: 2011-12-13 10:24
本帖最后由 jellyhk 于 2011-12-13 10:26 编辑
回复 4# CrLf
呵呵!我的错!我从小语文就很烂!真想不出对的标题!抱歉了
作者: jellyhk 时间: 2011-12-13 10:31
本帖最后由 jellyhk 于 2011-12-13 11:01 编辑
delims不支持 单词 分割。 ...
slore 发表于 2011-12-12 13:11
2楼有新问题!·!帮忙看看
不支持 单词 分割?就是说这里不能用中文?还是词语?但是怎么能成功呢?
另外你的goto :eof是不是实现了防止阅读完小说的功能呢?
goto :eof是跳到call下面吗?那不是命名一个文件后就到pause那段代码了?
作者: CrLf 时间: 2011-12-13 11:28
本帖最后由 CrLf 于 2011-12-13 11:43 编辑
- @echo off
- for /f "tokens=2*delims=:" %%a in ('findstr /n . 2*.txt^|findstr /b 1:') do (
- for /f "tokens=2delims=《》" %%c in ("@%%b") do ren "%%a" "%%c"
- )
复制代码
作者: slore 时间: 2011-12-13 11:39
本帖最后由 slore 于 2011-12-13 11:44 编辑
回复 6# jellyhk
不支持词语,中文支持。- @echo off
- for /f "delims=全集 tokens=1" %%i in (t.txt) do (
- echo %%i
- )
- pause
-
- for /f "delims=「」 tokens=1" %%i in (t.txt) do (
- echo %%i
- )
- pause
复制代码
测试文本内容
「haha」全集
「abc集123」全集
「123全456」全集
「test」全集
输出结果为- 「ha ha」
- 「abc
- 「123
- 「te st」
-
- ha ha
- abc集1 23
- 123全456
- te st
复制代码
goto 不一样 和 call 标签不一样
为什么会看到作者,因为会读第2行,干嘛加那个=2的判断?直接goto l ,n也不用算。。。肯定是第一行,进来就处理,然后就goto就行了。
你这个正好move移走文件了,不然就是循环了。。。
你这个dir的次数多。。。用标签把循环拆开的话,dir只用一次。
EOF是文件结尾,其实就是结束下面的 循环,因为是call调用,所以会到for里面,继续第2个文件。
作者: jellyhk 时间: 2011-12-13 11:52
回复 7# CrLf
完全没反映!
作者: jellyhk 时间: 2011-12-13 12:00
回复 8# slore
是哈只处理第一行不用自加!
goto :eof是跳到call下面?又因为call再for里所以运行第2个文件?对吗?
作者: slore 时间: 2011-12-13 12:24
回复 10# jellyhk
对
作者: HAT 时间: 2011-12-13 12:41
回复 10# jellyhk
goto :eof是跳转到文件结尾
具体到你这个例子中,它的作用是介绍本次call调用。
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |