Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: 4dr14n31t0r en 20 Marzo 2015, 23:59 pm



Título: Contenido de un documento de texto hacia una variable de entorno en .bat o .cmd
Publicado por: 4dr14n31t0r en 20 Marzo 2015, 23:59 pm
Se que para dirigir la salida de un comando hacia un archivo se utiliza el simbolo ">"
Por ejemplo:
Código
  1. echo qweruiop > "archivo de texto".txt
Pero si el archivo contenia algo anteriormente, lo elimina, de modo que si no se quiere eliminar lo que contenia anteriormente se utiliza ">>" y asi a~nade la salida del comando al final del archivo
Código
  1. echo esta es la segunda linea >> "archivo de texto".txt
Si en lugar de dirigir la salida hacia un archivo queremos hacer lo contrario, entonces utilizamos "<" o "<<", pero Como? Por ejemplo si quiero imprimir en pantalla el contenido de un archivo sin usar el comando type esto deberia funcionar pero no lo hace.
Código
  1. echo < "archivo de texto".txt
De todos modos lo que realmente me gustaria saber es como podria, como dice el titulo de la pregunta, introducir la parte que yo eliga de un documento de texto en una variable de entorno para guardar datos y poder utilizarlos de nuevo la proxima vez sin tener que introducirlos nuevamente, y como dirigir la salida de un comando hacia un lugar concreto de un archivo sin que sea necesariamente al final, es decir entre dos renglones determinados o incluso detras de un determinado caracter de uno de los renglones.

Otra cosita mas, aunque esto no es tan importante: Me he fijado que aunque escribes help para obtener todos los comandos, en realidad no estan todos (como el comando choice). Como puedo saber cuales son todos los comandos que hay realmente sin tener que mirarlo en internet? Donde estan guardados realmente?


Título: Re: Contenido de un documento de texto hacia una variable de entorno en .bat o .cmd
Publicado por: Eleкtro en 21 Marzo 2015, 01:19 am
como podria, como dice el titulo de la pregunta, introducir la parte que yo eliga de un documento de texto en una variable de entorno para guardar datos y poder utilizarlos de nuevo la proxima vez sin tener que introducirlos nuevamente

El título de tu pregunta da a entender algo distinto, asignar el contenido de un archivo de texto ..el cual pueden ser varias lineas, a una variable de entorno del sistema, pero sencillamente eso no es posible, ya que para empezar, las variables de entorno no son multi-linea, y Batch no acepta de forma natural la asignación ni el uso de variables multi-linea, aunque se puede asignar una variable multi-linea con una conocida técnica bastante indocumentada, pero la variable de entorno solo conservará la primera linea:

Código
  1. @Echo OFF & SetLocal EnableDelayedExpansion
  2. Set NewLine=^
  3.  
  4.  
  5.  
  6. REM End New Line
  7.  
  8. Set multiLineStr=Line1!NewLine!Line2
  9. Echo !multiLineStr!
  10. SetX.exe "MyVar" !multiLineStr!
  11.  
  12. Pause&Exit /B 0

Si por lo contrario solo quieres asignar una linea de dicho archivo de texto a una variable de entorno pues ...¿cual es el problema que encuentras?, solo debes usar un FOR para iterar las lineas y utilizar el comando externo SetX cómo en el ejemplo de arriba.

como dirigir la salida de un comando hacia un lugar concreto de un archivo sin que sea necesariamente al final, es decir entre dos renglones determinados o incluso detras de un determinado caracter de uno de los renglones.

Es imposible, no puedes redireccionar el flujo de datos de la salida estándar/error de un comando hacia una posición en concreto del stream de "X" archivo o hacia una linea de un archivo de texto plano, en una herramienta tan limitada cómo es Batch NO.

Aparte de eso, insertar texto en una linea específica de un archivo de etxto es complicado, no por la tarea en si misma, sino por que Batch fue diseñado para automatizar tareas básicas y, aunque la manipulación de texto es algo muy simple en otros lenguajes, en Batch se vuelve una tarea muy tediosa además de muy, muy ineficiente debido a sus limitaciones.

Puedes ver este pequeño set de herramientas que desarrollé hace tiempo en Batch con el que podrá realizar algunas operaciones que te pueden resultar interesantes, entre ellas, insertar texto en una linea específica:
[BATCH] [APORTE] Rutina TEXTMAN para manipular archivos de texto (http://foro.elhacker.net/scripting/batch_aporte_rutina_textman_para_manipular_archivos_de_texto-t372497.0.html;msg1789019#msg1789019)

Me he fijado que aunque escribes help para obtener todos los comandos, en realidad no estan todos (como el comando choice). Como puedo saber cuales son todos los comandos que hay realmente sin tener que mirarlo en internet? Donde estan guardados realmente?

Choice no es un comando, es un programa externo a Batch, es una aplicación commandline (choice.exe).

La mayoría de este tipo de aplicaciones externas se utilizan en scripts Batch para intentar compensar la ausencia de brazos y piernas de este limitado "lenguaje de programación" y entonces se les suelen llamar inapropiadamente comandos (o comandos externos).
 
Lo mismo ocurre con find.exe, findstr.exe, xcopy.exe, y un montón de herramientas externas más, no son comandos internos de batch cómo lo es por ejemplo el comando 'Echo', aunque algunas de estas aplicaciones externas si que están documentados en la ayuda de la CMD, no están todas las aplicaciones documentadas en la CMD cómo te has dado cuenta, pero las aplicaciones commandline de Microsoft tienen su propia ayuda commandline, por ejemplo:
Código:
Choice.exe /?

Como puedo saber cuales son todos los comandos que hay realmente sin tener que mirarlo en internet? Donde estan guardados realmente?

En el directorio del sistema, es decir, en 'C:\Windows\System32', encontrarás expandidos los archivos .dll, .com, y .exe que se utilizan por o en la CMD.

Saludos


Título: Re: Contenido de un documento de texto hacia una variable de entorno en .bat o .cmd
Publicado por: 4dr14n31t0r en 21 Marzo 2015, 04:15 am
El unico problemaes que desconocia la existencia de setx.exe.
Como ya dije, no sabia por que no salen todos los "comandos" cuando escribo help, asi
que tampoco conocia todos los comandos, entre los cuales estaba ese.
La vida es mucho mas sencilla cuando conoces el comando apropiado.
Muchas gracias.


Título: Re: Contenido de un documento de texto hacia una variable de entorno en .bat o .cmd
Publicado por: Eleкtro en 21 Marzo 2015, 05:51 am
Toma esto, ya no me acordaba que lo tenía xD:
http://www.mediafire.com/view/ff377ft3j8ppe25/Batch_syntax.pdf

Ahí encontrarás documentación sobre Setx, el redireccionamiento de comandos, y otras cosas.

Saludos