Utilizando o Windows cmd.exe e um lote .cmd, posso copiar / xcopy / ??? um nome de arquivo Unicode de x: \ * para y: \ *

2

Eu quero fazer uma coisa muito simples: Copiar um arquivo.
Copy é um comando simples (e fundamental). Deve ser fácil, mas parece ser complicado quando se trata de nomes de arquivos Unicode (usando English XP , cmd.exe e um script .cmd ). Eu consegui criar um arquivo .cmd com os nomes de arquivo Unicode, como segue

    :: To create the final .cmd script
    :: 
       set SRCE=D:\_cmd\cpp
       set DEST=H%SRCE:~1%

       cmd.exe /U /c DIR /A:-D /s /b "%SRCE%" >"SRCE.UTF16" 
       cmd.exe /U /c DIR /A:-D /s /b "%DEST%" >"DEST.UTF16" 

       ConvUTF.exe  1628 "DEST.UTF16" "DEST.UTF-8"
       ConvUTF.exe  1628 "SRCE.UTF16" "SRCE.UTF-8"

    :: Then, with 'sed.exe', 'diff.exe', and 'ConvUTF.exe' again...
    :: the resulting UTF-8 (or UTF16) .cmd file looks like this...
    :: 
       copy "D:\_cmd\cpp\ā.क.test" "H:\_cmd\cpp\"  

O comando copy funciona bem quando eu o executo diretamente no command prompt , mas falha quando usado no script .cmd .
Os erros UTF-8 .cmd com: The system cannot find the file specified
O UTF16 .cmd não passa do primeiro byte NULL (do primeiro caractere) e apenas sai.

Existe alguma maneira de fazer isso a partir de um script .cmd ? (Eu quero usar o cmd.exe shell)
Talvez haja um programa utilitário que pode ser chamado de meu .cmd ...
Todas as sugestões são bem vindas.

PS . Para esclarecer o problema manin ... Eu não me importo com a forma como os nomes de arquivos Unicode são exibidos na janela do console (Isso não acontece com a maioria das letras não baseadas em latim na janela cmd.exe) ... estou apenas interessado em ser capaz de copiar um arquivo que tenha letras Unicode em seu nome de arquivo- através de um lote .cmd "script" .

    
por Peter.O 01.08.2010 / 06:37

1 resposta

1

Salve o arquivo em lote UTF-8 sem a lista de materiais no início, o que desarmará cmd . Além disso, cmd não é realmente compatível com Unicode quando se trata de arquivos em lote. Você deve colocar

chcp 65001

no lote no início para alternar para UTF-8, o que deve permitir que seus caracteres Unicode sejam lidos e processados corretamente. A única desvantagem é que essa alteração persiste mesmo depois que o arquivo de lote foi encerrado e, portanto, você está perdido com o shell em UTF-8. Você pode salvar a página de código anterior e restaurá-la no final, se isso representar um problema.

Alterar também a fonte do console para uma fonte TrueType pode ajudar, pois vários comandos internos exibem problemas Unicode com fontes raster (o motivo pelo qual for /f over dir é uma idéia tão estúpida em geral).

    
por 12.08.2010 / 00:25