elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Ingresar Registrarse
08 Octubre 2008, 11:39  



+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Scripting
| | | |-+  -> Programación BATCH Avanzada. (nuevo)
0 Usuarios y 4 Visitantes están viendo este tema.
Páginas: 1 2 3 4 [5] 6 Ir Abajo Imprimir
Autor Tema: -> Programación BATCH Avanzada. (nuevo)  (Leído 34159 veces)
Novlucker

Desconectado Desconectado

Mensajes: 1.581



Ver Perfil
Re: -> Programación BATCH Avanzada. (nuevo)
« Respuesta #60 en: 23 Junio 2008, 15:16 »

Siempre me ha gustado mucho más *.vbs que *.bat (se crean igual, notepad y extensión vbs), es por eso que he codeado la siguiente utilidad que hace lo que necesitas,....... espero  :P

Código:
set objfso = createobject("scripting.filesystemobject")
' Establecemos el objeto encargado de realizar las tareas
set lacarpeta = objfso.getfolder("d:\carpetacontenedora")
'Fijamos la ruta en la que esta la carpeta, dentro de la cual, están los archivos
set afil = lacarpeta.files
'Obtenemos los archivos
for each f in afil
'Por cada archivo en la carpeta
set elarchivo = objfso.OpenTextFile(f.path,1)
contenido = elarchivo.readall
' Lo abrimos en modo lectura y leemos su contenido
primero = instr(1,contenido,"000323               0000000000000000000000000000000000000000",1)
segundo = instr(1,contenido,"000333               0000000000000000000000000000000000000000",1)
' Buscamos la primer línea, y luego la segunda
elarchivo.close
' Cerramos el archivo
if primero <>0 and segundo<>0 then
' Comparamos, si existen la primera Y la segunda línea, deben de existir las dos
objfso.movefile f.path,"d:\pronto\"&f.name
' Movemos el archivo a la carpeta destino en caso de que sea afirmativo
' Debe de establecerse la ruta de la carpeta, en este caso es "d:\pronto"
end if
' Terminamos la comparación
next
' Pasamos al siguiente archivo

También te lo he comentado para que lo entiendas mejor  ;)

Pruebalo y cuentanos como te va

Saludos

[Modifico] Viendo un poco mejor lo que necesitas me he dado cuenta de que la condición esta al revés, en este caso, los mueve si tienen la cadena de texto, pero tu quieres lo contrario, que los mueva en caso de que no las tenga, para eso basta con modificar la siguiente línea....

Esto...
Código:
if primero <>0 and segundo<>0 then
' Comparamos, si existen la primera Y la segunda línea, deben de existir las dos
Por esto....
Código:
if primero =0 or segundo=0 then
' Comparamos, si no existe la primera O la segunda línea, con que una no exista basta

Saludos
« Última modificación: 23 Junio 2008, 16:17 por Novlucker » En línea

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y del Universo no estoy seguro."
Albert Einstein

Shinseiki86

Desconectado Desconectado

Mensajes: 12


Ver Perfil
Re: -> Programación BATCH Avanzada. (nuevo)
« Respuesta #61 en: 23 Junio 2008, 18:08 »

No me funcionó, pero es posible que sea que lo configuré mal.

Ya hice uno que me funciona de maravilla, pero quiero optimizarlo.
--------------------------------------------------
@echo off
color 0A
title FILTRADO INCAPACIDADES ver3.0
rem Programa: filtroIGE_ver3.5.bat
echo    ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
echo    ³              Filtrado INCAPACIDADES             ³
echo    ³                   Shinseiki86                   ³
echo    ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
echo °
goto ingreso

:nocarp
@echo CARPETA INEXISTENTE!

:ingreso
@echo Ingrese o arrastre carpeta a procesar:
set /p carpeta="> "
%carpeta:~1,2%
cd %carpeta%
if %errorlevel% GTR 0 goto nocarp
cls

:busqueda
echo    ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
echo    ³              Filtrado INCAPACIDADES             ³
echo    ³                   Shinseiki86                   ³
echo    ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
echo _
echo PROCESANDO 000%%% °°°°°°°°°°°°
findstr /m /c:"000323               0000000000000000000000000000000000000000" *.txt > filtro.xls
cls

echo    ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
echo    ³              Filtrado INCAPACIDADES             ³
echo    ³                   Shinseiki86                   ³
echo    ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
echo _
echo PROCESANDO 025%%% ÛÛÛ²±°°°°°°°
findstr /m /c:"000333               0000000000000000000000000000000000000000" *.txt >>filtro.xls
cls

