2013-10-30 92 views
1

我想要拖放文件夾/文件將其子文件夾的所有目錄/文件和文件遞歸地打印到文件中。使用批處理,如何將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是由瀏覽器可讀(例如鉻大部分) 我現在是這樣的:

@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 \ü解決方案我正在用空格東西其間的每一個字符,不幸的是我突然似乎不能夠努力白白繞後重現此,而是這個現在:

@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 filesnames顯示,但鉻不想甚至要打開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 

這不是我所需要...

+0

假設你在'chcp 65001'之前沒有使用'rem',確實,它不起作用?你得到了什麼?你應該得到什麼? –

+0

'cmd/u/c for/f「tokens = * delims =」%% a in('dir%1/s/b')do echo %% a)' - ? – npocmaka

+0

@MC ND它寫了一些不可讀的混亂:D:\ Downloads \ unicode D:\ Downloads \ unicode \ sdsdsd.txt D:\ Downloads \ unicode \ŽŽŽŽŽŽ.png D:\ Downloads \ unicode \ä¸æ- ‡.png D:\ Downloads \ unicode \æ-‡è¨.png D:\ Downloads \ unicode \æ-¥æœ¬èªž.png D:\ Downloads \ unicode \æ-¥æœ¬èªž。 txt D:\ Downloads \ unicode \ç²μ語.png D:\ Downloads \ unicode \œêœìμì-'.png 我甚至試過寫一個圖片標籤並在html中顯示img標籤內的圖片,但我也只能得到破碎的圖像符號,所以它可能不僅僅是一個顯示問題。 – kumoyadori

回答

0

目錄與文件名中(ΠΠΠΠ.txt)containig Unicode字符。

隨着dir命令文件的pagecode 850,dir命令顯示正確的文件名,但只是重定向生成ANSI文件與????。TXT無論從類型或記事本

隨着pagecode 65001,dir命令顯示正確的文件名,重定向到文件生成一個UTF-8文件,正確顯示頁碼65001下的類型和頁碼850下的「垃圾」。記事本顯示正確的值。

隨着cmd /u(Unicode)的,具有850 pagecode或65001,dir命令顯示正確的Infor,但重定向生成一個unicode文件(每個字符用兩個字節)。 Type命令顯示任何頁面代碼中字符之間的「空格」。記事本處理文件沒有問題。

解決方案?沒有簡單的解決方案。每個程序/系統/顯示器理解不同的東西。確定信息的最終輸出是什麼,並確保所有相關元素獨立於數據在中間階段的顯示方式,從而可以生成所需的輸出。

回答您的提示,要在文件中獲得UNICODE字符,npocmaka註釋爲您提供了所需:使用/ u作爲參數啓動一個新的cmd實例,獲取unicode命令行。

+0

最終產品應該是一個html文件,所以unicode必須在瀏覽器中工作(例如Chrome)。記事本顯示正確,但瀏覽器(我一直打開該文件)仍然只顯示「垃圾」,任何HTML標記也無法正常工作。正如你所說,在for循環插入空格(不好)之前,用cmd/u添加npocmaka註釋的提示,但是這次它仍然只顯示unicode文件名的「垃圾」,即使在記事本中也是如此。瀏覽器甚至不想打開txtand改變擴展到html顯示文件,但這仍然是文件名的「垃圾」... – kumoyadori

1

我遇到了這個問題,因爲某些wmic命令想要將文字寫入unicode字符。這裏是我解決了這個問題:

echo %%a |more>> aText.txt 

這也適用於WinPE的,對於那些誰可能會感興趣。

相關問題