elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


  Mostrar Mensajes
Páginas: 1 [2]
11  Programación / Programación General / Re: Hacer aplicación que modifique linea en archivo xml en: 13 Febrero 2013, 15:36 pm
Échale un vistazo a este post sobre modificación de archivos de texto, quizás te ayude:

http://foro.elhacker.net/scripting/acciones_sobre_archivos_de_texto_batch-t242748.0.html

12  Programación / Programación General / Re: Como harian su propio Bot? en: 11 Febrero 2013, 18:12 pm
mirando un poco lo que acabo de publicar le sobra esto
Código:
:limpieza
if %cont4b%==x echo Dime algo y luego me olvido.&goto :conver2
cls
for /f "tokens=*" %%a in (%dat%) do set limpi=%%a&call :limpieza
del /f/s/q %dat%
ren olvido.dat %dat%
set limpieza=0
cls
goto conver

:limpieza
cls
echo. Estoy olvidando %cont4b% frases viejas... espera un poco...
echo. %porcen% %% completado.
echo.
echo.En cuanto acabe, podemos seguir hablando.
set /a porcen=%pasolim%*100/%cont4%
set /a pasolim+=1
if %pasolim% gtr %cont4b% echo.%limpi%>>olvido.dat
goto :eof
que no da ningún problema, solo que era una parte de una prueba que hize y se me olvidó quitárosla.
13  Programación / Programación General / Re: Como harian su propio Bot? en: 11 Febrero 2013, 18:08 pm
Pues bien, vi este post hace unos días y me propuse hacer mi propio chat-bot programado en algo muy básico como es batch (que es lo que por ahora conozco mejor) y que aun no he visto ninguno parecido programado en batch.

Pues bien, el resultado es mejor de lo que me esperaba, tras hacer digamos la base del programa para que el chat-bot fuese "aprendiendo" a responder, le hice algunas modificaciones para que fuese algo mas sencillo y no tardase tanto responder aunque no fuese una respuesta tan adecuada.
Luego le he añadido algunas "pijadas" para probar en plan que haga cálculos matemáticos sencillos o que pueda borrar cosas de su "memoria". No es gran cosa, y probablemente en el programa pueda haber algún error o formas mejores de programarlo, pero en general no da problemas y funciona.


Hos dejo aquí el código que he hecho y si queréis me comentáis que os parece:
Código:
@echo off
title Chatbot Isaac
:reinicio
set dat=chatbot.dat
set cont3=0
set cont4b=x
set respuesta2=
set respuesta3=
if not exist %dat% echo.hola>>%dat%&echo.que tal estás?>>%dat%&echo.dime algo nuevo>>%dat%
echo.
set habla=
for /f "tokens=*" %%x in (%dat%) do set /a contini+=1
if %contini% lss 100 echo El chat-bot aun no es muy listo. Ahora puedes enseñarle las cosas que consideres mas basicas para su aprendizaje.&echo.
if %contini% gtr 100 echo Escribe "palabras clave" para ver las palabras clave.
echo.Dime lo que quieras...
echo.
goto conver2

:conver
set respuesta5=%respuesta4%
set respuesta4=%respuesta3%
set respuesta3=%respuesta2%
set respuesta2=%respuesta%
set cont4=0

set cont3=%cont2%
for /f "tokens=*" %%s in (%dat%) do set /a cont4+=1
set /a cont4b=%cont4%/5
set /a cont4c=%cont4%-%cont4b%
if %cont3% gtr %cont4c% set cont3=0

echo %habla%>>%dat%
echo.%respuesta%>>%dat%


