-> Programación BATCH Avanzada. (nuevo)

Iniciado por sirdarckcat, 24 Julio 2006, 10:01 AM

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

Shinseiki86

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.

Novlucker

#61
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

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

Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

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

Shinseiki86

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

Novlucker

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

Tu problema es sencillo

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

Saludos
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

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

Shinseiki86

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é.

Novlucker

Menos mal que es de pruebas  :xD

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

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

Saludos

Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

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

Shinseiki86

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
:-\

Shinseiki86

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.

Novlucker

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
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

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

Shinseiki86

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é)