Board logo

标题: [文件操作] 批处理如何给带Unicode编码的文件改名 [打印本页]

作者: ngd    时间: 2014-2-27 14:54     标题: 批处理如何给带Unicode编码的文件改名

批处理如何给带  2®  之类的Unicode编码的文件改名
作者: DAIC    时间: 2014-2-28 09:30

c:\Test>dir /b *.txt
2®.txt

c:\Test>dir /x *.txt
Volume in drive C is DAIC
Volume Serial Number is bbs.bathome.net

Directory of c:\Test

02/27/2014  04:56 PM             1,626 2A07E~1.TXT  2®.txt
               1 File(s)          1,626 bytes
               0 Dir(s)  236,808,275,968 bytes free

c:\Test>ren 2A07E~1.TXT a.txt

c:\Test>dir /b *.txt
a.txt
作者: ngd    时间: 2014-2-28 13:37

回复 2# DAIC
不行呀,这些Unicode编码的字符就没法写在bat文件中,如果把bat文件另存为Unicode编码的,又运行不了

这是我用来改名的批处理

@echo off & setlocal enabledelayedexpansion
for /f "delims=" %%a in ('dir /b') do (
    set "var=%%a"
    ren "!var!" "!var:®=!"
)
作者: DAIC    时间: 2014-2-28 15:03

回复 3# ngd


    2楼的意思是,用 dir /x 获取短名,根据短名来 ren
作者: apang    时间: 2014-2-28 20:07

http://bbs.bathome.net/viewthread.php?tid=12824
保存为utf-8无bom
  1. @echo off
  2. chcp 65001
  3. for /f "delims=" %%a in ('dir /a-d /b *.txt') do (
  4.     set "f=%%a"
  5.     setlocal enabledelayedexpansion
  6.     set "new=!f:®=!"
  7.     if "!f!" neq "!new!" ren "!f!" "!new!"
  8.     endlocal
  9. )
  10. pause
复制代码
vbs无鸭梨
  1. Set fso = CreateObject("Scripting.FileSystemObject")
  2. char = ChrW(174)
  3. For Each file in fso.GetFolder(".").Files
  4.     If LCase(Right(file,4)) = ".txt" and InStr(file.Name,char) Then
  5.         file.Name = Replace(file.Name,char,"")
  6.     End If
  7. Next
复制代码

作者: PowerShell    时间: 2014-3-1 11:17

你还在用bat吗?
powershell代码
作者: terse    时间: 2014-3-1 12:27

powershell 可以这样 去掉文件名中的 ®
  1. Get-ChildItem -Path c:\  |Where-Object {!$_.PSIsContainer} |
  2. %{
  3.    $_.MoveTo(((Split-path $_) + $_.name -Replace '®', ''))
  4. }
复制代码

作者: PowerShell    时间: 2014-3-1 13:24

®
作者: PowerShell    时间: 2014-3-1 13:25

[i=s] 本帖最后由 PowerShell 于 2014-3-1 13:27 编辑 [/i]

@   我咋搞不出来呢? 页面和源码都不行




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