[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文件操作] 批处理如何提取txt文本里第一行中的小说名来重命名该文本文件?

如何从 txt 的第一行提取书名,并以此为名重命名该 txt?
1《宦海龙腾》全集声明:本书由奇书网(www.Qisuu.……
2《以鼠之名》全集
本人已死!不用联系!~
要联系下来联系!~~

代码已经修改!
  1. setlocal EnableDelayedExpansion
  2. if not exist 小说提取目录 md 小说提取目录
  3. :l
  4. set n=0
  5. for /f %%a in ('dir /b 2*.txt') do (  
  6.    for /f "delims=全集 tokens=1" %%b in (%%a) do (
  7.    set /a n+=1
  8.    if !n! == 1 (move %%a 小说提取目录\%%b.txt) else (
  9.     if !n! == 2 goto l
  10. )
  11. )     
  12. )
  13. for /f %%a in ('dir /b 2*.txt') do type %%a >$&move $ %%a&goto l
  14. pause
复制代码
命名是成功的!不过我有个疑问!我看运行记录为什么会读取到作者?
>>>>>>2:
运行到最后没有文件了会显示找不到文件!怎么改下
本人已死!不用联系!~
要联系下来联系!~~

TOP

你的问题是n没有被初始化。。。第2个文本进循环后n不是0开始的,所以不输出。

delims不支持 单词 分割。。。

for这种循环会一直循环到文件结束,你只用第一行,这种方式太浪费了。
  1. if not exist out_dir  md out_dir
  2. for /f %%a in ('dir /b 2*.txt') do (
  3.     CALL :SUB_REN %%a
  4. )
  5. pause
  6. exit
  7. :SUB_REN
  8. for /f "delims=《》 tokens=2" %%b in (%1) do (
  9.    move %1 out_dir\%%b.txt
  10.    goto :EOF
  11. )
复制代码
大概写成代码可能能好的。

如果非要2楼的代码能处理第2个文本,请加上

for /f %%a in ('dir /b 2*.txt') do (
   set /a n=0
   for /f "delims=全集 tokens=1" %%b in (%%a) do (
1

评分人数

    • jellyhk: 代码很好!不过有错tokens=1技术 + 1

TOP

楼主也是铁杆坛友了,以你的经验,这样的标题和顶楼内容能过关吗...

TOP

本帖最后由 jellyhk 于 2011-12-13 10:26 编辑

回复 4# CrLf
呵呵!我的错!我从小语文就很烂!真想不出对的标题!抱歉了
本人已死!不用联系!~
要联系下来联系!~~

TOP

本帖最后由 jellyhk 于 2011-12-13 11:01 编辑
delims不支持 单词 分割。 ...
slore 发表于 2011-12-12 13:11

2楼有新问题!·!帮忙看看

    不支持 单词 分割?就是说这里不能用中文?还是词语?但是怎么能成功呢?
另外你的goto :eof是不是实现了防止阅读完小说的功能呢?
goto :eof是跳到call下面吗?那不是命名一个文件后就到pause那段代码了?
本人已死!不用联系!~
要联系下来联系!~~

TOP

本帖最后由 CrLf 于 2011-12-13 11:43 编辑
  1. @echo off
  2. for /f "tokens=2*delims=:" %%a in ('findstr /n . 2*.txt^|findstr /b 1:') do (
  3.    for /f "tokens=2delims=《》" %%c in ("@%%b") do ren "%%a" "%%c"
  4. )
复制代码

TOP

本帖最后由 slore 于 2011-12-13 11:44 编辑

回复 6# jellyhk


    不支持词语,中文支持。
  1. @echo off
  2. for /f "delims=全集 tokens=1" %%i in (t.txt) do (
  3.     echo %%i
  4. )
  5. pause
  6. for /f "delims=「」 tokens=1" %%i in (t.txt) do (
  7.     echo %%i
  8. )
  9. pause
复制代码
测试文本内容
「haha」全集
「abc集123」全集
「123全456」全集
「test」全集


输出结果为
  1. 「ha ha」
  2. 「abc
  3. 「123
  4. 「te st」
  5. ha ha
  6. abc集1 23
  7. 123全456
  8. te st
复制代码
goto 不一样 和 call 标签不一样

为什么会看到作者,因为会读第2行,干嘛加那个=2的判断?直接goto l    ,n也不用算。。。肯定是第一行,进来就处理,然后就goto就行了。
你这个正好move移走文件了,不然就是循环了。。。
你这个dir的次数多。。。用标签把循环拆开的话,dir只用一次。

EOF是文件结尾,其实就是结束下面的 循环,因为是call调用,所以会到for里面,继续第2个文件。

TOP

回复 7# CrLf
完全没反映!
本人已死!不用联系!~
要联系下来联系!~~

TOP

回复 8# slore
是哈只处理第一行不用自加!
goto :eof是跳到call下面?又因为call再for里所以运行第2个文件?对吗?
本人已死!不用联系!~
要联系下来联系!~~

TOP

回复 10# jellyhk

TOP

回复 10# jellyhk


goto :eof是跳转到文件结尾
具体到你这个例子中,它的作用是介绍本次call调用。

TOP

返回列表