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

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

本帖最后由 jellyhk 于 2011-12-21 12:20 编辑

起因:
今天下小说!改名的时候出错了!测试完发现是小说名里有特殊符号----不能用与文件的名字里的符号:\ /  ? * |等等!

文件小说名:
211111.txt

小说内容:
《谁为峰/江湖笑谈录》全集

我的代码运行没特殊符号的能成功!
目的
当文件内容里有特殊符号一样能命名成功![当然是去掉符号了]

要求:
最好在我的代码基础上改!别另写!另写我会!
  1. for /f "delims=/ tokens=1-2" %%a in (211111.txt) do (set b=%%a%%b)
  2. ren 211111.txt %b%.txt
复制代码
-----------------------------------------------------
  1. setlocal EnableDelayedExpansion
  2. rar e -o- dzs.qisuu.com\2*.rar 2*.txt
  3. ::参数e是提取
  4. ::-o-是不覆盖已经存在的文件
  5. ::-----------上面是解压出文件,下面是改名---------------------
  6. if not exist 小说提取目录 md 小说提取目录
  7. :l
  8. for /f %%a in ('dir /b 2*.txt') do (  
  9.    for /f "delims=《》 tokens=1" %%b in (%%a) do (  
  10.    move %%a 小说提取目录\%%b.txt
  11.    goto l
  12. )
  13. )     
  14. ::-----------下面是把unicode换ANDi
  15. for /f %%a in ('dir /b 2*.txt') do type %%a >$&move $ %%a&goto l
  16. pause
复制代码
本人已死!不用联系!~
要联系下来联系!~~

能把特殊字符消掉吗?还是怎么做?

TOP

你的代码里面有5个(
但是有6个)
是什么原因?

TOP

2L:
是去掉特殊符号!并命名!
3L:
不知道为什么!反正多个)一样能成功!我删除了试了下一样能行!不知道为什么!
本人已死!不用联系!~
要联系下来联系!~~

TOP

我顶!求帮助
本人已死!不用联系!~
要联系下来联系!~~

TOP

回复 4# jellyhk


代码你是自己写的吗?还是从别的地方抄得时候抄错了?

TOP

本帖最后由 jellyhk 于 2011-12-20 20:20 编辑

这是自己写的!
每次下完N本小说都用了!没出错!
今天碰到了文本第一行有特殊字符/
所以出错了!不知道怎么处理!
我知道把/去掉代码是  "%a:/=%"
但是不知道怎么带入进去!实战能力还不够!哎!还需要加强!
本人已死!不用联系!~
要联系下来联系!~~

TOP

回复 7# jellyhk
请用for /f "usebackq ...." %%i in ("filename") do ...的格式
看得多说得多,远比不上写得多。

TOP

回复 7# jellyhk


你自己写的,怎么左右括号不一样多呢,谁教你这样写代码的啊?

TOP

我还奇怪呢!你说他错他也能运行!
本人已死!不用联系!~
要联系下来联系!~~

TOP

????没人帮助我么?我哭!
本人已死!不用联系!~
要联系下来联系!~~

TOP

回复 11# jellyhk


如果你愿意自己把多余的括号删掉,我可以帮你。

TOP

删除了 !后面怎么 搞
本人已死!不用联系!~
要联系下来联系!~~

TOP

回复 13# jellyhk
我不是在上面回答了吗?针对有特殊字符的文件名的通用做法就是两端加引号,因为是在for/f中,所以需要用usebackq变换形式,以免与字符串混淆。
看得多说得多,远比不上写得多。

TOP

代码又三个较严重的问题:
1、如超人所说,未考虑到文件名含空格时发生的错误
2、for /f 无法解析 unicode 文本,应该先转ansi,再处理,如:
  1. for %%a in (2*.txt) do (type "%%a">$
  2.    for /f "delims=《》 tokens=1" %%b in ($) do ( ...
复制代码
为避免降低效率,不建议把 type 合并到第二个 for /f 中:
  1. for %%a in (2*.txt) do (
  2.    for /f "delims=《》 tokens=1" %%b in ('type "%%a"') do ( ...
复制代码
3、文件名中不能含有 \ / : * ? " < > | 这几个字符,在 for 中用变量延迟进行替换即可,但 * 无法以变量替换取巧,建议用 for /f "delims=*" 处理之

TOP

返回列表