[BATCH][Aporte]MORF:Transforma texto Unicode a ANSI

Iniciado por Segadorfelix, 5 Diciembre 2012, 03:00 AM

0 Miembros y 1 Visitante están viendo este tema.

Segadorfelix

Morf es una pequeña aplicación que transforma el texto Unicode a ANSI, se recomienda su uso para archivos por lotes.
Acepta caracteres especiales(como: < > &), sin dañar la sintaxis ni omitir los caracteres en el archivo final.
También se puede utilizar para el cifrado de archivos(con un poco de recursividad).
Espero que les sirva la aplicación :D.
NOTA:Versiones posteriores ↓
Código (dos) [Seleccionar]

@echo off
Rem Unicode_To_Ansi=Morf
Rem solo valido unicode, no unicode big endian
Rem acepta caracteres especiales :D
Rem script creado por segadorfelix
Rem funciona por linea de comandos

IF ["%~1"]==["-t"] goto text
IF ["%~1"]==["-T"] goto text
IF ["%~1"]==["-f"] goto frase
IF ["%~1"]==["-F"] goto frase
IF ["%~1"]==["-P"] goto palabra
IF ["%~1"]==["-p"] goto palabra
echo Este script transforma un texto en Unicode a Ansi
echo.
echo Funcionamiento del script:
echo morf -T "Ubicacion del text" Trasnfoma un texto completo a ANSI
echo Ejemplo:
echo morf -T "%userprofile%\Desktop\emoticonos.txt"
echo.
echo morf -F "Frase" Trasnfoma una frase a ANSI
echo Ejemplo:
echo morf -F "õl á©illante"
echo=
echo morf -P "Palabra" Trasnfoma una palabra a ANSI
echo Ejemplo:
echo morf -P "á©illante"
echo+
echo Todas las conversiones se ponen en un archivo .ini
echo con el nombre ANSI, junto con un numero al azar,
echo exceptuando transformacion de texto.
echo.
pause
exit /B
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:text
call:texto "%~2"
exit /B
:texto
set text=%~f1
type %text%>>%text%_ANSI
echo Transformacion completada.
echo.
pause
Goto:EOF
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:palabra
set "palabra = %~2"
set "palabra ">nn.ini
for /F "tokens=3" %%y IN (nn.ini) DO (echo %%y>ANSI%random%.ini)
del nn.ini
echo Transformacion completada
echo.
pause
exit /B
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:frase
set "frase = %~2"
set "frase ">nn.ini
FOR /f "tokens=3*" %%a IN (nn.ini) DO (echo %%a %%b>ANSI%random%.ini)
del nn.ini
echo Transformacion completada
echo.
pause
exit /B

PD:Repetí el código de este post:https://foro.elhacker.net/scripting/batchcomo_evitar_lectura_de_archivo_por_el_comando_type-t377736.0.html;msg1806853#msg1806853. :silbar:
Por que en el anterior post solo citaba el código.
   

Eleкtro

Podrías mejorar el código extendiendo su funcionalidad, "Uni to ANSI" y "ANSI to Uni"

CMD /U

CMD /?

saludos








Segadorfelix

#2
@EleKtro H@cker, Gracias de nuevo. ;D, No sabia, como pasar de ANSI a Unicode.
La próxima versión de MORF tendra un método para cifrar (y descifrar, gracias a lo de CMD /U, me ha servido mucho).

Segadorfelix

Listo, aquí esta la Versión 2.0, que ahora puede transformar de ANSI a Unicode, me base en el código de "a2u.bat"(pero solo la base, le quite partes innecesarias, agregue partes necesarias del código y simplifique otras).
Código (dos) [Seleccionar]

@echo off
Rem Morf v. 2.0
Rem solo valido unicode, no unicode big endian
Rem acepta caracteres especiales :D
Rem script creado por segadorfelix
REM Gracias EleKtro H@cker
REM Unicode basado en a2u.bat bit.ly/RjDeCr
Rem funciona por linea de comandos

set "text=" & set "palabra =" & set "frase =" & set "UNI=" & set "Fun="
IF /I ["%~3"]==["-U"] ( set "UNI=yes" && set "ftre=Unidode" && goto Format ) else set "ftre=ANSI"
:MORF
IF /I ["%~1"]==["-T"] goto text
IF /I ["%~1"]==["-F"] goto frase
IF /I ["%~1"]==["-p"] goto palabra
echo Este script transforma un texto en Unicode a Ansi
echo.
echo Funcionamiento del script:
echo morf -T "Ubicacion del text" Trasnfoma un texto completo a ANSI
echo Ejemplo:
echo morf -T "%userprofile%\Desktop\emoticonos.txt"
echo.
echo morf -F "Frase" Trasnfoma una frase a ANSI
echo Ejemplo:
echo morf -F "õl á©illante"
echo=
echo morf -P "Palabra" Trasnfoma una palabra a ANSI
echo Ejemplo:
echo morf -P "á©illante"
echo+
echo Todas las conversiones se ponen en un archivo .ini
echo con el nombre ANSI, junto con un numero al azar,
echo exceptuando transformacion de texto.
echo.
echo Para hacer un proceso inverso(ANSI a Unicode)ponga al final -U
echo Ejemplo:
echo morf -F "äl  ¸illante" -U Tranforma una frase a Unidode
echo.
pause
exit /B
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:text
call:texto "%~2" "%HuecoDoss%"
exit /B
:texto
set text=%~f1
IF DEFINED UNI (call:funcion %text% %~2) else (type %text%>>%text%_%ftre%)
echo Transformacion completada.
echo.
Goto:EOF
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:palabra
IF DEFINED UNI (CHCP 1252 >NUL)
set "palabra = %~2"
set "palabra ">nn.ini
set "Result=%ftre%%random%.ini"
set /A "hty=0"
for /F "tokens=3" %%y IN (nn.ini) DO (echo %%y>%Result%)
del nn.ini
IF DEFINED UNI (goto qwerty)
echo Transformacion completada
echo.
exit /B
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:frase
IF DEFINED UNI (CHCP 1252 >NUL)
set "frase = %~2"
set "frase ">nn.ini
set "Result=%ftre%%random%.ini"
set /A "hty=0"
FOR /f "tokens=3*" %%a IN (nn.ini) DO (echo %%a %%b>%Result%)
del nn.ini
IF DEFINED UNI (goto qwerty)
echo Transformacion completada
echo.
exit /B
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:Format
FOR /F "usebackq tokens=5" %%A IN (`CHCP`) DO (IF %%A==1252 (
SET CMDsig=850) else (set CMDsig=%%A))
set "Result="
SET "HuecoDoss="
SET "HuecoDoss=R%random%W.ini"
CALL :MORF %*
exit /B
:Funcion
CHCP 1252 >NUL
(SET /P=ÿþ)<NUL>"%HuecoDoss%"
CHCP %CMDsig% >NUL
CMD /U /C TYPE "%~nx1" >> "%HuecoDoss%"
REN "%~f2" "%~nx1_%ftre%"
Goto:EOF
:qwerty
CALL :MORF -t "%Result%"
DEL %Result%
Goto:EOF

Eleкtro

Ahora vengo a decirte de nuevo:

Puedes mejorar su funcionalidad eliminando la necesidad de usar 3 parámetros, haciendo que el script detecte si se intenta convertir un archivo, o una palabra/frase.

PD: +1

Saludos








Segadorfelix

Halle una manera, seria expander la variable del archivo/frase/palabra.
Código (dos) [Seleccionar]
IF ["%~t1"]==[""] (echo No es un archivo) else echo si es un archivo
El problema es si se quiere transformar una palabra/frase, que es igual al nombre de un archivo que esta en la carpeta de morf.
Ejemplo:existe el archivo §☼l, sin extension, se activa MORF para transformar una palabra, que seria §☼l, daría prioridad a el archivo.