echo    ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
echo    ³              Filtrado INCAPACIDADES             ³
echo    ³                   Shinseiki86                   ³
echo    ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
echo _
echo PROCESANDO 050%%% ÛÛÛÛÛÛ²±°°°°
findstr /m /c:"0003230              0000000000000000000000000000000000000000" *.txt >>filtro.xls
cls

echo    ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
echo    ³              Filtrado INCAPACIDADES             ³
echo    ³                   Shinseiki86                   ³
echo    ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
echo _
echo PROCESANDO 075%%% ÛÛÛÛÛÛÛÛÛ²±°
findstr /m /c:"0003330              0000000000000000000000000000000000000000" *.txt >>filtro.xls
cls
goto finalizado

:error
echo Se ha producido un error!
echo Posiblemente el archivo está abierto
echo Cierre el archivo filtro.xls y presione cuaquier tecla para
echo intentar crear de nuevo el archivo.
pause >nul
cls
goto busqueda

:finalizado
echo    ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
echo    ³              Filtrado INCAPACIDADES             ³
echo    ³                   Shinseiki86                   ³
echo    ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
echo _
echo PROCESANDO 100%%%% ÛÛÛÛÛÛÛÛÛÛÛÛ
echo Archivo filtro.xls generado con exito!
PAUSE


if not exist OK mkdir OK
:proceso
cls
echo    ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
echo    ³        Proceso de movimiento a carpeta OK       ³
echo    ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
echo _
echo Copie Nombre archivos a procesar:
set /p archivo="> "
if not exist %archivo% goto noarch
cls

echo    ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
echo    ³             PROCESANDO ÛÛÛ²²²±±±°°°             ³
echo    ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
move %archivo% OK\
goto proceso
cls

:noarch
cls
echo    ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
echo    ³°°°°°°°°°°°°°°°ARCHIVO INEXISTENTE!°°°°°°°°°°°°°°³
echo    ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
echo _
echo %archivo% No existe.
pause
cls
goto proceso
------------------------------------------------------------------------------------------
En el archivo filtro.xls utilizo =A1=A2 para saber cuales estan repetidas. Aplico filtros, selecciono las que sean verdaderas y las copio en el batch.
En línea
Novlucker

Desconectado Desconectado

Mensajes: 1.581



Ver Perfil
Re: -> Programación BATCH Avanzada. (nuevo)
« Respuesta #62 en: 23 Junio 2008, 18:33 »

Que fue lo que no te funcionó? :¬¬
Te salió algún tipo de mensaje?

Cambiaste correctamente las rutas en las líneas 3 y 19?

Modificaste las líneas de comparación que agregue al final?
Yo lo he probado y debería de funcionar todo correctamente
Por si las dudas, doble click para ejecutar  :xD

Saludos

Prueba esto

Código:
set objfso = createobject("scripting.filesystemobject")
set lacarpeta = objfso.getfolder("d:\carpetacontenedora")
set afil = lacarpeta.files
movidos = 0
for each f in afil
set elarchivo = objfso.OpenTextFile(f.path,1)
contenido = elarchivo.readall
primero = instr(1,contenido,"000323               0000000000000000000000000000000000000000",1)
segundo = instr(1,contenido,"000333               0000000000000000000000000000000000000000",1)
elarchivo.close
if primero =0 or segundo=0 then
objfso.movefile f.path,"d:\pronto\"&f.name
movidos = movidos+1
end if
next
if movidos = 0 then
msgbox "No se ha movido ningún archivo"
else
msgbox "Se han movido " & movidos &" archivos"
end if

Cambiar línea 2
Cambiar línea 9 (de abajo para arriba XD)

Saludos

« Última modificación: 23 Junio 2008, 18:45 por Novlucker » En línea

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y del Universo no estoy seguro."
Albert Einstein

Shinseiki86

Desconectado Desconectado

Mensajes: 12


Ver Perfil
Re: -> Programación BATCH Avanzada. (nuevo)
« Respuesta #63 en: 23 Junio 2008, 18:43 »

linea 3:
set lacarpeta = objfso.getfolder("C:\Documents and Settings\tesdcv01\Escritorio\pruebas")
linea 19:
objfso.movefile f.path,"C:\Documents and Settings\tesdcv01\Escritorio\pruebas\ok"&f.name
La 19 es la que saca error
En línea
Novlucker

Desconectado Desconectado

Mensajes: 1.581



