Board logo

标题: [文件操作] [已解决]批处理如何替换文件名中的unicode字符? [打印本页]

作者: csydown    时间: 2013-2-4 12:23     标题: [已解决]批处理如何替换文件名中的unicode字符?

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

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

作者: csydown    时间: 2013-2-4 19:14

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

回复 2# BAT-VBS


    非常感谢!!不过您的代码因为含有unicode字符所以无法保存,请问有没有其它办法?谢谢!
作者: csydown    时间: 2013-2-4 19:18

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

正在研究新办法…
作者: Demon    时间: 2013-2-5 14:52

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

作者: 523066680    时间: 2013-2-5 15:09

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

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

测试结果:当我没说  
作者: CrLf    时间: 2013-2-5 15:22

存为 utf-8 格式,在代码头部加上一条 chcp 65001
见:http://bbs.bathome.net/viewthread.php?tid=12824
作者: 523066680    时间: 2013-2-5 15:43

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



    哟 是zm吗?好专业的赶脚
作者: Demon    时间: 2013-2-5 15:44

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


XP的CMD有BUG,不支持chcp 65001
作者: csydown    时间: 2013-2-5 16:15

回复 5# Demon

这个方法可以~~非常感谢!!
作者: csydown    时间: 2013-2-5 16:17

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

作者: csydown    时间: 2013-2-5 16:18

回复 7# CrLf


    谢谢,学习了~
作者: 523066680    时间: 2013-2-5 16:21

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


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

作者: CrLf    时间: 2013-2-5 17:46

回复 13# 523066680


    但 5 楼那是通配匹配,很可能致错,比如 [・].spec 用 ren [?].spec 的话,会对 [a].spec 这样的文件名误判
作者: 523066680    时间: 2013-2-5 17:54

回复 14# CrLf

    总感觉以前论坛见过,是改了ID。 不是ZM?
作者: CrLf    时间: 2013-2-5 19:03

回复 15# 523066680


    zm是熟么,是以下之一吗?
  1. 真没在么
  2. 肿么证明
  3. 咋没自摸
  4. 做梦找骂
  5. 遵命折磨
  6. 藏民在忙
  7. 转卖罪名
  8. 祖母最萌
  9. 周末专卖
  10. 真妙
复制代码

作者: 523066680    时间: 2013-2-5 21:41

回复 16# CrLf


    反正是不能吃的。
作者: BAT-VBS    时间: 2013-2-7 10:03

回复 16# CrLf


    自摸小王子




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2