文件名使用utf8

时间:2012-09-01 09:33:24

标签: utf-8 batch-file file-rename

我有一个名为rename.txt的文本文件,如下所示:

34aa85ff2fb46b29fba2283a7b889480306295.flv|بسوی-زیبایی.flv
bb32ca4604217660ab7b6df3938cd0df306294.flv|صدای-تو.flv
b4b802c0182ebfd4fbba9c5ad2ab3904306286.flv|بسوی-حق.flv

当我使用bulk rename utility|左侧的flv文件重命名为右边的相应文件时,我得到了:

bulk rename utility scshot

bulk rename result

然后我尝试使用批处理文件重命名文件但cmd中的问题相同:

@echo off
for /f "tokens=*" %%a in (rename.txt) do (
  echo %%a
)
pause

cmd输出:

cmd output

注意:我可以在Windows中手动重命名文件:

expected result

我怎样才能得到预期的结果呢?

2 个答案:

答案 0 :(得分:1)

Windows不使用UTF-8,它使用UTF-16LE。转码您的输入文件。

答案 1 :(得分:1)

以下对我有用:

@ECHO OFF
CHCP 65001
FOR /F "tokens=1,2 delims=|" %%a IN (rename.txt) DO (
  RENAME "%%a" "%%b"
)

确保文本文件(rename.txt在开头没有包含UTF-8签名(另外称为Byte Order Mark,BOM),因为{ {1}}命令尝试将其视为字符并将其附加到第一个文件的名称。因此,第一个文件不会被重命名(但所有其他文件都会重命名)。

如果你无法摆脱BOM,只需在开头放一条空行,这样BOM就会停留在该行上,而包含名称的其他行仍保持“干净”。如果添加该空行并且不更改上述脚本,则在尝试处理空行时会产生错误。这不应该是一个问题,但如果你想消除它,你可以这样做:

FOR /F