¿Hay otro método?

Eleкtro

#6
Cita de: Segadorfelix en 10 Diciembre 2012, 00:03 AM
¿Hay otro método?

¿Quien sería tán retorcido de ir dejando archivos SIN extensión y llamados "§☼l"? :P,
Creo que con que compruebes si existe el archivo CON extensión sería suficiente:
IF exist "%~1" IF NOT "%~x1" EQU "" (Echo el archivo existe y tiene extension)
PD: Es una multi condicional

Saludos








Segadorfelix

#7
Simplifique el código, uniendo el transformador de frases con el de palabras, mas el uso de solo 2 parametros.
Código (dos) [Seleccionar]

@echo off
Rem Morf V 2.5
Rem solo valido unicode, no unicode big endian
Rem acepta caracteres especiales :D
Rem script creado por segadorfelix
REM Gracias EleKtro H@cker
REM Unicode basado en a2u.bat Code=bit.ly/RjDeCr
Rem funciona por linea de comandos

set "text=" & set "palabra =" & set "frase =" & set "UNI=" & set "Fun="
IF /I ["%~2"]==["-U"] ( set "UNI=yes" && set "ftre=Unicode" && goto Format ) else set "ftre=ANSI"
:MORF
IF exist "%~1" (IF NOT "%~x1" EQU "" (goto text)) else (IF NOT "%~1"=="" goto Fra_Pal)
echo Este script transforma un texto en Unicode a Ansi y viceversa
echo.
echo Funcionamiento del script:
echo morf "Ubicacion del text" Trasnfoma un texto completo a ANSI
echo Ejemplo:
echo morf "%userprofile%\Desktop\emoticonos.txt"
echo.
echo morf "Frase" Trasnfoma una frase a ANSI
echo Ejemplo:
echo morf "õl á©illante"
echo=
echo morf "Palabra" Trasnfoma una palabra a ANSI
echo Ejemplo:
echo morf "á©illante"
echo+
echo Todas las conversiones se ponen en un archivo .ini
echo con el nombre ANSI/Unicode, junto con un numero al azar,
echo exceptuando transformacion de texto.
echo.
echo Para hacer un proceso inverso(ANSI a Unicode)ponga al final -U
echo Ejemplo:
echo morf "äl  ¸illante" -U Tranforma una frase a Unidode
pause
exit /B
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:text
call:texto "%~1" "%HuecoDoss%"
exit /B
:texto
set text=%~f1
IF DEFINED UNI (call:funcion %text% %~2) else (type %text%>>%text%_%ftre%)
echo Transformacion completada.
echo.
Goto:EOF
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:Fra_Pal
IF DEFINED UNI (CHCP 1252 >NUL)
set "Fra_Pal = %~1"
set "Fra_Pal ">nn.ini
set "Result=%ftre%%random%.ini"
set /A "hty=0"
for /F "tokens=2*" %%y IN (nn.ini) DO (echo %%z>%Result%)
del nn.ini
IF DEFINED UNI (goto qwerty)
echo Transformacion completada
echo.
exit /B
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:Format
FOR /F "usebackq tokens=5" %%A IN (`CHCP`) DO (IF %%A==1252 (
SET CMDsig=850) else (set CMDsig=%%A))
set "Result="
SET "HuecoDoss="
SET "HuecoDoss=R%random%W.ini"
CALL :MORF %*
exit /B
:Funcion
CHCP 1252 >NUL
(SET /P=ÿþ)<NUL>"%HuecoDoss%"
CHCP %CMDsig% >NUL
CMD /U /C TYPE "%~nx1" >> "%HuecoDoss%"
REN "%~f2" "%~nx1_%ftre%"
Goto:EOF
:qwerty
CALL :MORF "%Result%"
DEL %Result%
ren %Result%_Unicode %Result%
Goto:EOF