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

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

请问批处理如何把文件名中的・等unicode字符替换或抹去?
最近弄了个音乐压制工具,因为解码器aac.exe不支持特殊字符输入,即使加了""也会跳过,所以需要把文件名中的特殊字符替换。
请问各位高手这个如何实现?十分感谢!
感谢各位的提议,已经解决了!谢谢!
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

  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

评分人数

TOP

本帖最后由 csydown 于 2013-2-5 12:51 编辑

回复 2# BAT-VBS


    非常感谢!!不过您的代码因为含有unicode字符所以无法保存,请问有没有其它办法?谢谢!

TOP

本帖最后由 csydown 于 2013-2-5 12:52 编辑

正在研究新办法…

TOP

  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. )
复制代码

TOP

本帖最后由 523066680 于 2013-2-5 16:10 编辑

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

测试结果:当我没说  

TOP

存为 utf-8 格式,在代码头部加上一条 chcp 65001
见:http://bbs.bathome.net/viewthread.php?tid=12824

TOP

存为 utf-8 格式,在代码头部加上一条 chcp 65001
见:
CrLf 发表于 2013-2-5 15:22



    哟 是zm吗?好专业的赶脚

TOP

存为 utf-8 格式,在代码头部加上一条 chcp 65001
见:
CrLf 发表于 2013-2-5 15:22


XP的CMD有BUG,不支持chcp 65001

TOP

回复 5# Demon

这个方法可以~~非常感谢!!

TOP

回复 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" "*.."
复制代码

TOP

回复 7# CrLf


    谢谢,学习了~

TOP

本帖最后由 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


还有,我推荐的几首歌都不错的

TOP

回复 13# 523066680


    但 5 楼那是通配匹配,很可能致错,比如 [・].spec 用 ren [?].spec 的话,会对 [a].spec 这样的文件名误判

TOP

回复 14# CrLf

    总感觉以前论坛见过,是改了ID。 不是ZM?

TOP

返回列表