CMD / Batch - 删除文件名中包含UTF-8字符的文件(例如日文,中文字符)

时间:2017-02-03 17:55:02

标签: batch-file utf-8

我正在尝试删除文本文件中的文件列表。 我基本上是想这样做:

del 二月.mp3 /f

由于UTF-8字符,它似乎不起作用。我搜索了很多,并没有找到解决这个问题的方法。 有人为此得到了解决方案吗?

我正在尝试使用我拥有这些文件的文本文件列表从文件夹中删除10,000多个文件。每个文件的名称都包含日文字符。

谢谢:)

1 个答案:

答案 0 :(得分:1)

以下批处理脚本和示例文本文件显示CMD / Batch能够处理来自UCS-2 Unicode subset 的文件名

CJK表意文字和中欧重音拉丁字母用于以下示例,两者都在批处理命令中明确使用,并从已保存的此类文件名列表中读取。 )

请注意,bat脚本(@foo.bar >NUL 2>&1)中的奇怪的第一行是cmd UTF-8知道但 isn& #39; t BOM 意识到(cf byte order mark):

  • 如果在没有BOM的情况下保存脚本,则
  • 时此行将无效执行
  • 如果脚本与BOM一起保存,则此行将以某些字符为前缀列出,请参阅以下输出中的

请注意,txt文件列表中的第一行是空的,原因相同(cmd并非 BOM 知道),因此for /F循环如果BOM不存在则会忽略此空行,否则尝试对此类文件执行某些操作会引发File Not Found错误(可以使用2>NUL禁止此消息。)

42030220.bat脚本

@foo.bar >NUL 2>&1
@echo OFF
SETLOCAL EnableExtensions DisableDelayedExpansion
chcp 65001
echo next command: for /F "usebackq delims=" %%G …
for /F "usebackq delims=" %%G in ("D:\bat\files\unASCII\42030220.txt") do (
    dir /B /S "%%~G"
    REM
    REM use `del /S "%%~G"` instead of `dir /B /S "%%~G"` 
)
echo next command: dir /B /S /A:-D "D:\bat\Unusual Names\CJK\中文(繁體)\*"
dir /B /S /A:-D "D:\bat\Unusual Names\CJK\中文(繁體)\*"

42030220.txt文件列表(注意前导空行):

 
二月.mp3
ěščřžýáíé.txt
装备女印度舞娘时装上衣.rtf

<强>输出

d:\bat> d:\bat\SO\42030220.bat

d:\bat> @foo.bar  1>NUL 2>&1
Active code page: 65001
next command: for /F "usebackq delims=" %G …
File Not Found
d:\bat\Unusual Names\CJK\中文(繁體)\二月.mp3
d:\bat\UnASCII Names\ěščřžýáíé.txt
d:\bat\Unusual Names\CJK\中文(繁體)\装备女印度舞娘时装上衣.rtf
next command: dir /B /S /A:-D "D:\bat\Unusual Names\CJK\中文(繁體)\*"
D:\bat\Unusual Names\CJK\中文(繁體)\chinese traditional.txt
D:\bat\Unusual Names\CJK\中文(繁體)\二月.mp3
D:\bat\Unusual Names\CJK\中文(繁體)\装备女印度舞娘时装上衣.rtf

d:\bat>