Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: MaX2 en 8 Febrero 2022, 18:57 pm



Título: Como leer un texto que hay en [Batch] con el Bloc de notas
Publicado por: MaX2 en 8 Febrero 2022, 18:57 pm
Hola, no sé cómo explicaros esto ya que no tengo mucha idea de programar los archivos BAT.

Tengo creado un menú y una de sus opciones es leer un texto que hay en ese archivo bat con el bloc de notas.
He ido viendo ejemplo de cómo abrirlo, y lo hace, pero no entiendo esos comandos, para poder modificarlos y que pueda abrir el bloc de notas en modo UTF8, o que al crear el archivo temporal lo cree en modo UTF8, y así poder leer las letras con acentos, la ñ, etc.

Os pongo el código que estoy utilizando, a ver si alguien me puede decir que hay que cambiar para poder mostrar el texto con sus acentos.

Desde el menú llamo a :readme

Código:
set "_batf=%~f0"
set "_batp=%_batf:'=''%"

:readme
set "_ReadMe=%SystemRoot%\Temp\ReadMe.txt"
if exist "%_ReadMe%" del /f /q "%_ReadMe%" %nul%
call :export txt "%_ReadMe%"
start notepad "%_ReadMe%"
del /f /q "%_ReadMe%"
exit /b

:export
%nul% %_psc% "$f=[io.file]::ReadAllText('!_batp!') -split \":%~1\:.*`r`n\"; [io.file]::WriteAllText('%~2',$f[1].Trim(),[System.Text.Encoding]:: ASCII);"
exit/b

:txt:
Aplicación
Español
Inglés

:txt:


Gracias.