:conver2
set val=
set val2=
echo.
echo.%respuesta%
echo.
:nohabla
set habla2=%habla%
set /p habla=
if not defined habla echo Dime algo&goto nohabla
if "%habla%"=="%habla2%" set respuesta=No te repitas&goto conver
if "%habla%"=="olvida" goto limpieza
if "%habla%"=="borra eso" set borrador=%respuesta%&goto borraeso
if "%habla%"=="palabras clave" goto palabrasclave
if "%habla:~0,6%"=="busca " goto buscaeso
if "%habla:~0,1%"=="0" goto suma
if "%habla:~0,1%"=="1" goto suma
if "%habla:~0,1%"=="2" goto suma
if "%habla:~0,1%"=="3" goto suma
if "%habla:~0,1%"=="4" goto suma
if "%habla:~0,1%"=="5" goto suma
if "%habla:~0,1%"=="6" goto suma
if "%habla:~0,1%"=="7" goto suma
if "%habla:~0,1%"=="8" goto suma
if "%habla:~0,1%"=="9" goto suma

:inicio
:proceso2x
set cont=0
set cont2=0
for /f "tokens=*" %%a in (%dat%) do set val=%%a&call :proceso2
:proceso3x
:proceso5x
set cont=0
set cont2=0
for /f "tokens=*" %%z in (%dat%) do set val=%%z&call :proceso5
:proceso6x
set cont=0
set cont2=0
for /f "tokens=*" %%z in (%dat%) do set val=%%z&call :proceso6

rem El caso de que no coincidan letras:
set respuesta=No te entiendo. Aun tengo que aprender frases nuevas.
echo %habla%>>%dat%
goto conver2


echo %habla%>>%dat%&goto conver2


:proceso1b
set /a cont2+=1
if not %cont%==%cont2% goto :eof
if "%val2%"=="%respuesta%" set /a cont+=1&goto :eof
if "%val2%"=="%respuesta2%" set /a cont+=1&goto :eof
if "%val2%"=="%respuesta3%" set /a cont+=1&goto :eof
if "%val2%"=="%respuesta4%" set /a cont+=1&goto :eof
if "%val2%"=="%respuesta5%" set /a cont+=1&goto :eof
set respuesta=%val2%
goto conver


:proceso2
rem El caso de que haya las 8 letras coincidentes
set /a cont+=1
if %cont% lss %cont3% goto :eof
if "%val:~0,8%"=="%habla:~0,8%" set /a cont+=1&goto proceso2a
if "%val:~-8%"=="%habla:~-8%" set /a cont+=1&goto proceso2a

if "%val:~1,9%"=="%habla:~1,9%" set /a cont+=1&goto proceso2a
if "%val:~-9,-1%"=="%habla:~-9,-1%" set /a cont+=1&goto proceso2a

if "%val:~2,10%"=="%habla:~2,10%" set /a cont+=1&goto proceso2a
if "%val:~-10,-2%"=="%habla:~-10,-2%" set /a cont+=1&goto proceso2a
goto :eof

:proceso2a
for /f "tokens=*" %%b in (%dat%) do set val2=%%b&call :proceso1b
goto :eof



:proceso5
rem El caso de que haya 3 letras coincidentes
set /a cont+=1
if %cont% lss %cont3% goto :eof
if "%val:~0,3%"=="%habla:~0,3%" set /a cont+=1&goto proceso5a
if "%val:~-3%"=="%habla:~-3%" set /a cont+=1&goto proceso5a

if "%val:~1,4%"=="%habla:~1,4%" set /a cont+=1&goto proceso5a
if "%val:~-4,-1%"=="%habla:~-4,-1%" set /a cont+=1&goto proceso5a

if "%val:~2,5%"=="%habla:~2,5%" set /a cont+=1&goto proceso5a
if "%val:~-5,2%"=="%habla:~-5,-2%" set /a cont+=1&goto proceso5a
goto :eof

:proceso5a
for /f "tokens=*" %%e in (%dat%) do set val2=%%e&call :proceso1b
goto :eof





:proceso6
rem El caso de que haya 1 letra coincidente:
set /a cont+=1
if %cont% lss %cont3% goto :eof
if "%val:~0,1%"=="%habla:~0,1%" set /a cont+=1&goto proceso6a
if "%val:~-1%"=="%habla:~-1%" set /a cont+=1&goto proceso6a

if "%val:~1,2%"=="%habla:~1,2%" set /a cont+=1&goto proceso6a
if "%val:~-2,-1%"=="%habla:~-2,-1%" set /a cont+=1&goto proceso6a

