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

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


  Mostrar Mensajes
Páginas: 1 2 3 [4] 5 6 7 8 9 10 11 12 13 14 15 16 17
31  Programación / Scripting / Re: [AYUDA][BATCH]Funcion Valida Rut en: 20 Septiembre 2009, 08:28 am
eso que buscas se llama módulo que es el resto de la división de enteros.
hice el código, a lo mejor te sirve, o si prefieres escribe tu propia versión.

La parte que buscas es:
Código:
set /a "dc=11-suma%%11"

Código:
@echo off

:ini
call :getRut
call :validaRut
if errorlevel 1 (
echo.Rut invalido
) else (
echo.Rut valido
)

pause
goto :eof

:getRut
setlocal enableextensions enabledelayedexpansion
set /p rut=Escriba rut:
(endlocal & set "rut=%rut%")
goto :eof

:validaRut
setlocal enableextensions enabledelayedexpansion
if defined rut (set "rut=!rut:.=!")
echo.!rut!|findstr.exe /r /i "\<[0-9]*\-[0123456789K]\>">nul 2>&1
if errorlevel 1 (exit /b 1)
set "numeros=!rut:~0,-2!"
set "n=!numeros!"
set "dv=!rut:~-1!"
set /a "c=2"
set /a "suma=0"
:mult
set "d=!n:~-1!"
set /a "suma+=d*c"
set /a "c+=1"
if !c! gtr 7 (set /a "c=2")
set "n=!n:~0,-1!"
if defined n (goto :mult)
set /a "dc=11-suma%%11"
set "dt=!dc!"
if !dc! equ 10 (set "dt=K")
if !dc! equ 11 (set "dt=0")
set /a ret=1
if /i "!dt!" equ "!dv!" (set /a ret=0)
exit /b !ret!

saludos.
32  Programación / Java / Ayuda con proyecto personal. en: 10 Septiembre 2009, 21:15 pm
Hola a todos, tengo una idea para hacer un programa en java, que consiste en lo siguiente:

