使用批处理,如何将unicode写入文件?

时间:2013-10-30 09:13:15

标签: batch-file unicode

我想拖放文件夹/文件将所有目录/文件及其子文件夹的文件以递归方式打印到文件中。

@echo off
REM chcp 1250
REM chcp 65001

if [%1]==[] goto :eof
:loop
  echo %1 >> aText.txt
  for /f "tokens=* delims=" %%a in ('dir %1  /s /b') do (
    echo %%a >> aText.txt
  )
shift
if not [%1]==[] goto loop

aText.txt

@pause

这样可以正常工作,但它不支持Unicode文件名。如果我将bat文件本身保存在UTF-8或Unicode下,它也不起作用。 我看过这个:Unicode characters in Windows command line - how?

但这并不能使它发挥作用。我的猜测是,chcp可以在批处理文件中编写unicode,而不是在它创建的文件中编写unicode。 如何将unicode文件名写入其创建的文件中?

修改

更准确地重新说出我的问题。我想把这个unicode写成浏览器可读(例如Chrome主要是) 我现在拥有的是:

@echo off
chcp 65001

if [%1]==[] goto :eof
:loop
  echo %1 > aText.txt
  for /f "tokens=* delims=" %%a in ('dir %1  /s /b') do (
echo   ^<br^>^<img src='%%a'^> >> aText.txt
REM    echo %%a >> aText.txt
  )
shift
if not [%1]==[] goto loop

aText.txt

@pause

所以我在记事本中打开它,它显示了unicode,一切都很好。 (正如MC ND在答案中描述的那样) 这给了我:

D:\Downloads\unicodes 
  <br><img src='D:\Downloads\unicodes\sdsdsd.html'> 
  <br><img src='D:\Downloads\unicodes\ŽŽŽŽŽ.png'> 
  <br><img src='D:\Downloads\unicodes\中文.png'> 
  <br><img src='D:\Downloads\unicodes\文言.png'> 
  <br><img src='D:\Downloads\unicodes\日本語.png'> 
  <br><img src='D:\Downloads\unicodes\日本語.txt'> 
  <br><img src='D:\Downloads\unicodes\粵語.png'> 
  <br><img src='D:\Downloads\unicodes\한국어.png'> 

然而,当我用Chrome打开它时,它会得到:

D:\Downloads\unicodes 
  <br><img src='D:\Downloads\unicodes\sdsdsd - Kopie.txt'> 
  <br><img src='D:\Downloads\unicodes\sdsdsd.html'> 
  <br><img src='D:\Downloads\unicodes\ŽŽŽŽŽ.png'> 
  <br><img src='D:\Downloads\unicodes\中文.png'> 
  <br><img src='D:\Downloads\unicodes\文言.png'> 
  <br><img src='D:\Downloads\unicodes\日本語.png'> 
  <br><img src='D:\Downloads\unicodes\日本語.txt'> 
  <br><img src='D:\Downloads\unicodes\粵語.png'> 
  <br><img src='D:\Downloads\unicodes\한국어.png'> 
显然,当我将txt文件重命名为html文件时,即使对于png文件,也只有一堆破碎的图像。

当我在记事本中手动打开txt并以不同的名称重新保存txt文件,甚至不更改任何设置编码(UTF-8)时,一切正常,因为我想要它,但我需要摆脱这种手动保存。

使用npocmaka的CM \ u解决方案我在每个角色之间得到了一些空格,不幸的是,我突然似乎无法在无用地尝试之后重现这一点,而是现在用这个:

@echo off
chcp 65001

cmd /u /c for /f "tokens=* delims=" %%a in ('dir %1 /s /b') do ( echo %%a >> aText.txt )

aText.txt

我得到了

D:\Downloads>(echo D:\Downloads\unicodes\sdsdsd.html   ) 
D:\Downloads\unicodes\sdsdsd.html  

D:\Downloads>(echo D:\Downloads\unicodes\ŽŽŽŽŽ.png   ) 
D:\Downloads\unicodes\ŽŽŽŽŽ.png  

D:\Downloads>(echo D:\Downloads\unicodes\中文.png   ) 
D:\Downloads\unicodes\中文.png  

D:\Downloads>(echo D:\Downloads\unicodes\文言.png   ) 
D:\Downloads\unicodes\文言.png  

D:\Downloads>(echo D:\Downloads\unicodes\日本語.png   ) 
D:\Downloads\unicodes\日本語.png  

D:\Downloads>(echo D:\Downloads\unicodes\日本語.txt   ) 
D:\Downloads\unicodes\日本語.txt  

D:\Downloads>(echo D:\Downloads\unicodes\粵語.png   ) 
D:\Downloads\unicodes\粵語.png  

D:\Downloads>(echo D:\Downloads\unicodes\한국어.png   ) 
D:\Downloads\unicodes\한국어.png  

尽管回声关闭本身的双线输出对我来说很奇怪,但无论如何,在记事本中显示unicode文件名,但是chrome甚至不想打开txt,并且将扩展名重命名为html ,它显示“垃圾”如下:

D:\Downloads>(echo D:\Downloads\unicodes\sdsdsd.html ) D:\Downloads\unicodes\sdsdsd.html D:\Downloads>(echo D:\Downloads\unicodes\}}}}}.png ) D:\Downloads\unicodes\}}}}}.png D:\Downloads>(echo D:\Downloads\unicodes\-N‡e.png ) D:\Downloads\unicodes\-N‡e.png D:\Downloads>(echo D:\Downloads\unicodes\‡eŠ.png ) D:\Downloads\unicodes\‡eŠ.png D:\Downloads>(echo D:\Downloads\unicodes\åe,gžŠ.png ) D:\Downloads\unicodes\åe,gžŠ.png D:\Downloads>(echo D:\Downloads\unicodes\åe,gžŠ.txt ) D:\Downloads\unicodes\åe,gžŠ.txt D:\Downloads>(echo D:\Downloads\unicodes\µ|žŠ.png ) D:\Downloads\unicodes\µ|žŠ.png D:\Downloads>(echo D:\Downloads\unicodes\\Õm­´Å.png ) D:\Downloads\unicodes\\Õm­´Å.png

这不是我需要的......

2 个答案:

答案 0 :(得分:2)

我遇到了这个问题,某些wmic命令想要将unicode字符写入文件。以下是我解决问题的方法:

echo %%a |more>> aText.txt

对于那些可能感兴趣的人,这也适用于WinPE。

答案 1 :(得分:0)

目录中包含文件名(ΠΠΠΠ.txt)中的unicode字符。

使用页面代码850,dir命令显示正确的文件名,但是将dir命令重定向到文件只会从类型或记事本中生成带有????。txt的ansi文件

使用页面代码65001,dir命令显示正确的文件名,重定向到文件会生成一个utf-8文件,正确显示在页面代码65001下的类型和页面代码850下的“垃圾”。记事本显示正确的值。

使用cmd /u(unicode),页面代码为850或65001,dir命令显示正确的infor,但重定向会生成一个unicode文件(每个字符两个字节)。 Type命令在任何页面代码中的字符之间显示“空格”。记事本可以毫无问题地处理文件。

解决方案?没有简单的解决方案。每个程序/系统/显示器都能理解不同的东西。确定信息的最终输出是什么,并确保所有涉及的元素,无论数据在中间阶段如何显示,都允许您生成所需的输出。

回答您的提示,在文件中获取UNICODE字符,npocmaka注释为您提供所需内容:使用/ u作为参数启动新的cmd实例,获取unicode命令行。