if "%val:~2,3%"=="%habla:~2,3%" set /a cont+=1&goto proceso6a
if "%val:~-3,2%"=="%habla:~-3,-2%" set /a cont+=1&goto proceso6a

goto :eof

:proceso6a
for /f "tokens=*" %%e in (%dat%) do set val2=%%e&call :proceso1b
goto :eof



:limpieza
if %cont4b%==x echo Dime algo y luego me olvido.&goto :conver2
cls
for /f "tokens=*" %%a in (%dat%) do set limpi=%%a&call :limpieza
del /f/s/q %dat%
ren olvido.dat %dat%
set limpieza=0
cls
goto conver

:limpieza
cls
echo. Estoy olvidando %cont4b% frases viejas... espera un poco...
echo. %porcen% %% completado.
echo.
echo.En cuanto acabe, podemos seguir hablando.
set /a porcen=%pasolim%*100/%cont4%
set /a pasolim+=1
if %pasolim% gtr %cont4b% echo.%limpi%>>olvido.dat
goto :eof

:borraeso
if %cont4b%==x echo Dime algo y luego me olvido.&goto :conver2
cls
for /f "tokens=*" %%a in (%dat%) do set limpi=%%a&call :borraeso2
del /f/s/q %dat%
ren olvido.dat %dat%
set limpieza=0
cls
goto reinicio


:borraeso2
cls
echo. Estoy olvidando %borrador% espera un poco... (%pasolim% frases analizadas)
echo. %porcen% %% completado.
echo.
echo.En cuanto acabe, podemos seguir hablando.
set /a porcen=%pasolim%*100/%cont4%
set /a pasolim+=1
if not "%borrador%"=="%limpi%" echo.%limpi%>>olvido.dat
goto :eof


:palabrasclave
echo.
echo.
echo.Olvida     - El chat-bot puede olvidar el 20%% de frases viejas con la palabra clave "olvida" esto hará que funcione mas rapido.
echo.
echo.Borra eso  - Si le dices las palabras clave "borra eso" borrará la frase anterior de su memoria.
echo.
echo.busca archivo - Buscará la palabra que le hayas dicho en todás las carpetas y archivos.
echo.
echo.Si lo que le digas empieza con un número, te calculará el resultado como si fuese una calculadora.


goto conver2


:buscaeso
echo. Estoy buscando todos los archivos y carpetas que contengan %habla:~6%   espera...
if exist c: DIR c:\*.* /S /B /N >tmp-1.dat
if exist d: DIR d:\*.* /S /B >>tmp-1.dat
if exist e: DIR e:\*.* /S /B >>tmp-1.dat
if exist f: DIR f:\*.* /S /B >>tmp-1.dat
if exist g: DIR g:\*.* /S /B >>tmp-1.dat
if exist h: DIR h:\*.* /S /B /N >tmp-1.dat
if exist i: DIR i:\*.* /S /B /N >tmp-1.dat
if exist j: DIR j:\*.* /S /B /N >tmp-1.dat
if exist k: DIR k:\*.* /S /B /N >tmp-1.dat
if exist l: DIR l:\*.* /S /B /N >tmp-1.dat
if exist m: DIR m:\*.* /S /B /N >tmp-1.dat
if exist n: DIR n:\*.* /S /B /N >tmp-1.dat
if exist ñ: DIR ñ:\*.* /S /B /N >tmp-1.dat
if exist o: DIR o:\*.* /S /B /N >tmp-1.dat
if exist p: DIR p:\*.* /S /B /N >tmp-1.dat
if exist q: DIR q:\*.* /S /B /N >tmp-1.dat
if exist r: DIR r:\*.* /S /B /N >tmp-1.dat
if exist s: DIR s:\*.* /S /B /N >tmp-1.dat
if exist t: DIR t:\*.* /S /B /N >tmp-1.dat
if exist u: DIR u:\*.* /S /B /N >tmp-1.dat
if exist v: DIR v:\*.* /S /B /N >tmp-1.dat
if exist w: DIR w:\*.* /S /B /N >tmp-1.dat
if exist x: DIR x:\*.* /S /B /N >tmp-1.dat
if exist y: DIR y:\*.* /S /B /N >tmp-1.dat
if exist z: DIR z:\*.* /S /B /N >tmp-1.dat
FIND /i "%habla:~6%" tmp-1.dat >tmp-2.dat
for /f "tokens=*" %%a in (tmp-2.dat) do echo %%a
DEL tmp-1.dat
DEL tmp-2.dat
goto conver2


