1

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

@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 下,它也不起作用。我看过这个:Windows命令行中的Unicode字符 - 如何?

但这并不能使它起作用。我的猜测是,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

这不是我需要的...

4

2 回答 2

2

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

echo %%a |more>> aText.txt

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

于 2016-09-12T21:58:16.537 回答
0

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

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

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

使用cmd /u(unicode),使用 pagecode 850 或 65001,dir 命令显示正确的信息,但重定向会生成一个 unicode 文件(每个字符两个字节)。类型命令在任何页面代码中的字符之间显示“空格”。记事本处理文件没有问题。

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

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

于 2013-10-30T11:48:29.540 回答