Título: Re: Como leer un texto que hay en [Batch] con el Bloc de notas
Publicado por: .xAk. en 8 Febrero 2022, 19:25 pm
mira esto: Poner acentos en archivo BAT (https://foro.elhacker.net/scripting/poner_acentos_en_archivo_bat-t513844.0.html) ¿van por ahí los tiros?


Título: Re: Como leer un texto que hay en [Batch] con el Bloc de notas
Publicado por: MaX2 en 8 Febrero 2022, 20:16 pm
Hola .xAk., no, no es eso, como muestro en ese ejemplo del primer post, tengo un texto dentro del archivo BAT que quiero mostrarlo con el bloc de notas.

lo que hace el bat es crear un archivo readme.txt y copia ese texto en ese archivo readme.txt, y luego lo abre con el bloc de notas

start notepad "%_ReadMe%"

pero en ese cambio parece que pierde los acentos, ya que en el archivos bat si esta escrito con los acentos.




Título: Re: Como leer un texto que hay en [Batch] con el Bloc de notas
Publicado por: .xAk. en 8 Febrero 2022, 21:54 pm
Citar
Las páginas de códigos ANSI pueden ser diferentes en equipos diferentes o se pueden cambiar para un solo equipo, lo que provoca daños en los datos. Para obtener los resultados más coherentes, las aplicaciones deben usar Unicode, como UTF-8 o UTF-16, en lugar de una página de códigos específica.

empieza tu archivo .bat o .cmd con

Código:
chcp 65001


Título: Re: Como leer un texto que hay en [Batch] con el Bloc de notas
Publicado por: MaX2 en 8 Febrero 2022, 22:26 pm
El archivo es cmd

Y si que tengo puesto en ese archivo en código chcp para que en ese cmd ser puedan ver los acentos, pero el problema no lo tengo es ese cmd, si no en el TXT que se crea desde ese cmd


Título: Re: Como leer un texto que hay en [Batch] con el Bloc de notas
Publicado por: .xAk. en 8 Febrero 2022, 22:39 pm
tienes que adaptarte al archivo, ha sido creado de cualquier manera.  Lo puedes identificar y mientras trates con él estar en su entorno. ... déjamelo mirar ... la codificación del archivo se puede determinar ... el chcp lo puedes usar sin parar

iDefaultEncoding
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Notepad

que también es para cada máquina diferente y se puede cambiar ... pero quizás no le guste al usuario ... mejor adaptarse. El archivo creado ha sido creado diferente que en unicode. Son problemas de antaño


Título: Re: Como leer un texto que hay en [Batch] con el Bloc de notas
Publicado por: EdePC en 9 Febrero 2022, 01:19 am
Por defecto PowerShell trabaja con UTF8, no es necesario especificar esa codificación si esa es la que vas a utilizar. De todas maneras tu estás especificando que use ASCII, por eso no te guarda bien los acentos, el siguiente ejemplo funciona perfectamente:

Código
  1. Set "_ReadMe=%WinDir%\Temp\ReadMe.txt"
  2. Set "yo=%~f0"
  3. Del %_ReadMe% >NUL 2>&1
  4. Call :export txt "%_ReadMe%"
  5. Start notepad "%_ReadMe%"
  6. Exit /B
  7.  
  8. :export
  9. PowerShell $f=[io.file]::ReadAllText('%yo%') -Split ':%~1:';[io.file]::WriteAllText('%~2',$f[1].Trim())
  10. Exit /B
  11.  
  12. :txt:
  13. Aplicación
  14. Expañol
  15. Inglés
  16.  
  17. :txt:

Si lo deseas puedes especificar la codificación UTF8:

Código
  1. [io.file]::WriteAllText('%~2',$f[1].Trim(),[System.Text.Encoding]::UTF8)


Título: Re: Como leer un texto que hay en [Batch] con el Bloc de notas
Publicado por: .xAk. en 9 Febrero 2022, 03:14 am
offtopic How To file in batch?

magic number frnd

sigo sin enterarme

si, vale, los dos primeros ochos, pero en texto plano, el primero que no es ASCII identifica ANSI

¿y el file en DOS++?

a ms le gusta pillar de nix, y se olvida que los privilegios son de verdad


Título: Re: Como leer un texto que hay en [Batch] con el Bloc de notas
Publicado por: MaX2 en 9 Febrero 2022, 17:05 pm
.xAk. no entiendo muy bien lo que quieres decir, pero con el codigo del amigo EdePC si se pueden mostrar sin problemas las palabras acentuadas.

EdePC también probé a cambiar el código

::%nul% %_psc% "$f=[io.file]::ReadAllText('!_batp!') -split \":%~1\:.*`r`n\"; [io.file]::WriteAllText('%~2',$f[1].Trim(),[System.Text.Encoding]::ASCII);"

por :

::%nul% %_psc% "$f=[io.file]::ReadAllText('!_batp!') -split \":%~1\:.*`r`n\"; [io.file]::WriteAllText('%~2',$f[1].Trim(),[System.Text.Encoding]::UTF8);"

y no funciona, no muestra los acentos

el problema lo veo si no tiene instalado el PowerShell


Salu2.


Título: Re: Como leer un texto que hay en [Batch] con el Bloc de notas
Publicado por: EdePC en 10 Febrero 2022, 03:35 am
PowerShell viene incluido por defecto desde Windows 7, las instrucciones que utilizas son de las clásicas así que no debería haber problemas.

Con respecto a que aún no te funciona, pues seguramente tu Batch no está guardado como UTF-8, usa un editor de texto/código decente como Notepad3, Notepad++ o SublimeText y asegúrate de guardar tu archivo con codificación UTF8 sin BOM

Si no quieres usar PowerShell, puedes usar Batch puro y duro:

Código
  1. Set "_ReadMe=%WinDir%\Temp\ReadMe.txt"
  2. Set "yo=%~f0"
  3. Del %_ReadMe% >NUL 2>&1
  4. Call :export txt "%_ReadMe%"
  5. Start notepad "%_ReadMe%"
  6. Exit /B
  7.  
  8. :export
  9. For /F "tokens=1 delims=:" %%a In ('FindStr /X /N ":%1:" %yo%') Do More %yo% +%%a > %2
  10. Exit /B
  11.  
  12. :txt:
  13. Aplicación
  14. Expañol
  15. Inglés
  16. Ñandú

La ventaja es que tomará la codificación de tu Batch sea cual sea: ANSI, UTF-8, etc y el archivo resultante también tendrá la misma codificación por lo que siempre debería mostrar las cosas tal cual se ven.


Título: Re: Como leer un texto que hay en [Batch] con el Bloc de notas
Publicado por: .xAk. en 10 Febrero 2022, 04:26 am
(https://i.imgur.com/4Ya43YZ.gif) que gandul que estoy (https://i.imgur.com/4Ya43YZ.gif) eso lo tenemos que poder hacer desde cmd


Título: Re: Como leer un texto que hay en [Batch] con el Bloc de notas
Publicado por: MaX2 en 10 Febrero 2022, 08:21 am
Gracias EdePC, si PowerShell también esta en Windows 7, creo que por lo que dices es mejor utilizar este, y ahora si esta funcionando.

P.D. posiblemente tenga que volver a recurrir a preguntar sobre los dichos colores en los Batch, llevo una semana que lo dejo y lo vuelvo a retomar, porque me tienen frito.