Autor
|
Tema: -> Programación BATCH Avanzada. (nuevo) (Leído 34159 veces)
|
Novlucker
Desconectado
Mensajes: 1.581
|
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  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... if primero <>0 and segundo<>0 then ' Comparamos, si existen la primera Y la segunda línea, deben de existir las dos Por esto.... 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
Mensajes: 12
|
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
Mensajes: 1.581
|
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  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
|
|
|
|
« Ú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
Mensajes: 12
|
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
Mensajes: 1.581
|
Te he modificado el anterior mensaje para que además el script devuelva un mensaje de cuantos archivos se movieron..... Tu problema es sencillo 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
Mensajes: 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 ********************************************* 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
Mensajes: 1.581
|
Menos mal que es de pruebas  Es porque en esta línea..... objfso.movefile f.path,"C:\Documents and Settings\tesdcv01\Escritorio\pruebas\ok"&f.name Debe de haber un slash invertido después del okobjfso.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
Mensajes: 12
|
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
Mensajes: 12
|
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
Mensajes: 1.581
|
Te había enviado un privado, para no seguir llenando el post  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 existirSaludos
|
|
|
|
|
En línea
|
"Hay dos cosas infinitas: el Universo y la estupidez humana. Y del Universo no estoy seguro." Albert Einstein
|
|
|
Shinseiki86
Desconectado
Mensajes: 12
|
Gracias Novlucker ya funciona.  Aunque por curieosidad... como me refiero a la linea siguiente de un archivo?  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
|
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
Mensajes: 12
|
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
Mensajes: 1.581
|
Supongo que para ejecutarlo estas poniendo.... excel.exe En lugar de eso debes de poner...... start excel.exe  El code te quedará algo como esto 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
Mensajes: 7
|
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? 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
|
|
|
|
|
|