Problema simplificado:
Eu tenho um arquivo chamado Bíblia sagrada.exe
(observe o í
) em C:\
do meu computador.
Quando eu abrir um prompt de comando em C:\
e executar dir /b /on B*.*
, ele retornará:
Bíblia sagrada.exe
ou seja, sem problemas com símbolos diacríticos.
Mas quando eu faço dir /b /on B*.*
> c: \ a.txt e abra c:\a.txt
com o Bloco de Notas, ele se torna:
B¡blia sagrada.exe
isto é, substitui í
por ¡
.
E se eu executar for /f "delims=" %i in ('dir /b /on B*.*') do %i > %i.txt
, ele coloca o nome correto no nome do arquivo, mas dentro dele o texto ainda está errado, ou seja,
Nome do arquivo:
Bíblia sagrada.exe.txt
Conteúdo:
B¡blia sagrada.exe
O que está acontecendo?
PS:
problema real
O problema para mim é pior do que eu relatei na primeira edição, porque eu li o conteúdo de um arquivo txt para criar um script .vbs e depois para executá-lo; ao tentar executar, "não entende" que aponta para "Bíblia sagrada.exe" e não executa o programa ... ie, criei um .bat em d: \ atalhizador \ atalhizador.bat:
@echo off
::locais
set drvbak=
set drvprogrs=
set pathbak=%cd%
set pathabove=
set pathprogrs=%userprofile%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs
::identificador da pasta do programa no menu iniciar
set id=_pext1
::determina drives de acordo com paths
for /f "delims=" %%z in ("%pathbak%") do set drvbak=%%~dz
for /f "delims=" %%z in ("%pathprogrs%") do set drvprogrs=%%~dz
::pega caminho superior
cd..
set pathabove=%cd%
cd %pathbak%
cls
echo.***************
echo.* ATALHIZADOR *
echo.***************
echo.
echo.Deseja realmente executar o atalhizador para a pasta:
cd..
echo. %cd%
cd %pathbak%
echo. [s/n]:
set /p ___o=
if not "%___o%"=="s" if not "%___o%"=="S" goto end
echo.
echo.Criando os atalhos...
for /f "delims=" %%a in ('dir /b /ad /on ..') do (
echo.- pasta "%%a"...
echo. ^|-- buscando arquivos atalhizaveis...
if not exist "temp" mkdir "temp"
dir /b /on "..\%%a\*.exe" 1>temp\busca.txt 2>temp\erros.txt
for /f "delims=" %%b in (temp\busca.txt) do (
echo. ^|-- criando atalho para %%b
for /l %%z in (1,1,1) do set __temp__=
if not exist "%pathprogrs%\%id%" mkdir "%pathprogrs%\%id%"
if not exist "%pathprogrs%\%id%\%%a" mkdir "%pathprogrs%\%id%\%%a"
echo.Set oWS = WScript.CreateObject^("WScript.Shell"^) > temp\%%~na-%%~nb.vbs
echo.sLinkFile = "%pathprogrs%\%id%\%%a\%%b.lnk" >> temp\%%~na-%%~nb.vbs
echo.Set oLink = oWS.CreateShortcut^(sLinkFile^) >> temp\%%~na-%%~nb.vbs
echo.oLink.TargetPath = "%pathabove%\%%a\%%b" >> temp\%%~na-%%~nb.vbs
echo.oLink.Save >> temp\%%~na-%%~nb.vbs
cscript /nologo temp\%%~na-%%~nb.vbs
)
)
:end
%drvbak%
cd %pathbak%
pause
@echo off
A mencionada "Bíblia sagrada.exe" está em d: \ Bíblia sagrada.
O arquivo .vbs gerado está abaixo (suponha que existam apenas esses dois diretórios em d :), com o nome de arquivo D: \ atalhizador \ temp \ Bíblia Sagrada-Bíblia Sagrada.vbs:
Set oWS = WScript.CreateObject("WScript.Shell")
sLinkFile = "C:\Users\Ubirajara\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\_pext1\B¡blia Sagrada\B¡blia Sagrada.exe.lnk"
Set oLink = oWS.CreateShortcut(sLinkFile)
oLink.TargetPath = "D:\_pext1\B¡blia Sagrada\B¡blia Sagrada.exe"
oLink.Save
O problema? O atalho não é criado porque não reconhece "sLinkFile=" C: \ Usuários \ Ubirajara \ AppData \ Roaming \ Microsoft \ Windows \ Menu Iniciar \ Programas_pext1 \ B \ blia Sagrada \ B¡blia Sagrada.exe.lnk "" .
Isso não acontece se eu não usar diacríticos, mas na verdade eu tenho muitas pastas e arquivos com esses sinais ...
Como corrigir isso para permitir a escrita correta no arquivo .vbs?
PS2:
Eu tentei seguir os comandos, sozinhos e juntos, sem sucesso:
cmd /u
chcp 860
chcp 1200
mode con cp select=860
mode con cp select=1200
Também testei com a fonte cmd raster e com outras fontes disponíveis ...