Ver Perfil
Re: -> Programación BATCH Avanzada. (nuevo)
« Respuesta #64 en: 23 Junio 2008, 18:47 »

Te he modificado el anterior mensaje para que además el script devuelva un mensaje de cuantos archivos se movieron.....

Tu problema es sencillo

Citar
objfso.movefile f.path,"C:\Documents and Settings\tesdcv01\Escritorio\pruebas\ok\"&f.name

Saludos
En línea

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y del Universo no estoy seguro."
Albert Einstein

Shinseiki86

Desconectado Desconectado

Mensajes: 12


Ver Perfil
Re: -> Programación BATCH Avanzada. (nuevo)
« Respuesta #65 en: 23 Junio 2008, 19:03 »

set objfso = createobject("scripting.filesystemobject")
set lacarpeta = objfso.getfolder("C:\Documents and Settings\tesdcv01\Escritorio\pruebas")
set afil = lacarpeta.files
movidos = 0
for each f in afil
set elarchivo = objfso.OpenTextFile(f.path,1)
contenido = elarchivo.readall
primero = instr(1,contenido,"000323               0000000000000000000000000000000000000000",1)
segundo = instr(1,contenido,"000333               0000000000000000000000000000000000000000",1)
elarchivo.close
if primero =0 or segundo=0 then
objfso.movefile f.path,"C:\Documents and Settings\tesdcv01\Escritorio\pruebas\ok"&f.name
movidos = movidos+1
end if
next
if movidos = 0 then
msgbox "No se ha movido ningún archivo"
else
msgbox "Se han movido " & movidos &" archivos"
end if
*********************************************
Me renombró los archivos asi:
okokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokok2008-06-05_641006_NI_891501133_EPS018_88_I
jeje la verdad no tengo la mas remota idea de por qué.
En línea
Novlucker

Desconectado Desconectado

Mensajes: 1.581



Ver Perfil
Re: -> Programación BATCH Avanzada. (nuevo)
« Respuesta #66 en: 23 Junio 2008, 19:06 »

Menos mal que es de pruebas  :xD

Es porque en esta línea.....
Citar
objfso.movefile f.path,"C:\Documents and Settings\tesdcv01\Escritorio\pruebas\ok"&f.name
Debe de haber un slash invertido después del ok
Citar
objfso.movefile f.path,"C:\Documents and Settings\tesdcv01\Escritorio\pruebas\ok\"&f.name

Ahora si.... tiene que funcionar bien  ;)

Saludos

En línea

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y del Universo no estoy seguro."
Albert Einstein

Shinseiki86

Desconectado Desconectado

Mensajes: 12


Ver Perfil
Re: -> Programación BATCH Avanzada. (nuevo)
« Respuesta #67 en: 23 Junio 2008, 20:29 »

mmmm ahora me aparece un error en linea 12...