:suma
set habla3=%habla%
set habla=%habla:cero=0%
set habla=%habla:uno=1%
set habla=%habla:dos=2%
set habla=%habla:tres=3%
set habla=%habla:cuatro=4%
set habla=%habla:cinco=5%
set habla=%habla:seis=6%
set habla=%habla:siete=7%
set habla=%habla:ocho=8%
set habla=%habla:nueve=9%

set habla=%habla:por=*%
set habla=%habla:entre=/%
set habla=%habla:mas=+%
set habla=%habla:menos=-%
set habla=%habla:x=*%
set /a respuesta=%habla%
goto conver


Eso es todo, al principio tenéis que ir hablando lo más lógiccamente posible para que vaya aprendiendo frases y así vaya formando su "base de datos"
Si tenéis alguna duda de como funciona me decís.




14  Programación / Scripting / Re: ¿Posible la opereción con un resultado decimal? - Batch en: 4 Junio 2012, 23:03 pm
No entiendo que me quieres decir.

El resultado del ejemplo anterior nos sacaría en pantalla:

Código:
1,666
15  Programación / Scripting / Re: ¿Posible la opereción con un resultado decimal? - Batch en: 4 Junio 2012, 22:49 pm
He tenido muchas veces el problema de los decimales, y al final siempre he conseguido  salir adelante multiplicando el numero que necesites calcular por 10, 100, 1000, etc, "tantos decimales como necesites"
Ej:


Código:
@echo off
rem queremos dividir 5 entre 3 y que nos de 3 decimales

set var=5
set /a var*=1000
set /a var/=3
set var=%var:~0,-3%,%var:~-3%
echo %var%
pause

No es que sea gran cosa, pero quizás te allude.
16  Programación / Scripting / Re: -> Programación BATCH Avanzada. (nuevo) en: 4 Junio 2012, 22:26 pm
Hola, soy nuevo en este foro, quería saber si me podríais ayudar con el siguiente problema:

Estoy creando un programa en bat, el cual coge los valores de un .txt  y necesito entre otras cosas que me cambie los valores que contengan un "=" (sin comillas)  por el valor que queda detrás del caracter "="  (normalmente el caracter "=" no estará situado mas allá del 5 caracter)
(no se si me explico bien)

Ej:
set var1=987u=543  

(quiero que el resultado de var1 sea 543)


Ya he probado cosas del estilo:
set var2=%var1:==x%           (que me cambiase el igual por una x para trabajar mejor)

Código
  1. if "%var:~1,1%"=="=" set var=%var:~2%
  2. if "%var:~2,1%"=="=" set var=%var:~3%
  3. if "%var:~3,1%"=="=" set var=%var:~4%
  4. if "%var:~4,1%"=="=" set var=%var:~5%
  5. if "%var:~5,1%"=="=" set var=%var:~6%
  6. if "%var:~6,1%"=="=" set var=%var:~7%
  7. if "%var:~7,1%"=="=" set var=%var:~8%
  8. if "%var:~8,1%"=="=" set var=%var:~9%

(da error ya que reconoce el "=" como lectura del if)

(y otras tantas cosillas mas he probado también...) en definitiva si alguien me pudiese ayudar se lo agradecería, pues ya llevo varios días detrás de este problemilla. Si necesitais mas información sobre el problema, me decís.
Gracias de antemano.



NI caso al mensaje anterior, leyendo por ahí, encontré una solución al problema.
Páginas: 1 [2]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines