Ayuda con Bat o Vbs

Iniciado por AngelFire, 20 Febrero 2015, 08:37 AM

0 Miembros y 3 Visitantes están viendo este tema.

AngelFire

En Windows Xp Sp3

Partiendo de:
Fichero1.txt
Fichero2.txt
Fichero3.txt

Con contenido de tipo y solo una sola linea por fichero como muestra el ejemplo
Fichero1.txt
asdadasdasdasd asdsadas asdasdasd cash out: 1.97 asdasdas asdasda

Fichero2.txt
asdadasdasdasd asdsadas asdasdasd cash out: 212.34 asdasdas asdasda

Fichero3.txt
asdadasdasdasd asdsadas asdasdasd cash out: 1232.97 asdasdas asdasda

Como seria un bat o vbs que como resultado diera un fichero

Fichero4.txt

Con contenido:
cash out: 1.97
cash out: 212.34
cash out: 1232.97

Alguna recomendación, tengo conocimientos muy básicos en programación
Estoy por leer mas sobre el comando find o findstr en windows el cual pocas veces he utilizado y luego seria algo como
>Fichero4.txt

Mas no se como hacer en bat o vbs para que abran los fichero uno a uno en orden.

Gracias por leer igual estoy buscando sobre el tema, cualquier comentario, ayuda o etc es bienvenida.

MCKSys Argentina

MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."


AngelFire

Lo hare muchas gracias tengo este tema duplicado por error como puedo borrar uno de los dos o hablar con el moderador, pues cuando le doy a la cruz de eliminar no me deja y me dice que hay alguien visitando el tema.

AngelFire

Cita de: MCKSys Argentina en 20 Febrero 2015, 08:44 AM
Hola!

Revisa esto (vbs).

Saludos!

Lo lei pero no aplica a mi caso, ahi solo dicen como leer un fichero y yo tengo varios y no necesito todo el contenido de la primera linea sino solo una parte para luego darlos todos juntos en un solo fichero. No se si me explique.

MCKSys Argentina

Cita de: AngelFire en 20 Febrero 2015, 08:49 AM
Lo lei pero no aplica a mi caso, ahi solo dicen como leer un fichero y yo tengo varios y no necesito todo el contenido de la primera linea sino solo una parte para luego darlos todos juntos en un solo fichero. No se si me explique.

Leer 1 archivo o 3 archivos, es indistinto aquí. Revisa el ejemplo y trata de entenderlo para aplicarlo a tu situación.

Lo mismo con lo que lees: puedes leer todo o sólo 1 lineay luego parsear esa línea. Esta función te será útil.

Aqui tienes todas las funciones de VB. Revisa las que son para archivos y strings.

Saludos!
MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."


AngelFire

Intente algo como esto pero no me sirve aun

@echo off
(
findstr "Cash out:" 1.txt
findstr "Cash out:" 2.txt
findstr "Cash out:" 3.txt
) > "4.txt"


Esperaba algo de salida como
Cash out:
Cash out:
Cash out:

Pero nada lo que obtuve no es mas que el contenido de 1.txt+2.txt+3.txt todo uno a continuacion de otro y no es lo deseado.

Tampoco se como tomar el valor numérico que sigue a continuación porque como expuse anteriormente son variables los numeros van desde 0.00 a infinito siempre conservando dos lugares despues del . (.00)

Saludos

AngelFire


Eleкtro

Cita de: AngelFire en 20 Febrero 2015, 08:55 AM
Intente algo como esto pero no me sirve aun

@echo off
(
findstr "Cash out:" 1.txt
findstr "Cash out:" 2.txt
findstr "Cash out:" 3.txt
) > "4.txt"


Esperaba algo de salida como
Cash out:
Cash out:
Cash out:

Batch es un lenguaje muy limitado y una herramienta inutil para ese tipo de tareas.

El comando FIND/FINDSTR buscan coincidencias en una linea, y muestran la linea, no capturan la parte parcial de la linea que coincide con el patrón de búsqueda.

Sigue el consejo del compañero @MCKSys Argentina, utiliza VisualBasicScript, pero utiliza expresiones regulares (RegEx) que es más cómodo.

Saludos!








AngelFire

Ok ya estoy de nuevo en ello, gracias por avisar que el find y findstr no puedo hacer capturas de una linea.

AngelFire

#9
Voy por aquí pero me faltan aun que los ficheros de salida contengan solo el pedazo que me interesa:
Salida1.txt
Cash Out: 232.45

Salida2.txt
Cash Out: 123232.35

Salida3.txt
Cash Out: 42.40

De ahí solo tendría que pasar el bat anteriormente expuesto que lo que hace es pasar todo los ficheros de salida del 1 al 3 en un text 4.

Código (vb) [Seleccionar]
On Error Resume Next
Dim Cadena
Set Carpeta = CreateObject("Scripting.FileSystemObject")
Carpeta.CreateFolder ".\output"
For i = 1 To 3
Fichero = "C:\Ejemplo\" & i &".txt"
'MsgBox Fichero,0,"Muestra"
'Set texto = CreateObject("Scripting.FileSystemObject")
'texto.CopyFile Fichero,".\Salida.txt"
Set objFSO = CreateObject("Scripting.FileSystemObject")
filepath = Fichero
substrToFind = "CashOut:"
Set objInputFile = objFSO.OpenTextFile(filepath)
tmpStr = objInputFile.ReadLine
If InStr(tmpStr, substrToFind) <= 0 Then
  WScript.Echo "No se encontro la cadena en " & i &".txt"
Else
Set texto = CreateObject("Scripting.FileSystemObject")
Set salida = texto.CreateTextFile (".\output\Salida" & i &".txt", True)
salida.WriteLine i
salida.Close
End if
Next