Tener una imagen con elementos cuadrados dentro, y quiero poder seleccionar los elementos, (esto no sé como hacerlo, algo si como cuando en photoshop se coloca la herramienta recortar. Una vez tenga identificados todos los elementos, proceder a analizar toda la imagen para así poder hacer algo.


Dejo un ejemplo de mi idea.

Origen:


Cargo en el JFrame la imagen, se debe poder hacerle zoom y seleccionar un elemento dentro de ella, y luego asignar a ese trozo un nombre.

Por ejemplo en la imagen siguiente selecciono un trozo, y lo llamo : Torre negra.



Torre negra.
y así con todos los elementos.

Dama blanca.

Finalmente, cuando tengo todos los elementos reconocidos, es decir, tengo en memoria, una imagen de cada elemento, recorro en cuadrados la imagen, (la imagen quiero que sea en formato png, para que no haya errores de comparación, es decir sean todos los cuadrados iguales), y hago una comprobación de a qué elemento corresponde ese cuadrado, y luego genero otra imagen con otros elementos existentes.

Resultado:


En resumen, el usuario hace el reconocimiento visual de cada elemento y cuando están todos identificados, se procede a generar otra imagen con los mismos elementos pero con otra vista.

¿Qué clases me podrían ayudar a hacer esto?
Necesito:
-Cargar la imagen en formato png.
-Poder hacerle zoom.
-Seleccionar una parte dentro de ella, y a partir de esa seleción generar esa selección como imagen.
-Ir recorriendo la imagen en trozos y así hacer la comprobación (Comparar dos imagenes en memoria) y generar otra imagen.

Agradecería mucho la ayuda, pues quiero hacer un proyecto personal similar a este, pero basado en la misma idea.
33  Programación / Scripting / Re: [Batch] Calendario en: 6 Septiembre 2009, 23:16 pm
Encontré un error grave en el código, en la función diaSemana que hacía que en los meses de noviembre y diciembre se mostrará el primer día del mes con uno que no correspondía, he codificado otra función en su reemplazo. Edité los posts anteriores, pues contenían código malo.
A continuación muestro el código funcional, y con las siguientes opciones:
-[language] -[show weeks numbers]
Código:
-[en|es|ge] -w

Pueden editar el código para seleccionar el idioma por defecto, en este caso es english, pero si lo quieren en español:
cambien:
Código:
(set lang=en)
por
Código:
(set lang=es)

Código:
@echo off
:calendario
::version 17:37 06-12-2000
::Fixed various errors.
::Switchs:
::-[language] -[show weeks numbers]
::-[en|es|ge] -w
::
::Compatible with windows vista
setlocal enableextensions enabledelayedexpansion

(set lang=en)
rem choose your default language.
rem lang en for english. ge for german. es for spanish.

for %%l in (en ge es) do (
if /i "-%%l"=="%~1" (set lang=%%l)
if /i "-%%l"=="%~2" (set lang=%%l)
)
(set /a showw=0)
for %%o in (w) do (
if /i "-%%o"=="%~1" (set /a showw=1)
if /i "-%%o"=="%~2" (set /a showw=1)
)

(set errorlevel=)
call :extFecha
call :diaSemana 1 "!m!" "!y!"
set /a ds=!errorlevel!
set /a tk=!m!
call :esBisiesto !y!
set /a b=!errorlevel!
if %m% equ 2 (if %b% equ 1 (
set /a tk=13))
for /f "tokens=%tk%" %%l in (
"31 28 31 30 31 30 31 31 30 31 30 31 29") do set /a limite=%%l
if %d% geq 10 (set dia=^(%d%^)) else (
set dia=^(0%d%^))
echo.
set meses[en]=January February March April May
set meses[en]=%meses[en]% June July August
set meses[en]=%meses[en]% September October November December
set meses[ge]=Januar Februar Maerz April Mai
set meses[ge]=%meses[ge]% Juni Juli August
set meses[ge]=%meses[ge]% September Oktober November Dezember
set meses[es]=Enero Febrero Marzo Abril Mayo
set meses[es]=%meses[es]% Junio Julio Agosto Septiembre
set meses[es]=%meses[es]%  Octubre Noviembre Diciembre
for /f "tokens=%m%" %%m in ("!meses[%lang%]!") do echo. %%m %y%
echo.
(set meses_m[en]=_Mo__Tu__We__Th__Fr__Sa__Su_)
(set meses_m[ge]=_Mo__Di__Mi__Do__Fr__Sa__So_)
(set meses_m[es]=_Lu__Ma__Mi__Ju__Vi__Sa__Do_)
set /a "nd=1"
call :nroSemana !nd! %m% %y%
set /a wn=!errorlevel!
if %showw% equ 1  (set /p "=____"<nul)
echo.!meses_m[%lang%]!
if %showw% equ 1 (call :wn1)
for /l %%s in (2,1,%ds%) do set /p "=...."<nul
set /a "r=8-ds"
for /l %%d in (1,1,%r%) do (
if %%d equ %d% (set /p "=%dia%"<nul) else (
set /p "=.0%%d."<nul))
if %showw% equ 1 (call :wn0 7)
echo.&if %showw% equ 1 (call :wn1)
set /a i=0
set /a r +=1
for /l %%d in (%r%,1,%limite%) do (
if %%d equ %d% (set /p "=%dia%"<nul) else (
if %%d geq 10 (set /p "=.%%d."<nul) else (
set /p "=.0%%d."<nul)
)
set /a i +=1
if !i! equ 7 (
if %showw% equ 1 (call :wn0 7)
set /a i=0&echo.&if %showw% equ 1 (
if %%d lss %limite% (call :wn1))
)
)
set /a i +=1
if %i% equ 1 (set /a i=8)
if %i% lss 8 for /l %%s in (%i%,1,7) do set /p "=...."<nul
echo.
goto :eof

:wn0
set /a "nd+=%~1"
call :nroSemana !nd! %m% %y%
set /a "wn=!errorlevel!"
goto :eof

:wn1
if !wn! lss 10 (set /p "=w0!wn!."<nul) else (
(set /p "=w!wn!."<nul))
goto :eof

:nroSemana
::call :nroSemana %dia% %mes% %año%
::return errorlevel
setlocal enableextensions enabledelayedexpansion
set /a "d=%~1,m=%~2,y=%~3"
call :esBisiesto %y%
set /a b=!errorlevel!
set /a "y_1=y-1"
call :esBisiesto %y_1%
set /a b_1=!errorlevel!
for /f "tokens=%m%" %%d in (
"0 31 59 90 120 151 181 212 243 273 304 334") do (
set /a doyn=%d%+%%d)
if %b% equ 1 (if %m% equ 2 (set /a doyn +=1))
call :diaSemana 1 1 %y%
set /a "j1wd=!errorlevel!"
set /a "wd=1+((doyn+j1wd-2)%%7),yn=y,ejw=8-j1wd"
if %doyn% leq %ejw% (if %j1wd% gtr 4 (
set /a "yn=y-1,wn=52"
if %j1wd% equ 5 (set /a "wn=53")
if %j1wd% equ 6 (if %b_1% equ 1 (set /a "wn=53")
)))
if %yn% equ %y% (if %b% equ 1 (
set /a "i=366") else (
set /a "i=365")
set /a "i_dyn=i-doyn,f_wd=4-wd"
if !i_dyn! lss !f_wd! (set /a "yn=y+1,wn=1")
if %yn% equ %y% (set /a "wn=(doyn+(7-wd)+(j1wd-1))/7"
if %j1wd% gtr 4 (set /a "wn -=1"))
)
exit /b !wn!

:diaSemana
::Basado en el algoritmo de Tomohiko Sakamot
::Retorn 1 Monday, 7 Sunday
setlocal enableextensions disabledelayedexpansion
for /f "tokens=* delims=0 eol=0" %%d in ("%~1") do set /a "d=%%d"
for /f "tokens=* delims=0 eol=0" %%m in ("%~2") do set /a "m=%%m"
set /a "y=%~3"
for /f "tokens=%m%" %%t in (
"0 3 2 5 0 3 5 1 4 6 2 4") do set /a "t=%%t"
if %m% lss 3 (set /a y-=1)
set /a "dw=(y+y/4-(y/100)+(y/400)+t+d)%%7"
if %dw% equ 0 (set /a dw=7)
exit /b %dw%

:esBisiesto
setlocal enableextensions disabledelayedexpansion
set y=%~1
set /a "b=(!(y%%4)&!!(y%%100))|!(y%%400)"
exit /b %b%

:extFecha
:: extract day month and year of the current date
:: Adapatacion del code de Herbert Kleebauer
:: Este codigo extrae en tres variables el contenido de la fecha
:: compatible con las distintas configuraciones regionales.
:: Retorna variables d,m,y que corresponden a dia mes año
setlocal enableextensions
set "date="
pushd "%Temp%"
:loop
set d="%date%"
echo.>-.-
if not %d%=="%date%" goto :loop
for /f "tokens=1-3 delims=0123456789 " %%i in (
"%date%") do set d=%%i%%j%%k
for /f "tokens=1-3 delims=%d% " %%i in (
"%date%") do set /a d=1%%i,m=1%%j,y=1%%k
if %d% gtr %m% (
   set d=%m%
   set m=%d%)
if %m% gtr %y% (
   set m=%y%
   set y=%m%)
if %d% gtr %m% (
   set d=%m%
   set m=%d%)
set /a d=%d%-100,m=%m%-100,y=%y%-10000
if %d% gtr 12 goto :eFEof
if %d% equ %m% goto :eFEof
if %m% gtr 12 (
   set m=%d%
   set d=%m%
   goto :eFEof)
xcopy /l /d:%m%-%d%-%y% -.- \|find "-.-" >nul
if errorlevel 1 goto :l1
xcopy /l /d:%d%-%m%-%y% -.- \|find "-.-" >nul
if not errorlevel 1 goto :eFEof
:l1
(set m=%d%
 set d=%m%)
:eFEof
del -.-
popd
(
endlocal
set y=%y%
set m=%m%
set d=%d%
)
setlocal enableextensions && goto :Eof
 

y produce:

Código:
C:\>kal -es

 Septiembre 2009

_Lu__Ma__Mi__Ju__Vi__Sa__Do_
.....01..02..03..04..05.(06)
.07..08..09..10..11..12..13.
.14..15..16..17..18..19..20.
.21..22..23..24..25..26..27.
.28..29..30.................

C:\>kal -es -w

 Septiembre 2009

_____Lu__Ma__Mi__Ju__Vi__Sa__Do_
w36......01..02..03..04..05.(06)
w37..07..08..09..10..11..12..13.
w38..14..15..16..17..18..19..20.
w39..21..22..23..24..25..26..27.
w40..28..29..30.................

C:\>


La opción -w muestra el número de la semana.
34  Programación / Scripting / Re: [Batch] Calendario en: 2 Septiembre 2009, 09:36 am
modificado, por encontrar un error grave en el código.
35  Programación / Scripting / Re: [Batch] Calendario en: 2 Septiembre 2009, 08:01 am
modificado, por encontrar un error grave en el código.
36  Programación / Scripting / Re: [F][bat] Pequeño Filtro - by xassiz en: 2 Septiembre 2009, 06:05 am
está bastante bueno, eso si podrías añadir la coma.
Y siempre asignar con las comillas, mira lo que pasa con la variable z por no encerrarla: con el texto: &calc
Código:
@echo off

setlocal enabledelayedexpansion enableextensions
:prompt
set "t="
set /p t=Texto:
if not defined t (goto :prompt)
for %%a in ("^","&","<",">","|",",") do (set "t=!t:%%~a=^%%~a!")
if not defined t (goto :prompt)

set "v=%t%"
set z=%t%

echo.t=%t%
echo.v=%v%
echo.z=%z%
goto :prompt


Es decir, tu filtro está muy bueno, pero debes indicar esto de las asignaciones para que no haya problemas.
Pero, aún da problemas por ejemplo en un if:

Código:
setlocal enabledelayedexpansion enableextensions
:prompt
set "t="
set /p t=Texto:
if not defined t (goto :prompt)
for %%a in ("^","&","<",">","|",",") do (set "t=!t:%%~a=^%%~a!")
if not defined t (goto :prompt)

if "%t%"=="texto" (echo.Escribio texto)

goto :prompt

si escribes una comilla, se produce un error.

Para el uso que le estás dando, es un buen filtro, pero si utilizas las variables para otras cosas, como dentro de un if, no es un filtro completo.

En todo caso este tema ya está solucionado, básicamente usando expansión retardada en la mayoría de los casos no necesitas escapar ningún carácter.

Mira, como queda así:

Código:
@echo off

:: Mini calculadora creada por xassiz para explicar el uso
:: de un pequeño filtro de variables.

setlocal enabledelayedexpansion
:ini
cls&echo.
set "op="&set/p "op= Escribe tu operacion: "
set/a "res=!op!"
cls&echo.
echo. Operacion: !op!&echo. Resultado: !res!
pause>nul
goto:ini


Te recomiendo leas el artículo de las inyecciones batch, ahí expliqué prácticamente todo.
http://foro.elhacker.net/scripting/inyecciones_batch-t263688.0.html
37  Programación / Scripting / Re: Cómo diferenciar un directorio de un archivo en: 2 Septiembre 2009, 05:25 am
Miren, probé el código de Leo, no funciona bien porque:
por ejemplo:

Código:
C:\>code.bat c:\pagefile.sys
Folder

Se podría usar attrib, pero el problema es que attrib no muestra el atributo de directorio, usando una lógica similar a la de Leo de ver los atributos usando for que se expanden más o menos así si son un archivo:
Código:
---------
si son un directorio:
Código:
d--------
si no existen:
Código:


pero el problema es que con archivos especiales, como el pagefile.sys el for expande como si no existiera.

hice este código más rebuscado, con validaciones:

Código:
@echo off

call :isFolder "%~1"
if errorlevel 0 if not errorlevel 1 (echo.Es archivo)
if errorlevel 1 if not errorlevel 2 (echo.Es directorio)
goto :eof

:isFolder
setlocal enableextensions enabledelayedexpansion
(set n=%~1)
if not defined n (
echo.No se paso ningun parametro.
exit /b 2
)
for %%_ in ("!n!") do set "atr=%%~a_#"
if "#"=="!atr!" (
echo.No se encuentra el archivo o directorio.
exit /b 3
) else (
set i=0
if "!atr:~0,1!"=="d" (set i=1)
)
exit /b %i%


que produce:
Código:
C:\>tipo.bat "c:\Archivos de programa"
Es directorio

C:\>tipo.bat "c:\AUTOEXEC.BAT"
Es archivo

C:\>tipo.bat "c:\pagefile.sys"
No se encuentra el archivo o directorio.

si se fijan el pagefile dice que no se encuentra, así es que a mí parecer la mejor forma es la que había puesto en el post anterior:

Código:
C:\>if exist "c:\pagefile.sys\" (echo.es directorio) else (
¿Más? if exist "c:\pagefile.sys" (echo.es archivo) else (
¿Más? echo.no existe ))
es archivo


Así es que este código está a prueba de balas.

atr.bat
Código
  1. :funAtr
  2. setlocal enableextensions
  3. set /a t=0
  4. if exist "%~1\" (set /a t=1
  5. ) else if exist "%~1" (set /a t=2)
  6. exit /b %t%
  7.  

que devuelve en errorlevel 0 si no existe, 1 si es directorio y 2 si es archivo.
Así que si lo llaman desde otro archivo:

test.bat
Código
  1. @echo off
  2. call atr.bat "%~1"
  3. if errorlevel 0 if not errorlevel 1 (echo.No existe)
  4. if errorlevel 1 if not errorlevel 2 (echo.Es directorio)
  5. if errorlevel 2 if not errorlevel 3 (echo.Es archivo)
  6.  

que produce:
Código:
C:\>test.bat "c:\Archivos de programa"
Es directorio

C:\>test.bat "c:\AUTOEXEC.BAT"
Es archivo

C:\>test.bat "c:\pagefile.sys"
Es archivo

C:\>test.bat c:\dfdsgsfdgfdhfd
No existe

C:\>


38  Programación / Scripting / [Batch] Calendario en: 29 Agosto 2009, 07:38 am
Hola, he realizado un calendario en batch. La idea es que se ejecute desde la línea de comandos, por ello si lo abren haciendo doble clic se abrirá y se cerrará.
39  Programación / Scripting / Re: Averiguar dia de la semana [Batch] en: 27 Agosto 2009, 19:43 pm
genial, distintas soluciones, creo que me equivoqué, el comando que muestra la fecha en la ayuda en windows seven vista o en xp si lo instalas con el resource kit es:
robocopy.

Así:

Código:
robocopy.exe | findstr "Started Inicio"
rem para el comando en español e inglés

produce:

Código:
  Started : Thu Aug 27 13:46:29 2009

o

Código:
  Inicio: Thu Aug 27 13:46:29 2009


Con eso, ya puedes armar un código parseando con for /f.

40  Programación / Scripting / Re: Averiguar dia de la semana [Batch] en: 27 Agosto 2009, 19:30 pm
Mira, consultando la wikipedia hice este código, a lo mejor te sirve.

Nota: Si mal no recuerdo, en windows vista, está el comando forfiles (correción: es robocopy), que en la ayuda te muestra la fecha, así es que para ese sistema operativo, podrías parsear con for /f.

Nota, utilicé el código de Herbert Kleebauer, para extraer la fecha, para que no tengas problemas, debido a que hay distintos formatos de fecha de acuerdo a la configuración regional.

Modificación: :diaFecha estaba mal. La he actualizado.

Código:
@echo off

call :extFecha
call :diaSemana %d% %m% %y%
for /f "tokens=%errorlevel%" %%d in (
"Lunes Martes Miercoles Jueves Viernes Sabado Domingo") do echo.Es: %%d
pause
goto :eof

:diaSemana
::Basado en el algoritmo de Tomohiko Sakamot
::Retorn 1 Monday, 7 Sunday
setlocal enableextensions disabledelayedexpansion
for /f "tokens=* delims=0 eol=0" %%d in ("%~1") do set /a "d=%%d"
for /f "tokens=* delims=0 eol=0" %%m in ("%~2") do set /a "m=%%m"
set /a "y=%~3"
for /f "tokens=%m%" %%t in (
"0 3 2 5 0 3 5 1 4 6 2 4") do set /a "t=%%t"
if %m% lss 3 (set /a y-=1)
set /a "dw=(y+y/4-(y/100)+(y/400)+t+d)%%7"
if %dw% equ 0 (set /a dw=7)
exit /b %dw%

:extFecha
:: extract day month and year of the current date
:: Adapatacion del code de Herbert Kleebauer
:: Este codigo sirve para extraer en tres variables el contenido de la fecha
:: y que sea compatible con las distintas configuraciones regionales.
:: Retorna variables d,m,y que corresponden a dia mes año
setlocal enableextensions
set "date="
pushd "%Temp%"
:loop
set d="%date%"
echo.>_._
if not %d%=="%date%" goto :loop
for /f "tokens=1-3 delims=0123456789 " %%i in (
"%date%") do set d=%%i%%j%%k
for /f "tokens=1-3 delims=%d% " %%i in (
"%date%") do set /a d=1%%i,m=1%%j,y=1%%k
if %d% gtr %m% (
   set d=%m%
   set m=%d%)
if %m% gtr %y% (
   set m=%y%
   set y=%m%)
if %d% gtr %m% (
   set d=%m%
   set m=%d%)
set /a d=%d%-100,m=%m%-100,y=%y%-10000
if %d% gtr 12 goto :eFEof
if %d% equ %m% goto :eFEof
if %m% gtr 12 (
   set m=%d%
   set d=%m%
   goto :eFEof)
xcopy /l /d:%m%-%d%-%y% _._ \|find "_._" >nul
if errorlevel 1 goto :l1
xcopy /l /d:%d%-%m%-%y% _._ \|find "_._" >nul
if not errorlevel 1 goto :eFEof
:l1
(set m=%d%
 set d=%m%)
:eFEof
del _._
popd
(
endlocal
set y=%y%
set m=%m%
set d=%d%
)
setlocal enableextensions && goto :Eof

Páginas: 1 2 3 [4] 5 6 7 8 9 10 11 12 13 14 15 16 17
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines