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 (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
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:
@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
Te has pasado... Ahora entiendo pq estás tan bien valorado en el mundo del BATCH...
Te lo agradezco mucho
Saludos