set objfso = createobject("scripting.filesystemobject")
set lacarpeta = objfso.getfolder("C:\Documents and Settings\tesdcv01\Escritorio\pruebas\")
set afil = lacarpeta.files
movidos = 0
for each f in afil
set elarchivo = objfso.OpenTextFile(f.path,1)
contenido = elarchivo.readall
primero = instr(1,contenido,"000323               0000000000000000000000000000000000000000",1)
segundo = instr(1,contenido,"000333               0000000000000000000000000000000000000000",1)
elarchivo.close
if primero =0 or segundo=0 then
objfso.movefile f.path,"C:\Documents and Settings\tesdcv01\Escritorio\pruebas\ok\"&f.name
movidos = movidos+1
end if
next
if movidos = 0 then
msgbox "No se ha movido ningún archivo"
else
msgbox "Se han movido " & movidos &" archivos"
end if
 :-\
En línea
Shinseiki86

Desconectado Desconectado

Mensajes: 12


Ver Perfil
Re: -> Programación BATCH Avanzada. (nuevo)
« Respuesta #68 en: 23 Junio 2008, 20:37 »

Lo que tambien me puede servir es un for que lea un txt con estos datos:

2008-06-19_590059_NI_890807898_EPS018_86_I.TXT
2008-06-19_621451_NI_890706425_EPS018_86_I.TXT
2008-06-19_621451_NI_890706425_EPS018_86_I.TXT
2008-06-19_621452_NI_890706425_EPS018_86_I.TXT
2008-06-19_621517_NI_810001583_EPS018_86_I.TXT
2008-06-20_102019121_CC_94487480_EPS018_51_I.TXT
2008-06-20_102019121_CC_94487480_EPS018_51_I.TXT
2008-06-20_102088573_CC_5931385_EPS018_01_I.TXT
2008-06-20_102718305_CC_33966379_EPS018_01_I.TXT
2008-06-20_102718305_CC_33966379_EPS018_01_I.TXT
2008-06-20_103000920_CC_31992855_EPS018_01_I.TXT
2008-06-20_103000920_CC_31992855_EPS018_01_I.TXT
2008-06-20_103161002_CC_16638978_EPS018_01_I.TXT

Y me cree un txt con las lineas que se repiten.
En línea
Novlucker

Desconectado Desconectado

Mensajes: 1.581



Ver Perfil
Re: -> Programación BATCH Avanzada. (nuevo)
« Respuesta #69 en: 23 Junio 2008, 20:44 »

Te había enviado un privado, para no seguir llenando el post  :xD

Cual es el texto que aparece en el error?
También hay que tener en cuenta que la carpeta C:\Documents and Settings\tesdcv01\Escritorio\pruebas\ok debe de existir

Saludos
En línea

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y del Universo no estoy seguro."
Albert Einstein

Shinseiki86

Desconectado Desconectado

Mensajes: 12


Ver Perfil
Re: -> Programación BATCH Avanzada. (nuevo)
« Respuesta #70 en: 24 Junio 2008, 14:52 »

Gracias Novlucker ya funciona.  ;D

Aunque por curieosidad... como me refiero a la linea siguiente de un archivo? :huh:
No creo que se entienda asi... si tengo un txt asi:
A
B
B
C

Y quiero comparar lineas, linea1==lineasiguente... y que sea recursivo... y en batch...
(falta que quiera que tambien me sirva un café)
En línea
sirdarckcat
sdc
CoAdmin
*****
Desconectado Desconectado

Mensajes: 4.643


HAND


Ver Perfil WWW
Re: -> Programación BATCH Avanzada. (nuevo)
« Respuesta #71 en: 25 Junio 2008, 01:26 »

no puedes definir variables locales en batch.. tendrias que emularlas con prefijos, o algo similar.. por lo que per-se, la recursión no existe en batch
En línea

Shinseiki86

Desconectado Desconectado

Mensajes: 12


Ver Perfil
Re: -> Programación BATCH Avanzada. (nuevo)
« Respuesta #72 en: 25 Junio 2008, 19:29 »

Hola! tengo otra preguntica... quiero abrir un xls desde el batch, pero este queda bloqueado hasta que cierre excel, ¿como hago para que continue asi este abierto el xls?
En línea
Novlucker

Desconectado Desconectado

Mensajes: 1.581



Ver Perfil
Re: -> Programación BATCH Avanzada. (nuevo)
« Respuesta #73 en: 25 Junio 2008, 19:51 »

Supongo que para ejecutarlo estas poniendo....

Código:
excel.exe

En lugar de eso debes de poner......

Código:
start excel.exe
  ;)

El code te quedará algo como esto
Código:
cd %programfiles%\microsoft office\office11
start excel.exe
Saludos
« Última modificación: 25 Junio 2008, 19:55 por Novlucker » En línea

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y del Universo no estoy seguro."
Albert Einstein

Xen11

Desconectado Desconectado

Mensajes: 7


Ver Perfil
Re: -> Programación BATCH Avanzada. (nuevo)
« Respuesta #74 en: 31 Julio 2008, 06:04 »

Hola que tal, quiero que el batch fije la fecha actual, la cambie por una X fija, abra un exe y luego la setee a la que fijo en primer orden, lo que me ocurre es que se setea a la "actual" luego de cerrar el programa, en que me equivoco, o que me falta?

Código:
FOR /F "tokens=1-4 delims=/ " %%a in ('date /t') do (set fecha=%%a-%%b-%%c)

date 29-07-2008

C:\vet\vet.exe

date %fecha%

Muchas gracias!
En línea
Páginas: 1 2 3 4 [5] 6 Ir Arriba Imprimir 
Ir a:  







Consolas     La Web de Goku     MilW0rm     MundoDivx

Hispabyte     Truzone     TodoReviews     ZonaPhotoshop

hard-h2o modding    Foros de ayuda    Yashira.org    Videojuegos    indetectables.net   

Noticias Informatica    Seguridad Informática    ADSL    Foros en español    eNYe Sec

Todas las webs afiliadas están libres de publicidad engañosa.

Powered by SMF 1.1.6 | SMF © 2006-2008, Simple Machines LLC