[BATCH][DUDA] Algún equivalente de EDLINE para sistemas de 64bits?

Iniciado por paideier, 3 Febrero 2013, 23:50 PM

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

paideier

Estoy trabajando en un encriptador de textos en batch y esta casi terminado, pero quiero agregarle la opción de cifrar un texto extraído desde un archivo .txt... Hasta ahora tengo lo siguiente:


set /p txtname=Escriba el nombre del archivo:
echo :frkript>temp.txt
for /f "tokens=*" %%x in ('type %txtname%.txt') do (echo set frkriptxt=%%x) >> temp.txt
rename temp.txt temp.bat
call temp.bat :frkript


Ese es un fragmento del código del programa entero, pero este es el que uso para extraer el texto de un .txt e insertarlo en una variable.

Mi problema es que cuando el texto tiene más de una línea, sólo la última línea es incluida dentro de la variable.
Eso supongo por --> "tokens=*"

Entonces una de las soluciones que se me ocurrieron, fue la de mover todas las líneas a la primera... Buscando encontré un post en el foro http://foro.elhacker.net/scripting/acciones_sobre_archivos_de_texto_batch-t242748.0.html y hay refencia a algo similar pero ejecutando el comando EDLINE el cual no está disponible en sistemas de 64bits, y por supuesto yo trabajo en windows 7 x64.

Me gustaría saber si existe un equivalente a ese comando o si se les ocurre otra manera de conseguir lo que quiero. De antemano gracias.

Saludos

Eleкtro

#1
Mi primera pregunta es: ¿Porque crees necesitar almacenar el contenido del archivo de texto en una variable?, pienso que podrías cifrar línea a línea el contenido del texto, es decir:

  • obtienes la primera línea
  • la cifras
  • la guardas en un archivo temporal

  • obtienes la siguiente línea
  • la cifras
  • la añades al archivo temporal

    etc...

    De todas formas si para tí no es viable, voy a mostrarte como hacerlo de la forma que has planteado.

    Puedes hacerlo recurriendo a nefastos trucos para añadir nuevas líneas en la variable y adjuntar el texto, esto es el limitado Batch, no hay otra forma de hacerlo, sería así:

    @Echo OFF
    setlocal EnableDelayedExpansion
    set NewLine=^


    Set /P "File=Escriba el nombre del archivo >> "
    Echo "%File%" | FIND /I ".txt" || (Set "File=%File%.txt")

    For /F "usebackq tokens=*" %%# in ("%File%") do (Set "FileContent=!FileContent!!NewLine!%%#")
    Echo: !FileContent!
    Pause&Exit


    Eso es para hacer lo que pides, pero yo te propongo esto:

    Código (dos) [Seleccionar]
    @Echo OFF

    Set /P "File=Escriba el nombre del archivo >> "
    Echo "%File%" | FIND /I ".txt" || (Set "File=%File%.txt")

    For /F "usebackq tokens=*" %%# in ("%File%") do (Call :Cifrar "%%#")
    Pause&Exit

    :Cifrar
    Echo "%~1"
    Rem Esta subrutina procesa una a una cada línea del archivo...
    Rem aquí debes hacer las operaciones en el string recibido, es decir, lo cifras...
    Rem y almacenas la línea cifrada en un archivo temporal...
    Echo "%VARIABLE%" >> "%TEMP%\Temp.bat"
    GOTO:EOF


    Saludos








paideier

Te has pasado... Ahora entiendo pq estás tan bien valorado en el mundo del BATCH...

Te lo agradezco mucho

Saludos