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

[文件操作] [已解决]批处理如何替换文件名中的unicode字符?

[复制链接]
发表于 2013-2-4 12:23:55 | 显示全部楼层 |阅读模式
请问批处理如何把文件名中的・等unicode字符替换或抹去?
最近弄了个音乐压制工具,因为解码器aac.exe不支持特殊字符输入,即使加了""也会跳过,所以需要把文件名中的特殊字符替换。
请问各位高手这个如何实现?十分感谢!
感谢各位的提议,已经解决了!谢谢!

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2013-2-4 13:18:45 | 显示全部楼层
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%a in ('dir /b *.mp3') do (
  4.     set str=%%a
  5.     set str=!str:・=_!
  6.     ren "%%a" "!str!"
  7. )
复制代码

评分

参与人数 1技术 +1 收起 理由
csydown + 1 非常感谢!!

查看全部评分

 楼主| 发表于 2013-2-4 19:14:49 | 显示全部楼层
本帖最后由 csydown 于 2013-2-5 12:51 编辑

回复 2# BAT-VBS


    非常感谢!!不过您的代码因为含有unicode字符所以无法保存,请问有没有其它办法?谢谢!
 楼主| 发表于 2013-2-4 19:18:42 | 显示全部楼层
本帖最后由 csydown 于 2013-2-5 12:52 编辑

正在研究新办法…
发表于 2013-2-5 14:52:39 | 显示全部楼层

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%a in ('dir /b *.mp3') do (
  4.     set str=%%a
  5.     set str=!str:?=_!
  6.     ren "%%a" "!str!"
  7. )
复制代码
发表于 2013-2-5 15:09:01 | 显示全部楼层
本帖最后由 523066680 于 2013-2-5 16:10 编辑

楼主,可以建立一个  "unicode字符".spec 这样的文件
批处理用ASCII 文本编写, 先用for %%a  in (*.spec) do .... 获取%%~na
这个%%~na就是unicode字符
然后借用它

测试结果:当我没说  
发表于 2013-2-5 15:22:15 | 显示全部楼层
存为 utf-8 格式,在代码头部加上一条 chcp 65001
见:http://bbs.bathome.net/viewthread.php?tid=12824
发表于 2013-2-5 15:43:51 | 显示全部楼层
存为 utf-8 格式,在代码头部加上一条 chcp 65001
见:
CrLf 发表于 2013-2-5 15:22



    哟 是zm吗?好专业的赶脚
发表于 2013-2-5 15:44:51 | 显示全部楼层
存为 utf-8 格式,在代码头部加上一条 chcp 65001
见:
CrLf 发表于 2013-2-5 15:22


XP的CMD有BUG,不支持chcp 65001
 楼主| 发表于 2013-2-5 16:15:13 | 显示全部楼层
回复 5# Demon

这个方法可以~~非常感谢!!
 楼主| 发表于 2013-2-5 16:17:38 | 显示全部楼层
回复 6# 523066680


    谢谢建议!!其实最早想出个非常麻烦的方法,就是把文件名导入文本文件,再重命名该文件到那个字符……
不过bat貌似自动省略了一次重命名,只能二次重命名了……
不过这个没有科学依据,而且非常繁琐,效率低下,还是高手们的好~
  1. for %%a in (*.*) do (
  2. echo %%a>net.xxcv
  3. for /f "delims=" %%b in ('type net.xxcv') do (
  4. rename "net.xxcv" "%%b.xxcv"
  5. for /f "delims=" %%c in ('dir /b *.xxcv') do (
  6. rename "%%a" "%%c.net"
  7. del /f /q *.xxcv
  8. )))
  9. rename "*.net" "*.."
  10. rename "*.xxcv" "*.."
复制代码
 楼主| 发表于 2013-2-5 16:18:11 | 显示全部楼层
回复 7# CrLf


    谢谢,学习了~
发表于 2013-2-5 16:21:58 | 显示全部楼层
本帖最后由 523066680 于 2013-2-5 16:38 编辑

5楼那个是可以的。因为for 'dir xxx'的时候那个字符变成?了。

我发现直接for (*.mp3) 就可以保持原文
好了,既然想了个偏方,那就弄一个可以的
建立一个 "・.spec"

然后
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for %%a in (*.spec) do (set str=%%~na)

  4. for %%a in (*.mp3) do (
  5.         set n=%%a
  6.         set n=!n:%str%=-!
  7.         ren "%%a" "!n!"
  8. )

  9. pause
复制代码
我的文件原来的名单,当然还有个批处理.bat
・.spec
董贞 ・ 01.剑如虹.[贞江湖].mp3
董贞 ・ 03.墨魂.[贞江湖].mp3
董贞 ・ 05.月光.[贞江湖].mp3


更名后的名单
・.spec
董贞 - 01.剑如虹.[贞江湖].mp3
董贞 - 03.墨魂.[贞江湖].mp3
董贞 - 05.月光.[贞江湖].mp3


还有,我推荐的几首歌都不错的
发表于 2013-2-5 17:46:16 | 显示全部楼层
回复 13# 523066680


    但 5 楼那是通配匹配,很可能致错,比如 [・].spec 用 ren [?].spec 的话,会对 [a].spec 这样的文件名误判
发表于 2013-2-5 17:54:23 | 显示全部楼层
回复 14# CrLf

    总感觉以前论坛见过,是改了ID。 不是ZM?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-20 00:40 , Processed in 0.024462 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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