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

[文本处理] 批处理如何在提取小说名[包含特殊符号]不出错?

[复制链接]
 楼主| 发表于 2011-12-21 19:17:08 | 显示全部楼层
1:为什么不考虑有空格的文件名!
-----因为我下的小说不可能有这种情况!所以我忽略他!
2:我在想出现 unicode 文本只是少数!如果用
  1. for %%a in (2*.txt) do (type "%%a">$
  2.    for /f "delims=《》 tokens=1" %%b in ($) do ( ...
复制代码
那不是每本都处理?那不也算低效率?
3:3的点,看不懂!能不能举个例子
发表于 2011-12-21 22:35:38 | 显示全部楼层
回复 16# jellyhk


    for 无法直接解析 unicode 文本,碰到含有 nul 字符的行是会直接结束解析的。所以为了不错漏,在文件格式不确定的情况下是必须转换的,而此处用的 type 是唯一一个能将 unicode 转为 ansi 的内部命令,只要不写成 for /f ... in ('type') do,其实效率并不低。
    而替换特殊字符其实就是
  1. for %%a in (\ / : ? ^" ^< ^> ^|) do set str=!str:%%a=!
复制代码
但是因为 * 无法直接替换,所以其实最方便的应该是写成(为简化表达,不考虑对感叹号的兼容性):

  1. set "str=***test\测<试>"
  2. set tmp=
  3. for /l %%a in (1 1 10) do (
  4.    for /f tokens^=1*delims^=\/:*?^<^>^|^"  %%b in ("!str!") do (
  5.       set tmp=!tmp!%%a
  6.       set str=%%b
  7.    )
  8.    echo !tmp!
  9. )
复制代码

评分

参与人数 1技术 +1 收起 理由
jellyhk + 1 辛苦了!我还要慢慢理解!

查看全部评分

发表于 2011-12-21 23:06:42 | 显示全部楼层
本帖最后由 weichenxiehou 于 2011-12-22 07:05 编辑

回复 16# jellyhk
不好意思,以上几次回答会错题意,楼主如果修改关键一句
  1. move %%a 小说提取目录\%%b.txt
复制代码
  1. move %%a 小说提取目录"%%b.txt"
复制代码
是不是就可以防止大多数特殊符号的影响呢?另外版主大人考虑到了Unicode字符的影响,真可谓思维缜密,个人建议是不是可以用set/p str=<%%a的形式提取到第一行来免除Unicode字符的干扰。既然楼主执意要在原代码基础上修改,当我多嘴吧~
 楼主| 发表于 2011-12-22 11:15:16 | 显示全部楼层
18楼!
1:你那代码没用!因为是命名!命名不准有17楼的那些符号!
2:其实一开始我用的代码就是set /p 来提取,但用过几次后发现没现在1楼的代码好!因为如果第一行内容是长内容[很长]!就不会成功!我下的小说!出现特殊字符也许是100本里有1本的几率吧!但是有第一行有长内容的几率更大!所以不用set /p
发表于 2011-12-23 00:03:06 | 显示全部楼层
回复 18# weichenxiehou


一行可以有1千多个字符,文件名不允许这么长吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 13:03 , Processed in 0.014985 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表