2017-02-03 152 views
0

我想删除文件列表中的文件。 我基本上是试图做到这一点:CMD /批处理 - 删除UTF-8文件中的字符文件名(例如日文,中文字符)

del 二月.mp3 /f 

它似乎并没有因为UTF-8字符的工作。我搜索了很多,并没有找到解决这个问题的方法。 任何人都有这个解决方案?

我想从文件夹中删除10,000多个文件,使用我拥有这些文件的文本文件列表。这些文件的名称中都有日文字符。

谢谢:)

+3

'rm'不是Windows批处理文件中的标准命令,是否有一些替代环境在您的问题中未报告? – Compo

+1

确保编辑器在创建BAT文件时使用UTF8编码。或者使用文件的简称,你可以用'dir/x'来获得 –

+0

我的意思是写del而不是rm。 我确定我的bat文件是UTF-8编码。 我想从列表中删除10,000多个文件,并且这些文件中有日文字符,所以我必须使用某种脚本来执行此操作。 – Vladz0r

回答

1

继批处理脚本和示例文本文件显示,CMD /批能够从UCS-2 Unicode subset与文件名工作提供

CJK汉字和中欧重音拉丁字母在下面的例子中使用,无论是在一个批处理命令明确地使用,从这样的文件名保存列表读取。)

注意在bat脚本(@foo.bar >NUL 2>&1)的怪异第一行是那里cmdUTF-8知道,但不是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> 
相关问题