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

[文件操作] 批处理如何给带Unicode编码的文件改名

批处理如何给带  2®  之类的Unicode编码的文件改名
1

评分人数

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

TOP

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

这是我用来改名的批处理

@echo off & setlocal enabledelayedexpansion
for /f "delims=" %%a in ('dir /b') do (
    set "var=%%a"
    ren "!var!" "!var:®=!"
)

TOP

回复 3# ngd


    2楼的意思是,用 dir /x 获取短名,根据短名来 ren

TOP

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

TOP

你还在用bat吗?
powershell代码
脚本是写给人看的,是写给用户看的,而不是写给机子看的
用户能看懂、会修改的脚本,才是好脚本。
写易懂的powershell脚本帮人解决问题,进而让用户学会自渔,吾所愿也

TOP

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

TOP

®
脚本是写给人看的,是写给用户看的,而不是写给机子看的
用户能看懂、会修改的脚本,才是好脚本。
写易懂的powershell脚本帮人解决问题,进而让用户学会自渔,吾所愿也

TOP

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

@   我咋搞不出来呢? 页面和源码都不行
脚本是写给人看的,是写给用户看的,而不是写给机子看的
用户能看懂、会修改的脚本,才是好脚本。
写易懂的powershell脚本帮人解决问题,进而让用户学会自渔,吾所愿也

TOP

返回列表