我有一个名为rename.txt的文本文件,如下所示:
34aa85ff2fb46b29fba2283a7b889480306295.flv|بسوی-زیبایی.flv
bb32ca4604217660ab7b6df3938cd0df306294.flv|صدای-تو.flv
b4b802c0182ebfd4fbba9c5ad2ab3904306286.flv|بسوی-حق.flv
当我使用bulk rename utility
将|
左侧的flv文件重命名为右边的相应文件时,我得到了:
然后我尝试使用批处理文件重命名文件但cmd中的问题相同:
@echo off
for /f "tokens=*" %%a in (rename.txt) do (
echo %%a
)
pause
cmd输出:
注意:我可以在Windows中手动重命名文件:
我怎样才能得到预期的结果呢?
答案 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