6 votes

Comment résoudre le problème des signes diacritiques à l'invite de commande ?

Question simplifiée :

J'ai un fichier appelé Bíblia sagrada.exe (noter les í ) sur C:\ de mon ordinateur.

Lorsque j'ouvre une invite de commande sur C:\ et exécuter dir /b /on B*.* il reviendra :

Bíblia sagrada.exe

c'est-à-dire qu'il n'y a pas de problème avec les symboles diacritiques.

Mais quand je le fais dir /b /on B*.* > c : \a.txt et ouvrir c:\a.txt avec le Bloc-notes, il devient :

B¡blia sagrada.exe

c'est-à-dire qu'il remplace í con ¡ .

Et si j'exécute for /f "delims=" %i in ('dir /b /on B*.*') do %i > %i.txt il met le nom correct dans le nom du fichier mais à l'intérieur le texte est toujours erroné, c'est à dire ,

Nom de fichier :

Bíblia sagrada.exe.txt

Contenu :

B¡blia sagrada.exe

Que se passe-t-il ?

PS :

Véritable enjeu

Le problème pour moi est pire que ce que j'ai indiqué lors de la première édition, car j'ai lu le contenu d'un fichier txt pour créer un script .vbs et ensuite pour l'exécuter ; en essayant d'exécuter, "il ne comprend pas" qu'il pointe vers "Bíblia sagrada.exe" et il n'exécute pas le programme... c'est-à-dire que j'ai créé un .bat sur le 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

Le fichier mentionné "Bíblia sagrada.exe" est en d : \B íblia sagrada.

Le fichier .vbs généré est le suivant (supposons qu'il n'y ait que ces deux répertoires sur d :), avec le nom de fichier 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 

Le problème ? Le raccourci n'est pas créé car il ne reconnaît pas "sLinkFile = " C:\Users\Ubirajara\AppData\Roaming\Microsoft\Windows\Start Menu \Programs_pext1\B ¡blia Sagrada \B ¡blia Sagrada.exe.lnk"".

Cela ne se produit pas si je n'utilise pas de diacritiques, mais j'ai vraiment beaucoup de dossiers et de fichiers avec ces signaux...

Comment le corriger pour permettre une écriture correcte sur le fichier .vbs ?

PS2 :

J'ai essayé les commandes suivantes, seules et ensemble, sans succès :

cmd /u

chcp 860

chcp 1200

mode con cp select=860

mode con cp select=1200

J'ai également essayé avec la police raster cmd et avec d'autres polices disponibles...

4voto

ricafeal Points 801

Le Bloc-notes ouvre votre fichier avec le mauvais encodage. Essayez de l'ouvrir à l'aide de la boîte de dialogue Ouvrir et, dans la partie inférieure, sélectionnez d'autres encodages :

Encoding selection

Notez que Microsoft utilise des noms non standard pour les encodages. "Unicode" est en fait UTF-16LE, et "Unicode big endian" est en fait UTF-16BE.

3voto

harrymc Points 394411

Le réglage de la page de code en UTF-8 devrait aider :

chcp 65001

En dir sera alors encodé en UTF8.

Si VBS ne peut pas le comprendre tel quel, pour que le fichier soit automatiquement reconnu sous Windows comme UTF8, vous devrez le préfixer avec l'attribut Octets de nomenclature UTF8 :

0xEF, 0xBB, 0xBF

Vous pouvez alors partir d'un fichier contenant la nomenclature et l'ajouter au lieu d'écrire :

chcp 65001
copy EFBBBF.txt a.txt
dir /b /on B*.* >> a.txt

Vous pouvez également utiliser copy /b pour concaténer les fichiers.

1voto

Aganju Points 9650

Vous pouvez contourner le problème en ajoutant /X à tous DIR commandes.

Cela vous donnera le nom court 8.3 (nom DOS) de tous les fichiers ; toutes les opérations ultérieures sont valables avec ce nom, et il n'y aura pas de problèmes UTF.

1voto

Frank Sixteen Points 640

Pour résoudre le problème de l'affichage d'une mauvaise police dans le Bloc-notes, vous devez utiliser la page de code, car le Bloc-notes utilise Ansi par défaut. Une meilleure solution est d'utiliser Notepad++ où vous pouvez changer la page de code que vous souhaitez et en plus vous pouvez même changer pour un meilleur Shell avec le support de l'unicode pour que l'erreur ne se produise pas dès le départ.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X