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

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


  Mostrar Temas
Páginas: 1 [2] 3 4 5
11  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.
12  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á.
13  Programación / Scripting / [Vbscript] ¿Se puede enviar mensajes a una ventana? en: 17 Agosto 2009, 08:37 am
Hola quiero saber si se puede, y si así es: cómo.
¿Se puede enviar mensajes a una ventana?

Sucede que tengo un código hecho en batch, usando nircmdc.exe envío mensajes directamente a una ventana, para resolver puzzles, pero quiero hacerlo con vbscript.

En este caso envío las notificaciones: WM_KEYDOWN y WM_KEYUP
Quiero convertir este código de batch + nircmdc a vbscript:

Código:
@echo off
setlocal enabledelayedexpansion enableextensions

:in
cls
(set lurd=)
set /p lurd=Lurd:
if not defined lurd (goto :in)

:loop_in
set mov=!lurd:~0,1!
set lurd=!lurd:~1!
cls
echo.!mov!
(set kc=0x0)
if /i "!mov!"=="L" (set kc=0x25)
if /i "!mov!"=="U" (set kc=0x26)
if /i "!mov!"=="R" (set kc=0x27)
if /i "!mov!"=="D" (set kc=0x28)
nircmdc win sendmsg ititle " for WINDOWS" 0x100 !kc! 0
nircmdc wait 360
nircmdc win sendmsg ititle " for WINDOWS" 0x101 !kc! 0

if defined lurd (goto :loop_in)
goto :in
14  Programación / Scripting / colores2 en: 13 Agosto 2009, 10:11 am
Bueno, aquí les dejo a colores2, basado en ese script que escribía en colores, pero que mostraba ':'
Bien, me acordé de printf, entonces busqué información sobre cómo modificar un archivo binario con vbscript, y simplemente reemplacé un byte en findstr.exe y creé findstr2.exe
Aquí está la dirección dónde subí el código. No quise "echoear" el código vbs.

http://sites.google.com/site/cmdscripts/home/colores.zip?attredirects=0
15  Programación / Scripting / [vbs]Cómo leer un archivo en modo binario ? en: 13 Agosto 2009, 05:34 am
Hola quiero hacer algo, pero no sé nada de vbs, así es que pido un poco de ayuda por favor.

Lo que quiero es leer un archivo binario y reemplazar 3 bytes, y luego escribir en el mismo archivo

estaba haciendo esto:
Código:
set unFileSystemObject = CreateObject("Scripting.FileSystemObject")
set archivo = unFileSystemObject.OpenTextFile("c:\f.bin", ForReading)
dim contenidoArchivo = archivo.ReadAll
contenidoArchivo = contenidoArchivo.Replace("")

y quiero reemplazar tres bytes, pero en modo binario, es decir supongamos que tengo los bytes:
1 2 3

y quiero reemplazarlos por:

1 2 0

Necesito que sea en binario porque el byte 0 es el ascii 0, y no es imprimible, por eso digo que debe ser binario.

Edito: ya encontré la solución.
16  Programación / Scripting / Inyecciones Batch en: 8 Agosto 2009, 14:57 pm
@echo off

Inyecciones batch

Las inyecciones batch son variables que contienen carácteres especiales y/o texto con significado para cmd.exe y que al ser expandidas de manera simple transforma la línea de comandos.

Por qué les interesa a algunas personas
Porque creen que esto es una materia del "lenguaje archivos por lotes".

Valor práctico de evitarlas
Se trata el contenido de las variables como texto, y se obtienen los resultados esperados.

Problema de seguridad
Pueden ser un problema de seguridad si no se las conoce, y se utiliza un archivo por lotes como autenticador de usuarios en una conexión remota en modo terminal, aunque esto es poco común que se realice, y en mi opinión alejado de la realidad.

Tipos de expansiones de variables
En cmd.exe existen dos tipos de expansiones de variables oficiales, existe una tercera, la del comando set /a:
-Expansión simple: es la más común y utilizada. Se utiliza el carácter de porcentaje a cada lado del nombre de la variable para obtener su contenido. Esta expansión es realizada cuando se lee un comando. Por ejemplo, si dentro de un bloque if creamos una variable que no existía antes, asignándole un valor, y la expandimos de manera simple dentro del mismo bloque, la expansión expandirá vacío porque la expansión se realizó cuando se leyó el bloque del comando if y la variable no contenía nada. Con esta expansión el texto del contenido de la variable puede considerarse como parte de la línea de comandos, y no como solamente texto.

-Expansión retardada: no es tan utilizada. Se utiliza el carácter exclamación final. Con esta expansión el texto del contenido de la variable es considerado en la mayoría de los casos como solamente texto por lo que en salvo casos especiales no modifica la línea de comandos. Esta expansión es realizada cuando se ejecuta el comando por lo que se obtiene el valor actual de una variable en todo momento. Puede utilizarse en conjunto con la expansión simple para obtener el contenido del contenido de una variable. Ejemplo, si tengo una variable llamada valorUno que contiene valorDos, y quiero obtener el valor de valorDos a través de valorUno se puede hacer: !%valorUno%!

Casos improbables, rídiculos, quizás realizados alguna vez.

--------------------------------------------------------------
Caso 1.
conexión con netcat

Equipo servidor:
ip:192.168.0.103
comando para escuchar conexiones:
nc.exe -L -d -e seguridad.bat -p 123

Equipo cliente:
comando para conectarse:
nc.exe -vv 192.168.0.103 123

seguridad.bat:
Código:
@echo off
set /p password=Ingrese password:
if not "%password%"=="mouse" (exit)
cmd

Si presionamos enter, el archivo por lotes finaliza, y la conexión también.
Código:
computador [192.168.0.103] 123 (?) open
Ingrese password:
sent 1, rcvd 17: NOTSOCK

Si nos volvemos a conectar, y escribimos cualquier palabra por ejemplo:12345 como esta no es la palabra mouse que se asignó como password el archivo por lotes finaliza.

Código:
computador [192.168.0.103] 123 (?) open
Ingrese password:12345
sent 6, rcvd 17: NOTSOCK

Ahora, veremos una inyección para este caso:

Código:
"=="" rem
Código:
computador [192.168.0.103] 123 (?) open
Ingrese password:"=="" rem
Microsoft Windows XP [Versión 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

C:\Documents and Settings\Usuario>

¿Qué sucedió?
Como se realizó una expansión simple el texto se mezcló con la línea de comandos y la alteró de esta forma:
Código:
if not ""=="" rem"=="mouse" (exit)
cmd

En la primera línea se forma una valor lógico verdadero con not ""=="" y por ello se comenta el resto de la línea con el comando rem, y se continúa hacia abajo, y se ejecuta cmd.

De esta forma se obtiene acceso a la shell remota sin conocer la password.

--------------------------------------------------------------

Caso 2:
Chat de dos administradores de una escuela mediante servidor telnet.
Este caso tan imaginativo lo expongo simplemente para mostrar el código del chat que se me ocurrió xD, y para dejar claro que las batch injections son un riesgo de seguridad en casos inimaginables.

Se encuentra configurado el servidor telnet de windows, y existen dos cuentas en el sistema con privilegios de administrador.
cuenta 1: rockox
password de cuenta 1: batch

cuenta 2: smart
password de cuenta 2 : qwerty

Bien, el servidor telnet de windows ejecuta luego de autenticar a los usuarios:
Código:
%SYSTEMROOT%\System32\cmd.exe /q /k C:\WINDOWS\system32\login.cmd
(HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\TelnetServer\1.0\)

Y se ha modificado login.cmd con el siguiente contenido:

Código:
@echo off
cls
echo.Bienvenido al chat.
echo.Usuarios conectados:
for /f "skip=4 tokens=3" %%a in ('tlntadmn -s') do echo.-%%a
echo.
echo.Presione cualquier tecla para limpiar la pantalla y comenzar a comunicarse.
pause >nul
cls
:ini
(set msg=)
set /p msg=
if defined msg (
set /a nroUsuarios=0
for /f "skip=4 tokens=1,3" %%a in (
'tlntadmn -s ^| findstr /v "\<-"') do (
if /i "%%b" neq "%username%" (
tlntadmn -m %%a "%msg%" > nul
)
)
)
goto ini


Luego se conectan a la hora de costumbre:

Código:
telnet.exe -l rockox 192.168.0.103
Código:
telnet.exe -l smart 192.168.0.103

Código:
Cliente Telnet de Microsoft

El carácter de escape es "CTRL+}"

Va a enviar información sobre su contraseña a un equipo remoto en la zona Inter
et. Es posible que esto no sea seguro. Desea enviarla de todas maneras(s/n): s

Welcome to Microsoft Telnet Service

password:


Cada uno escribe su password y se conectan.

Al primero se le muestra:

Código:
Bienvenido al chat.
Usuarios conectados:
-rockox

Presione cualquier tecla para limpiar la pantalla y comenzar a comunicarse.

Y al segundo se le muestra:

Código:
Bienvenido al chat.
Usuarios conectados:
-rockox
-smart

Presione cualquier tecla para limpiar la pantalla y comenzar a comunicarse.

el primero escribe:
Código:
hola

y al segundo se le muestra:
Código:
mensaje del rockox desde SERVIDOR el 08-08-2009 6:45:43
hola

y la conversación funciona bien, sin embargo, un alumno estuvo escaneando la red y obtuvo la password de ambos.
Cuando nadie estaba conectado, ingresó al chat, como solo había un usuario conectado, los mensajes no llegaban a ninguna parte porque:
esta línea:
Código:
if /i "%%b" neq "%username%" (
indica que solo se envié el mensaje cuando haya otro usuario conectado. Así es que se conectó con el otro usuario también.
Ahora escribió lo siguiente:
Código:
")


y obtuvo:

Código:
")
No se esperaba " > nul en este momento.

C:\WINDOWS\system32>


En realidad en esta parte:
Código:
tlntadmn -m %%a "%msg%" > nul

lo que hizo fue lo siguiente:
Código:
tlntadmn -m %%a "")" > nul

Se puso un cierre de paréntesis, sin haber puesto uno inicial antes, por lo que ante el error de sintaxis, el archivo por lotes finalizó, y se quedó en modo interactivo, debido a que windows ejecuta con el servidor telnet cmd con el parámetro /K.
Esto muestra que un error de sintaxis también puede considerarse batch injection. En este caso, la conexión no se pierde, por el parámetro /K.

--------------------------------------------------------------

Cómo evitar las batch injections

Usando expansión retardada. Los códigos quedan sin batch injections de la siguiente manera. Simplemente reemplazo los signos de porcentajes por los signos de exclamación, y añado al comienzo setlocal enableextensions enabledelayedexpansion.
enableextensions se agrega de todas maneras, pues hay comandos que solo se ejecutan con esta opción activada, como por ejemplo: goto :eof set /p exit /b
y si se ejecuta cmd /e:off se produce error de sintaxis.


seguridad.bat:
Código:
@echo off
setlocal enableextensions enabledelayedexpansion
set /p password=Ingrese password:
if not "!password!"=="mouse" (exit)
cmd

login.cmd:
Código:
@echo off
setlocal enableextensions enabledelayedexpansion
cls
echo.Bienvenido al chat.
echo.Usuarios conectados:
for /f "skip=4 tokens=3" %%a in ('tlntadmn -s') do echo.-%%a
echo.
echo.Presione cualquier tecla para limpiar la pantalla y comenzar a comunicarse.
pause >nul
cls
:ini
(set msg=)
set /p msg=
if defined msg (
set /a nroUsuarios=0
for /f "skip=4 tokens=1,3" %%a in (
'tlntadmn -s ^| findstr /v "\<-"') do (
if /i "%%b" neq "!username!" (
tlntadmn -m %%a "!msg!" > nul
)
)
)
goto ini


Casos especiales dónde se produce batch injection con expansión retardada.

comando echo on
Código:
set var=on
echo !var!
rem este comando activará el eco.
Para evitar esto utilice como primer separador del comando echo el carácter punto (.) dejándolo así:
Código:
echo.!var!


expansión del comando set /a
el comando set /a con las extensions habilitadas expande el contenido de una variable solo proporcionando el nombre.

Código:
@echo off
setlocal enabledelayedexpansion
:ini
(set p=)
(set g=)
set /p p=Password:
set /a "g=!p:~0,6!+123" >nul 2>&1
if not "!p!"=="!g!" (echo Mal.&goto:ini)
if errorlevel 9009 goto ini
echo Bien.
pause
goto :eof


Este código admite como solución (la coma es un separador dentro del comando set /a permitiendo realizar varios cálculos en una sola línea de izquierda a derecha):
Código:
123,p=
0,p=g,
0,p=0,
g,p=g,


Ejemplo explicativo
Código:
@echo off
setlocal enableextensions enabledelayedexpansion
set numero=-2
set valor=numero
set /a suma=1+2+!valor!
echo.suma=!suma!
pause

Esto produce como resultado en la variable suma:1 porque la expansión retardada expande valor como numero, y set /a realiza otra expansión expandiendo numero con su valor -2

Ahora si el código hubiese sido así:
Ejemplo
Código:
@echo off
setlocal enableextensions enabledelayedexpansion
set numero=-2
set valor=numero
set /a suma=1+2+valor
echo.suma=!suma!
pause

El resultado en la variable suma es 3 porque set /a expande la variable valor y esta no contiene ningún número por lo que se interpreta como 0.


Evitar errores de sintaxis
Para evaluar si el contenido de una variable está vacía es a mí gusto mucho más práctico y mejor hacer:
Código:
if defined variable
rem este comando requiere las extensiones habilitadas

que:

Código:
if "!variable!"==""

Evitar resultados inesperados
En comparaciones númericas con el comando if la única forma de realizarlas correctamente es NO encerrándolas entre comillas, de lo contrario son consideradas como texto, y si se quiere comparar igualdad se debe usar EQU en vez de == porque == es para texto. Tanto equ, neq leq lss geq gtr requieren las extensiones habilitadas.
No hacer:
Código:
if "5"=="5" (...)
Si hacer:
Código:
if 5 equ 5 (...)
rem esto incluso nos permite prescindir de la base (decimal, octal, hexadecimal). Ejemplo:
Código:
if 10 equ 0xA (...)

Hacer un filtro
Para hacer un filtro se requiere ir recorriendo cada carácter, siempre usando expansión retardada, y evalúando si es o no el carácter que queremos.

Ejemplo:
ejemplo de uso la función clean

Código:
@ECHO OFF
SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION

SET /A "I=3"
SET "PWL=ByeWorld"
SET "P=PWL"

:START
@ECHO OFF
CLS
echo.*===============================================================
echo.Bienvenido a Telnet Server de Microsoft.
echo.*===============================================================
IF !I! LEQ 0 EXIT
SET /A "I-=1"
SET "INPUT="
SET /P "INPUT=Password:"
CALL :CLEAN INPUT
@FOR /F %%_ IN ("!P!") DO @IF NOT "!INPUT!"=="!%%_!" (
GOTO :START
)

ECHO.BIENVENIDO.
PAUSE
EXIT /B


:CLEAN
::deja solo caracteres dentro del rango a-z 0-9 y espacio en el contenido de las variables.
::version 2.0
::Recibe un parametro con el nombre de la variable que se quiere filtrar su contenido
::autores: Matt Alvariz , Carlos
@SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
@SET "V=%*"
@SET "S=!%V%!"
@IF NOT DEFINED S EXIT /B 1
@SET "V="
:LOOP
@FOR %%* IN (
" " 0 1 2 3 4 5 6 7 8 9 A B C D E F G
H I J K L M N O P Q R S T U V W X Y Z
) DO @IF /I "!S:~0,1!" EQU "%%~*" SET "V=!V!!S:~0,1!"
@SET "S=!S:~1!"
@IF DEFINED S GOTO :LOOP
@(ENDLOCAL & SET %*=%V%)
@SETLOCAL ENABLEEXTENSIONS
@EXIT /B 0

Evitar interpretar texto dentro del comando set.

Cuando recibimos argumentos a una función, para expandirlos usamos %1 %2 %3 %* y no podemos hacer: !1 !2 !*
Por eso si queremos hacer esta asignación sin interpretarlo, sino considerarlo como texto, debemos encerrar el set entre paréntesis o entre comillas de esta

forma:

Código:
set "valor=%1"
o
Código:
(set valor=%1)

o si expandimos de manera simple dentro de una expansión retardada:

Código:
set "valor=!%contenido%!"
o
Código:
(set valor=!%contenido%!)

Se requiere tener las extensions activadas para usar la forma de las comillas, en cambio para los paréntesis no, pero los paréntesis a veces dan problemas dentro de otros paréntesis, como los bloques de código de un comando for.



Cómo transformar expresiones lógicas con expansiones simples de variables y crear otro comando.

Código:
set /p num=Ingrese numero:
if not defined num (set num=0)
if %num%==10 (echo.si) else (
echo .no
)

batch injection:
Código:
not a

rem cuando no se puede comentar, pues se llega a una línea hacia abajo de error.
Código:
set /p in=Ingrese passw:
if not "mipass"=="%in%" (
echo.mal
) else (
echo.bien
)

batch injection:
Código:
_" if "1"=="0

rem al revés:
Código:
set /p in=Ingrese passw:
if not "%in%"=="mipass" (
echo.mal
) else (
echo.bien
)
batch injection:
Código:
1"=="0" if "_

carácteres usados juntos o separados para provocar error de sintaxis:
Código:
(
)
alt+255
espacio
^
una,dos o tres comillas

Otros textos:
Código:
&cmd^

Bugs de programación
Esto es una observación de cómo un bug del comando for /f permite ignorar parte de un código.
El bug del comando for /f y qué no está en la documentación oficial es que la opción eol siempre debe tener un valor, y si no se específica se asume por defecto el ';'.
El bug consiste en que no puede decirsele al for /f que no asuma ningún carácter como comentario porque siempre considera el siguiente carácter.
Ejemplo:
Código:
for /f "eol=" %%a in ("texto") do rem
aqui considera la comilla del cierre de opciones como carácter de comentario.

Código:
for /f "eol= tokens=1" %%a in ("texto") do rem
aqui se considera el espacio que separa la opción tokens como el carácter de comentario.

Por eso, si uno añade cualquier texto que comience con punto y coma, este se asume como comentario y el contenido de "do" no se ejecuta.

Ejemplo:
En este código para evitar hacer antes un if defined, se agrega al texto y a la clave el carácter '.'. Por eso "entrar" queda como "entrar." y esto es para que si la variable no está definida, %%a no esté vacío y se ignore la parte del "do".

Código:
@echo off
setlocal enabledelayedexpansion enableextensions
:ini
set /p p=Clave:
for /f %%a in ("!p!.") do if "%%a" neq "entrar." (
echo.Mal
goto ini
)
echo Bien.
pause
goto :eof


Parece funcionar bien, por ejemplo si presionamos enter, sin haber escrito nada, o escribimos un texto distinto de "entrar", se nos dice que está mal.
Pero si ingresamos un texto que comience con ; este se asumirá como comentario por la razón antes explicada.

batch injection para este caso especial:
Código:
;

Solución:
No usar for /f o usar el mismo carácter de eol como delimitador y usar todos los tokens. De esta forma se eliminan todos los carácteres iniciales del texto que coinciden con el carácter de la opción eol.

Código:
@echo off
setlocal enabledelayedexpansion enableextensions
:ini
set /p p=Clave:
if "!p!" neq "entrar" (
echo.Mal
goto ini
)
echo Bien.
pause
goto :eof

Código:
@echo off
setlocal enabledelayedexpansion enableextensions
:ini
set /p p=Clave:
for /f "tokens=* delims=; eol=;" %%a in ("!p!.") do if "%%a" neq "entrar." (
echo.Mal
goto ini
)
echo Bien.
pause
goto :eof

Ejemplo, puede ingresarse como password:
Código:
;;;entrar
y como los carácteres iniciales del eol son borrados, funciona, pero si se coloca:
Código:
;;;entrar;;
no funciona.


Expansión de !
Cuando tenemos la expansión retardada activada, dentro de un archivo por lotes estos son los resultados de la expansión:
Código:
! = vacío
!! = vacío
!algo! = expande el contenido de la variable algo, si no está definida está variable, se expande vacío.

Cómo escapar el carácter ! con expansión retardada.
Cuando tenemos expansión retardada puede ser necesario escapar el carácter ! para que éste no sea expandido como vacío.
Por ejemplo dentro del comando set /a existe el operador: ! que significa que el número que procede al operador, si es 0, es convertido a 1, y si el número es distinto de 0, es convertido a 0.

Ejemplo:
Código:
@echo off
setlocal enabledelayedexpansion enableextensions

set /a n=!0
set /a m=!-5
echo.n=%n%
echo.m=%m%

pause
goto :eof

Aquí se nos muestra:
Código:
n=0
m=-5

Esto es porque el carácter ! fue expandido a vacío.

Para escapar el carácter ! con expansión retardada activada se debe hacer así:
Código:
^^!

Por eso el código para que funcione correctamente se debe escribir así:

Código:
@echo off
setlocal enabledelayedexpansion enableextensions

set /a n=^^!0
set /a m=^^!-5
echo.n=%n%
echo.n=%m%

pause
goto :eof

Ahora, nos muestra los resultados correctos:
Código:
n=1
m=0

Eso es todo, y espero que ya no se pierda más el tiempo con este tema.
17  Programación / ASM / Ayuda código detección si se presionó tecla en: 18 Julio 2009, 01:38 am
Hola, quiero conseguir emular la función kbhit() de conio.h pero para dos.
Conseguí el siguiente código en este libro (1001 trucos para DOS y PC y 111 Trucos más de DOS 6 - Kris Jamsa)

que se ensambla con el debug.exe así:

Código:
N CHECKKEY.COM

A 100
MOV AH,B
INT 21
AND AL,1
MOV AH,4C
INT 21

R CX
A
W
Q



Funciona, pero el problema es que tengo es que no me reconoce las teclas de las flechas. Alguien que sepa de ensamblador podría por favor ayudarme con el código de arriba, qué le falta para que me detecte las teclas de las flechas.


Yo lo construyo así dentro de cmd:
Código:
debug.exe < arhivo.txt

y lo pruebo con este batch:

Código:
@ECHO OFF
:ini
cls
CHECKKEY.COM
if errorlevel 1 echo.Presiono una tecla&pause
goto ini

Cuando presiono una tecla como las del abecedario, el espacio, cambia el errorlevel, pero cuando presiono las flechas o las teclas insertar, avanzar página no las detecta, y se marea para seguir detectando.
18  Programación / Scripting / [Batch] For dentro de for en: 25 Junio 2009, 09:58 am
Hace tiempo que quería hacer un for dentro de otro for, y por fin me resultó, solo tenía que escapar los paréntesis.

Aquí una utilidad:

Código:
@echo off
setlocal enabledelayedexpansion

set desordenados=100 008 066 077 000 520
call :ordenar %desordenados%
echo.Desordenados:%desordenados%
echo.Ordenados:%ordenados%
pause
goto :eof

:ordenar
for /f "tokens=*" %%a in (
'
^(for %%_ in ^(%*^) do @echo.%%_^)^|sort
'
) do set ordenados=!ordenados!%%a

goto :eof

De esa forma se evita tener que escribir a un archivo, puede que tenga más utilidades.
19  Seguridad Informática / Nivel Web / Curiosidad revision páginas de google. en: 11 Junio 2009, 23:17 pm
He notado que se puede acceder a las distintas versiones de las páginas y los archivos de google sites.
Cuando se hace clic en el enlace de historial de versiones, solicita loguearse.
Pero cuando se agrega la variable revision y el numero, puede accederse igualmente a las distintas versiones:

Ejemplo:
Código:
http://sites.google.com/site/nombre_de_sitio/Home?revision=1
20  Programación / Scripting / Comandos desconocidos de cmd en: 12 Mayo 2009, 01:00 am
En for /f puede usarse la opción useback, que es nuevo para mí ya que los documentos dicen que es: usebackq.
Bueno, las dos opciones funcionan:

Código:
@echo off

for /f "usebackq" %%a in ('texto') do echo.%%a
rem el usebackq de toda la vida.

for /f "useback" %%a in ('texto') do echo.%%a
rem el useback nuevo para mi.
pause

Otro comando nuevo para mí es: keys

Páginas: 1 [2] 3 4 5
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines