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 - leogtz

#46
Hacking / Procedencia de archivo
16 Junio 2010, 03:48 AM
Hola, quisiera saber si hay alguna manera de saber de donde viene el archivo, es decir, de qué maquina viene.

No es en red ni nada.

Supongamos que me pasan una imagen en un CD, quisiera saber en qué máquina estuvo, es decir, obetener cierta información.

Saludos.
#47
Scripting / Traductor inglés español [Bash]
9 Junio 2010, 00:42 AM
Bueno, este mini código lo hice hace 1 mes, simplemente para no tener que abrir el navegador y teclear todo ahí.

El código funciona de dos maneras, una mediante un inputbox y la otra mediante la línea de comandos:

leo@lein:~/Escritorio$ bash trans "i want to fly with you"
Quiero volar contigo
leo@lein:~/Escritorio$



Código (bash) [Seleccionar]
#!/bin/sh
# Leo Gutierrez R.
# matthewbauer, http://www.commandlinefu.com <--- Búsqueda en google traductor.
if [ $# -eq 0 ];
then
while true
do
Xdialog --title "Bash translator" \
         --inputbox "Input:" 10 45 2> /tmp/inputbox.tmp.$$
  retval=$?
  input=`cat /tmp/inputbox.tmp.$$`
  rm -f /tmp/inputbox.tmp.$$
  case $retval in
    0)
cmd=$( wget -qO- "http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&q=$input&langpair=en|es" | sed 's/.*"translatedText":"\([^"]*\)".*}/\1\n/'; ); 
Xdialog --title "Bash translator" --msgbox "$cmd" 0x0
;;
1)
exit 0
;;
255)
echo -e "Box closed."
;;
esac
done
else
cmd=$( wget -qO- "http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&q=$1&langpair=en|es" | sed 's/.*"translatedText":"\([^"]*\)".*}/\1\n/'; ); 
echo -e "$cmd"
exit 0
fi
#48
Pregunto esto porque hace mucho no uso Windows, y menos Windows 7, digamos que por cuestiones de tiempo debo hacerlo hoy, y quería saber si es facil.

¿Alguna ayuda?
#49
Scripting / RAE Search, soft [PERL]
6 Abril 2010, 01:59 AM
Hola, aquí les dejo este pequeño programita que hice para buscar entradas en la Real Academia Española, le puse interfaz gráfica con Gtk2:



Aquí está el código:

Código (perl) [Seleccionar]
#!/usr/bin/perl
use warnings;
use strict;
use LWP::Simple;
use Gtk2 '-init';
use constant TRUE => 1;
use constant FALSE => 0;

binmode STDOUT, ":encoding(UTF-8)";

sub raeSearch()
{
       my $rae = get("http://buscon.rae.es/draeI/SrvltGUIBusUsual?LEMA=$_[0]");
my $resultado;
       while ($rae =~ m/name="[\d_]+"> (.*?) <\/p/smgix)
       {
               my $desc = $1;
               # Quitar las marcas HTML
               $desc =~ s/<.*?>//gsm;
               # Quitar los espacios a los lados
               $desc =~ s/^\s+//sm;
               $desc =~ s/\s+$//sm;
               # Quitar espacios excesivos
               $desc =~ s/\s+/ /gsm;
$resultado .= "$desc\n";
       }
return $resultado;
}

# Propiedades de ventana:
my $window = Gtk2::Window->new();
$window->set_title("Rae Search");
$window->set_border_width(3);
$window->signal_connect(destroy => sub{Gtk2->main_quit});
$window->set_auto_startup_notification(TRUE);
$window->set_decorated(TRUE);
$window->set_default_icon_from_file("camel.ico");
$window->move(0, 0);
$window->resize(700, 100);
$window->set_resizable(TRUE);

# Frame:
my $frame = Gtk2::Frame->new("Entrada");

# VBox:
my $vbox = Gtk2::VBox->new(FALSE, 10);
$vbox->pack_start($frame, TRUE, TRUE, 0);

# HBox:
my $hbox = Gtk2::HBox->new(FALSE, 6);

# Entry:
my $dir_entry = Gtk2::Entry->new_with_max_length(30);
$dir_entry->set_text("encono");
$dir_entry->set_activates_default(FALSE);
$dir_entry->set_position(100);

# Button:
my $button = Gtk2::Button->new("_Buscar");
$button->set_focus_on_click(TRUE);
my $rae;

# TextView  :
my $textview = Gtk2::TextView->new();
$textview->set_border_window_size('top', 1);
my $buffer = $textview->get_buffer;

$button->signal_connect(clicked => sub
{
$buffer->set_text(&raeSearch($dir_entry->get_text));
}
);

# Scroll Window :

my $scroll = Gtk2::ScrolledWindow->new();
$scroll->set_policy('automatic', 'automatic');
$scroll->set_shadow_type('out');
$scroll->add($textview);
$vbox->pack_end($scroll, TRUE, TRUE, 0);
$frame->add($hbox);
$hbox->pack_start($dir_entry, FALSE, FALSE, 0);
$hbox->pack_start($button, FALSE, FALSE, 0);
$window->add($vbox);
$window->show_all;
Gtk2->main;


Agradezco a explorer de perlenespanol.com por la ayuda brindada.

El programa es sencillo, pero me sirvió mucho, aprendí bastantes cosas con este proyectito.

El código necesita este icono para funcionar:
http://icone.goldenweb.it/download_file/d2/animals/c/jenanimals/file/camel/ext/.ico/default.html

O sino quieren  descargar el icono, solo quiten esta línea:
Código (perl) [Seleccionar]
$window->set_default_icon_from_file("camel.ico");

Saludos.
#50
Java / Dudas con Strings
2 Abril 2010, 04:11 AM
Hola a todos, mi duda es sencilla.

He estado buscando una manera de modificar cierta posición de una cadena(vector[indice]), algo así:

String cadena = new String("HOLA");
cadena[0] = cadena.charAt(cadena.length() - 1);

Claro que me da error, porque son diferentes tipos de datos.

Lo que quiero es modificar el primer indice por el último caracter de la cadena.

De una manera general, tratar con las posiciones de una cadena.

Lo que intento es rotar una simple cadena, pero estoy teniendo problemas para hacerlo, siempre me da lo mismo, mi algoritmo en C funciona bien, aquí en Java no.
Código (java) [Seleccionar]

public class learn
{
    public static void voltear(String string)
    {
        char vector[] = string.toCharArray();
        vector[0] = string.charAt(string.length() - 1);
        for(int i = 1; i < string.length(); i++)
            vector[i] = string.charAt(i - 1);
        System.out.println(vector);
       
    }
    public static void main(String []args)
    {
        String string = new String("HOLA");
        for(int i = 0; i < string.length(); i++)
        voltear(string);
    }
}
#51
Scripting / Busqueda en la RAE (rae.py)
1 Abril 2010, 04:48 AM
Código (python) [Seleccionar]
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Author : Leo Gutiérrez Ramirez, leorocko13@hotmail.com
# html2txt by Francois Granger, <fgranger@altern.org>
import sys
import re
import urllib

def Usage():
print "\nRealiza busquedas en el diccionario de la [Real Academia Española]\n";
print "\t" + sys.argv[0] + " Palabra\n";
sys.exit(1);

if len(sys.argv) <= 1:
Usage();

url = "http://buscon.rae.es/draeI/SrvltGUIBusUsual?LEMA=" + sys.argv[1]
f = urllib.urlopen(url);
texto = f.read();
f.close();

# Convierte el código HMTL a texto para ser mostrado correctamente en la consola:

p = re.compile('(<p.*?>)|(<tr.*?>)', re.I)
t = re.compile('<td.*?>', re.I)
comm = re.compile('<!--.*?-->', re.M)
tags = re.compile('<.*?>', re.M)

def html2txt(texto, hint = 'entity', code = 'ISO-8859-1'):
        texto = texto.replace('\n', '') # remove returns time this compare to split filter join
        texto = p.sub('\n', texto) # replace p and tr by \n
        texto = t.sub('\t', texto) # replace td by \t
        texto = comm.sub('', texto) # remove comments
        texto = tags.sub('', texto) # remove all remaining tags
        texto = re.sub(' +', ' ', texto) # remove running spaces this remove the \n and \t
# Handling of entities
result = texto;
pass;
return result;
print html2txt(texto);
sys.exit(0);


Modo de uso:
python rae.py palabra
#52
Java / Duda, código sencillo.
3 Marzo 2010, 02:39 AM
Hola, estoy iniciandome en Java, y tengo un ejercicio de eliminar los múltiplos de 5 y de 2 en un ArrayList, creo que mi algoritmo está bien, pero no encuentro porque no me elimina todo.

Se supone que es una lista, y voy eliminando la posición "i" en caso de que sea multiplo de 5 o 2.
Código (java) [Seleccionar]
no los elimina a todos. Mi código es el siguiente:
import java.util.*;
public class *****
{
public static void main(String[] args)
{
ArrayList<Integer> valores = new ArrayList<Integer>();
int valor, limite = 20;
for(int i = 0; i < limite; i++)
{
valor = (int)(Math.random() * 100);
valores.add(valor);
}
System.out.println("Deteccion de multiplos de 5 y 2");
for(int i = 0; i < valores.size(); i++)
{
if(valores.get(i) % 5 == 0)
{
System.out.println(valores.get(i) + " <--- 5");
}
else if(valores.get(i) % 2 == 0)
{
System.out.println(valores.get(i) + " <--- 2 ");
} else {
System.out.println(valores.get(i));
}
}
// Eliminacion:
for(int i = 0; i < valores.size(); i++)
{
if(valores.get(i) % 5 == 0)
{
valores.remove(i);
limite--;
} else if(valores.get(i) % 2 == 0)
{
valores.remove(i);
limite--;
}
}
                       // Verificar
System.out.println("Deteccion de multiplos de 5 y 2");
for(int i = 0; i < valores.size(); i++)
{
if(valores.get(i) % 5 == 0)
{
System.out.println(valores.get(i) + " <--- 5");
}
else if(valores.get(i) % 2 == 0)
{
System.out.println(valores.get(i) + " <--- 2");
} else {
System.out.println(valores.get(i));
}
}

}
}


Y esta es la salida:

Deteccion de multiplos de 5 y 2
59
39
94 <--- 2
9
51
48 <--- 2
92 <--- 2
62 <--- 2
46 <--- 2
94 <--- 2
88 <--- 2
4 <--- 2
25 <--- 5
22 <--- 2
66 <--- 2
63
36 <--- 2
50 <--- 5
71
3
Deteccion de multiplos de 5 y 2
59
39
9
51
92 <--- 2
46 <--- 2
88 <--- 2
25 <--- 5
66 <--- 2
63
50 <--- 5
71
3
#53
Java / try catch, bucle
13 Febrero 2010, 00:58 AM
Hola a todos.

Mi pregunta es cómo hacer un bucle mientras se ingresen datos de otro tipo, ejemplo:

Código (java) [Seleccionar]
import java.io.*;
public class pedo
{
       public static void main(String[] args)
       {  
               InputStreamReader isr = new InputStreamReader(System.in);
               BufferedReader br = new BufferedReader(isr);
               int n_elementos;
               while(?)
               {
                       try
                       {
                               n_elementos = Integer.parseInt(br.readLine());
                       } catch(Exception e)
                       {
                               e.printStackTrace();
                       }
               }
       }
}


Repetir el bucle mientras se teclee algo ajeno a un entero, manejar las excepciones.
#54
Hola, recurro a ustedes por desperación, he probado de todo para que el Windows Live Messenger conecte.

Windows Live Messenger 2009, sobre Windows Vista Basic

El código de error es 80072efd, yo sé que el error es muy común, y claro que ya busqué todas las soluciones posibles en la red, pero nada funciona, es imposible.

Llevo más de 4 horas y no ha querido, agradezco cualquier sugerencia.
#55
Multimedia / Convertir video a imagenes
19 Diciembre 2009, 20:05 PM
¿Qué software me permite hacer eso?

Ya sea para GNU/Linux o Windows.
Gracias.
#56
Hola a todos.
Estoy aprendiendo un poco de Java, quisiera saber como ejecutar un programa desde la consola de comandos.
¿Cual es la sintaxis o el programa que me permite eso?
Yo normalmente ejecuto los codigos desde el "runner" de Eclipse.
Estoy en Ubuntu 8.04 - Hardy Heron.

#57
Java / Empezar con Java
26 Agosto 2009, 04:01 AM
No les pido manuales ni nada, solo como empiezo a teclear código y probar.

¿Que IDE, o que necesito?

Estoy en Ubuntu Hardy Heron 8.04.

Nota : Me estoy empezando en Java por que me darán POO en la universidad y nos enseñarán este lenguaje.


Saludos cordiales a todos.
#58
Scripting / Buscar en Wikipedia [PERL]
22 Agosto 2009, 21:04 PM
Para todo uso mi consola de comandos, hice este script para que me diera la salida en mi consola.

Código (perl) [Seleccionar]
#!/usr/bin/perl
use strict;
use warnings;
if($#ARGV != 0)
{
print "$0 \"Busqueda\"\n";
exit(0);
}
$ARGV[0] =~ s/(\w+)/\u\L$1/g;
use WWW::Wikipedia;
my $wiki = WWW::Wikipedia->new();
$wiki = WWW::Wikipedia->new(language => 'es');
my $result = $wiki->search("$ARGV[0]");
if(!$result)
{
print "Error: ", $wiki->error(), "\n";
exit(1);
}
if($result->text())
{
      print $result->text();
  }
exit(0);


leo@lein:~/Escritorio/pl$ perl pl.pl "Linus Torvalds"
{{Ficha de persona |nombre= Linus Benedict Torvalds |imagen= Linus Torvalds.jpeg
|descripción = Torvalds en 2002 |fecha de nacimiento= 28 de diciembre de 1969
() |lugar de nacimiento= , Helsinki |fecha de fallecimiento= |lugar de
fallecimiento= |nacionalidad = finlandés |ocupación= Ingeniero de software
|cónyuge= Tove Torvalds }} 'Linus Benedict Torvalds' (nacido el 28 de diciembre
de 1969), es un ingeniero de software finlandés; es conocido por desarrollar la
primera versión del núcleo de sistema operativo (kernel) Linux, basándose en
el sistema operativo libre Minix creado por Andrew S. Tanenbaum y en algunas
herramientas, los compiladores y un número de utilidades desarrollados por el
proyecto GNU. Actualmente Torvalds es responsable de la coordinación del
proyecto. Pertenece a la comunidad hablante de sueco de Finlandia (que también
es oficial y hablado por aproximadamente el 6% de la población).
leo@lein:~/Escritorio/pl$ perl pl.pl "octavio paz"
{{Ficha de escritor |Nombre = Octavio Paz | |Imagen=Paz0.jpg
|TextoImagen=Octavio Paz Lozano |Fecha_nacimiento=31 de marzo de 1914
|Lugar_nacimiento=Ciudad de México, |Fecha_fallecimiento=19 de abril de 1998
|Lugar_fallecimiento=Ciudad de México, |Ocupación=Poeta, escritor, ensayista y
diplomático |Nacionalidad=Mexicano |Periodo=1939-1998 |Género=poesía
|Movimiento=Modernismo |Influencias=Ruben Dario<br />Juan Ramón Jiménez<br
/>Antonio Machado<br />Gerardo Diego |Firma= |Website= |Notas= }}

'Octavio Paz Lozano' (* Ciudad de México, 31 de marzo de 1914 - ídem; 19 de
abril de 1998), fue un poeta, escritor, ensayista y diplomático mexicano,
(1990). Es considerado uno de los más grandes escritores del siglo XX y uno de
los grandes poetas hispanos de todos los tiempos.<ref name=ColNac></ref> Era un
escritor prolífico cuya obra abarcó varios géneros, entre los que
sobresalieron textos poéticos, el ensayo y traducciones.
leo@lein:~/Escritorio/pl$ perl pl.pl
pl.pl "Busqueda"
leo@lein:~/Escritorio/pl$
#59
Bug en comando FOR, parametro /f, opcion "USEBACKQ"

Este bug esta relacionado con el trato de cadenas.

La documentación sobre dicha opción dice:
        usebackq        - especifica que la nueva semántica está vigente,
                          donde una cadena entre comillas inversas se ejecuta
                          como un comando y una cadena con comillas simples
                          es un comando de cadena literal y permite el uso de
                          comillas dobles para entrecomillar los nombres de
                          archivo en un grupo de nombres de archivos.

Es decir, cambia la semantica:
'' : Comandos
"" : Cadenas
No especificar comillas dobles o simples : Archivo.

Nos dice que para procesar cadenas, debemos usar comillas simples:

Código (dos) [Seleccionar]
@echo off
for /f "tokens=1 usebackq" %%_ in ('Leonardo') do (
echo %%_
)

Salida:
Leonardo


Como pueden ver, usamos comillas simples para tratar cadenas.

Sin la opción "usebackq" sería asi:
Código (dos) [Seleccionar]
@echo off
for /f "tokens=1" %%_ in ("Leonardo") do (
echo %%_
)

Salida:
Leonardo


Ahora, iré directo al problema que afecta a las opciones "useback" y "usebackq":

Esto produce un error:
Código (dos) [Seleccionar]
@echo off
for /f "tokens=1 usebackq" %%_ in ('1 2 3 4 5 6 7 8 10 11 12') do (
echo %%_
)

Salida:

C:\>code.bat
1
El sistema no puede encontrar el archivo Ɛ§㏀§럀§풘§>♂.

C:\>

Como ven, provoca un error, ya que busca un archivo, pero es claro que no estoy trabajando con archivos, sino con cadenas.

Estos también provocan error:

Código (dos) [Seleccionar]
@echo off
for /f "tokens=1 useback delims=" %%_ in ('p1 p2 p3 p4 p5 p6 p7 p8 p9') do (
echo %%_
)

Salida:

p1 p2 p3 p4 p5 p6 p7 p8 p9
El sistema no puede encontrar el archivo ?.


Código (dos) [Seleccionar]
@echo off
for /f "tokens=1-20 useback delims=_" %%a in ('p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p12 p13 p14') do (
echo %%a   
)

Salida:
p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p12 p13 p14
☼?♀\.stema no puede encontrar el archivo ?¶


En fin, esto esta probado en un Windows XP Professional Service Pack 3

Si me pudieran hacer el favor de probar si en otros sistemas falla, sino les da error, solo alteren la cantidad de tokens en el conjunto, asi:

Código (dos) [Seleccionar]
@echo off
for /f "tokens=1-20 usebackq" %%a in ('1 2 3 4 5 6 7 8 9 11 12 13 14 16 especificar ms tokens en caso de no ver error') do (
echo %%a   
)


Bueno, saludos.
#60
Bueno, esto es algo nuevo que acabo de descubrir (de antemano una disculpa si alguien ya había tratado esto)

Se trata de insertar comentarios en el código, usando :: con el caracter ^

Ejemplo:
Código (dos) [Seleccionar]
@echo off
echo Hola mundo.
::^
Comentario1 Algo algo algo^
Comentario2asd kdfklg algo algo algo^
Comentario3 Esta linea puede ser con espacios, las demas no.
echo Adios mundo.
pause>nul
exit /b 0


Salida:
Hola mundo.
Adios mundo.


Como ven, los comentarios son ignorados.

También se puede usar REM, pero hay problemas con los espacios, ejemplo:
Código (dos) [Seleccionar]
@echo off
echo Hola mundo.
rem ^
Comentario1^
Comentario2^
Comentario3
echo Adios mundo.
pause>nul
exit /b 0


Salida:
Hola mundo.
Adios mundo.


Saludos a todos.
#61
Scripting / Funcion Palindrome [Batch]
15 Junio 2009, 01:09 AM
Basicamente se pide una palabra, se pone la cadena de forma inversa y se compara con la primera pedida al usuario.

Código (dos) [Seleccionar]
@echo off
if exist "file.txt" (del /f /q "file.txt")
setlocal enabledelayedexpansion
:code
set /p "cadena=Cadena : "
if not defined cadena (goto:code)
set "cadena_=%cadena%"
set /a "longitud-=1"
:bucle
set "cadena=%cadena:~1%"
set /a "longitud+=1"
if defined cadena goto:bucle
for /l %%_ in (%longitud%=-1=0) do <nul set /p "=!cadena_:~%%_,1!" >> "file.txt"
for /f "tokens=*" %%_ in (file.txt) do (
if /i "%cadena_%"=="%%_" (echo.Palindrome) else (echo.No palindrome)
)
pause>nul 2>&1
exit /b 0


Salida:
C:\>este
Cadena : seres
Palindrome

C:\>este
Cadena : algo
No palindrome

C:\>este
Cadena : ana
Palindrome

C:\>este
Cadena : Lalo
No palindrome

C:\>este
Cadena : arenero
No palindrome

C:\>este
Cadena : arenera
Palindrome

C:\>
#62
1.-Otras formas de separar los elementos del conjunto en parametro /L:

FOR /L %variable IN (inicio, paso, fin) comando DO
Los elementos del conjunto FOR, los podiamos separar de la siguiente manera:
for /l %%_ in (1 1 10) do (Acciones)
for /l %%_ in (1,1,10) do (Acciones)

He experimentado con algunas otras:
Código (dos) [Seleccionar]
for /l %%_ in (1;1;10) do (echo %%_)
for /l %%_ in ([1;1;10]) do (echo %%_)

En este hubo un ligero cambio, no inició desde 1, sino desde 0, luego explicaré por qué.
Código (dos) [Seleccionar]
for /l %%_ in ([1,1,10]) do (echo %%_)
Lo mismo, inicia desde 0.
Por qué inicia desde 0 y no de 1?
Aqui:
Código (dos) [Seleccionar]
for /l %%_ in ([1,1,[10]]) do (
echo %%_
)

El primer 1 no es reconocido como un elemento valido y lo inicia desde 0, da lo mismo que hicieramos:
Código (dos) [Seleccionar]

for /l %%_ in ("1" 1 20) do (echo %%_)

Igual lo iniciaría en 0.

Esto puede tener una aplicación práctica, ya sea para confundir un código:
Código (dos) [Seleccionar]
for /l %%_ in (
{[200]}
2
100
) do (
echo %%_
)

Se forza a que el primer elemento empieze por 0.

2.-Especificar numeros en hexadecimal como elementos del conjunto, para el parametro /L
FOR /L %variable IN (inicio, paso, fin) comando DO
Código (dos) [Seleccionar]
for /l %%_ in (0x0001 0x0001 0x0064) do (echo %%_)
Muestra una lista desde 1 hasta 100.
Tambien se puede especificar valores negativos:
Código (dos) [Seleccionar]
for /l %%_ in (-0x0004 0x0001 0X0064) do (echo %%_)
Combinar decimal con hexadecimal:
Código (dos) [Seleccionar]
for /l %%_ in (0x0001 0x0001 100) do (echo %%_)
Más ejemplos:
Código (dos) [Seleccionar]
for /l %%_ in (0x64 0x01 0xC8) do (
pause
echo %%_
)

Código (dos) [Seleccionar]
for /l %%_ in (0x01 0x01 0x64) do (
echo %%_
)


3.-Nueva forma de poner comentarios, sobre el conjunto del comando FOR, parametro /L
FOR /L %variable IN (inicio, paso, fin) comando DO
Código (dos) [Seleccionar]
for /l %%_ in (1Uno 1Incremento_de_uno 100Hasta_100) do (
echo %%_
)

Como ven, se puede poner texto despues del elemento "inicio" "paso" y "fin".
Otra manera, a mi parecer mas comoda:
Código (dos) [Seleccionar]
for /l %%_ in (2"Dos demas comentarios" 2"Dos dems comentarios" 100"Cien dems comentarios") do (
echo %%_
)

Otros ejemplos:
Código (dos) [Seleccionar]
for /l %%_ in (
1-"Empezamos en uno"
1-"Con un incremento de una unidad"
100-"Terminamos en 100"
) do (
echo %%_
)

Incluso pueden poner caracteres especiales dentro del comentario, son completamente ignorados.

Combinadas todas las técnicas:
Código (dos) [Seleccionar]
@echo off
for /l %%_ in (
{[-0x001E]}-"Especifico -30 en hexadecimal, pero es ignorado y empieza en 0, por los {[]}"
;2-"Especifico 2 en decimal, incrementa la unidad en 2"
;0x0064-"100 en hexadecimal, el loop termina en 100"
) do (
echo %%_
ping -n 1 loopback > nul 2>&1
)

Salida:
0
2
4
6
8
10


Nota: Estas son cosas que he descubierto solo, si algunas de ellas ya estaban documentadas, haganmelo saber.

Leo Gutiérrez Ramirez.

Saludos.
#63
Scripting / Juego Ahorcado v.1.1 [Bash]
4 Mayo 2009, 06:57 AM
Hola, hoy hice el juego del Ahorcado en Bash:


Solo hice el motor basico, luego dibujo el monito.
Código (bash) [Seleccionar]
#!/usr/bin/bash
# Juego de ahorcado
# Leo Gutierrez R
# leorocko13@hotmail.com

# Declarar seguir_o_no
intentos=0
contador=0
function pause()  # Funcion pause, ya que no existe en linux
{
read -p "$*"
}
function limpiar()
{
clear
}
limpiar
echo; echo Ahorcado v1.1, Leo Gutierrez Ramirez.; echo
pause 'Presione una tecla para iniciar'.
declare -a palabra_user[20];
echo;
read -p "Palabra : " palabra_user2                # Se lee la palabra
let longitud=`expr length "$palabra_user2"`-1     # Sacar la longitud de la palabra:
# echo $longitud
for i in $(seq 0 $longitud);
do
palabra_user[$i]=${palabra_user2:$i:1}            # Se mete cada caracter en un subindice, en el array palabra_user[x]
# echo palabra_user[$i] = ${palabra_user[$i]}
done
read -p "Defina el numero de intentos : " intentos       # No. de intentos que puede cometer el usuario.
declare -a palabra_adivinar[$longitud];
for i in $(seq 0 $longitud);
do
palabra_adivinar[$i]=_                            # Se meten guiones en cada subindice de palabra_adivinar[x]
echo ${palabra_adivinar[$i]};
done
limpiar;
# Mostrar guiones :
while test $contador -le $intentos
do
echo;echo;
for i in $(seq 0 $longitud);
do
echo -n "${palabra_adivinar[$i]} ";
done
echo;
echo "Letra :                                                      Intentos: $contador de $intentos"
read letra
echo $palabra_user2 | grep "$letra" > nul 2>&1 || let contador+=1
# Busqueda secuencial :
for i in $(seq 0 $longitud);
do
if [ ${palabra_user[$i]} = "$letra" ];then
palabra_adivinar[$i]=$letra
fi
done
# Mostrar los guiones :
echo;echo;
for i in $(seq 0 $longitud);
do
echo -n "${palabra_adivinar[$i]} ";
done
echo;echo;
limpiar
# Aqui va el IF y el break:
if [ "$contador" -ge "$intentos" ];
then
break
fi
i=0
cadena_final=`while test $i -le $longitud; do echo -n ${palabra_adivinar[$i]}; let i+=1; done`
# echo Cadena final : $cadena_final
if [ "$cadena_final" == "$palabra_user2" ];
then
break;
fi
done
if [ "$cadena_final" == "$palabra_user2" ];
then
echo Felicidades, has ganado.
echo Ahorcado v1.1
echo Leo Gutierrez R.
elif [ "$cadena_final" -ne "$palabra_user2" ];
then
echo Lo siento, has perdido.
echo Ahorcado v1.1
echo Leo Gutierrez R.
fi
exit 0


Si alguien me pudiera hacer el favor de decirme como dibujar el monito, se me hace demasiado tedioso hacerlo a mano.

Saludos.
#64
Hola, siguiendo con el descubrimiento que ha hecho Carlos:
CitarLa utilidad de mi descubrimiento es que por ejemplo si antes declaraban:

Código:

for /f "tokens=1-4" %%Y in ("p1 p2 p3 p4") do (
echo %%Y%%Z...
)


y querían mostrar el token 1,2,3,4 solo podíamos mostrar el token 1 y 2, porque luego de %%Y viene %%Z y después ... no sabíamos que letra venía.

Entonces ahora podemos hacer:
Código:

for /f "tokens=1-4" %%Y in ("p1 p2 p3 p4") do (
echo %%Y%%Z%%[%%\
)


He descubierto que tambien podemos usar numeros en la variable del for, de la siguiente manera.

@echo off
for %%^1 in (
hola,
adios,
si,
no,
Ok,
bye
) do (
echo %%^1
)

for /l %%^6 in (1 1 10) do (
echo %%^6
)


for /d /r %%^2 in (*) do (
echo %%^2
)

for /f "tokens=1,2,3" %%^0 in ('ver') do (
echo.%%^0 %%^1 %%^2
)


for %%^1 in ("%~nx0") do (
echo %%~nxt^1
)



for /f "tokens=1" %%^7 in ('ver') do (
echo.%%^7
)
Esto no está documentado, al menos que yo sepa.

Rob Van der Woude :
CitarHi Leonardo,

Amazing! Yet another new feature discovered in CMD, after all these years...
I added your tip on my Clever Tricks page (http://www.robvanderwoude.com/clevertricks.php#FORListNumbers) with a link from the Program Flow section of my Batch Techniques page (http://www.robvanderwoude.com/battech.php#Flow).

Thanks again,

Rob
Citar
Leonardo Gutierrez Ramirez also found a way to use numbers as variables in a FOR loop:

   Hi, I have discovered that we can use numbers in the variable FOR command, like this:

   FOR /L %%ˆ6 IN (1 1 10) DO (
       ECHO %%ˆ6
   )

   FOR /D /R %%ˆ2 IN (*) DO (
       ECHO %%ˆ2
   )

   FOR /F "tokens=1,2,3" %%ˆ0 IN ('VER') DO (
       ECHO.%%ˆ0 %%ˆ1 %%ˆ2
   )

   FOR %%ˆ1 IN ("%~nx0") DO (
       ECHO %%~nxtˆ1
   )

   FOR /F "tokens=1" %%ˆ7 IN ('VER') DO (
       ECHO.%%ˆ7
   )

   FOR %%ˆ1 IN ("%~nx0") DO (
       ECHO %%~nxatdˆ1
   )

Combined with Carlos' extension of the available variables in FOR loops, we can now, in theory at least, nest up to 75 FOR loops!
Not that I would want to maintain such code...

Thanks Leo

http://www.robvanderwoude.com/clevertricks.php#FORListNumbers

http://www.robvanderwoude.com/battech.php#Flow

Saludos.
#65
Scripting / Algoritmo numeros primos [Batch]
14 Abril 2009, 04:56 AM
Código (dos) [Seleccionar]
@echo off
:: Algoritmo de numeros primos, Leo Gutierrez R.
:code
set /p "numero=Numero : "
if not defined numero (goto:code)
set /a "contador=1"
set /a "divisores=0"
set /a "numero_=numero+1"
set /a "suma=0"
:bucle
if %contador% equ %numero_% (goto:end)
set /a "operacion=%numero% %% %contador%"
if %operacion% equ 0 (
set /a "divisores+=1"
set /a "suma+=%contador%"
)
set /a "contador+=1"
goto:bucle
:end
set /a "_=%numero%+1"
if %suma% equ %_% (echo.Es primo) else (echo.No es primo)
goto:eof


Salida:

C:\>code
Numero : 2
Es primo

C:\>code
Numero : 4
No es primo

C:\>code
Numero : 19
Es primo

C:\>code
Numero : 23
Es primo

C:\>code
Numero : 3
Es primo

C:\>code
Numero : 5
Es primo

C:\>
#66

De Wikipedia, la enciclopedia libre
Un número perfecto es un número natural que es igual a la suma de sus divisores propios positivos, sin incluirse él mismo. Dicho de otra forma, un número perfecto es aquel que es amigo de sí mismo.

Así, 6 es un número perfecto, porque sus divisores propios son 1, 2 y 3; y 6 = 1 + 2 + 3. Los siguientes números perfectos son 28, 496 y 8128.


Código (dos) [Seleccionar]
@echo off
:: Numeros perfectos, Leo Gutierrez R.
:code
set /p "numero=Numero : "
if not defined numero (goto:code)
set /a "i=1"
set /a "suma=0"
set /a "operacion=0"
:bucle
if %i% equ %numero% (goto:end)
set /a "operacion=%numero% %% %i%"
if %operacion% equ 0 (set /a "suma+=%i%")
set /a "i+=1"
goto:bucle
:end
if %suma% equ %numero% (
echo El numero es perfecto.
) else (
echo El numero no es perfecto.
)
goto:eof

Salida:


C:\>code
Numero : 4
El numero no es perfecto.

C:\>code
Numero : 6
El numero es perfecto.

C:\>code
Numero : 20
El numero no es perfecto.

C:\>code
Numero : 28
El numero es perfecto.

C:\>code
Numero : 2000
El numero no es perfecto.

C:\>code
Numero : 496
El numero es perfecto.

C:\>496
"496" no se reconoce como un comando interno o externo,
programa o archivo por lotes ejecutable.

C:\>

#67
Pedir una cadena al usuario, y de cada caracter de la cadena indicar que posición ocupa en el abecedario :

Cadena : Leonardo
L = 12
e = 5
o = 15
n = 14
a = 1
r = 18
d = 4
o = 15
Press any key...

Código (dos) [Seleccionar]
@echo off
setlocal enabledelayedexpansion
:code
set /p "cadena=Cadena : "
if not defined cadena (goto:code)
set "abecedario=abcdefghijklmnopqrtsuvwxyz"
set /a "longitud=0"
set "cadena2=%cadena%"
set /a "contador=1"
:bucle
if not defined cadena (goto:next)
set "cadena=%cadena:~1%"
set /a "longitud+=1"
goto:bucle
:next
set /a "longitud-=1"
for /l %%$ in (0,1,%longitud%) do (
call :etiqueta !cadena2:~%%$,1!
)
goto:eof
:etiqueta
set /a "contador=1"
set "caracter=%1"
for /l %%_ in (0,1,25) do (
if /i ["!abecedario:~%%_,1!"]==["%caracter%"] (call:view !caracter! !contador!)
set /a contador+=1
)
goto:eof
:view
echo %1 = %2
goto:eof
#68


Se encarga de resolver ecuaciones de 1er grado, como las que se listar en la opción 2:
1.  -3x-9=-9x-63
2.   9x-5=-4x-57
3.   5x-9x=39-3
4.  -7x+9=-9x-5
5.  -3x+1=2x+21
6.   7x+4=9x+6
7.  -5x+8=9x+120
8.  -8x+1=6x-111
9.  -4x+6=6x-64
10. -5x-1=-7x+5


El codigo :
@echo off
:code
setlocal enabledelayedexpansion
:: -3x-9=-9x-63
echo. ------------------------------------------------------------------------------
echo. ^| Ecuaciones de 1ø grado. Ejemplo :                     -3x-9=-9x-63         ^|
echo. ------------------------------------------------------------------------------
echo.
echo. ------------------------------------------------------------------------------
echo. ^| 1.-Resolver ecuaci¢n.                                                      ^|
echo. ^| 2.-Ver ejemplos de ecuaciones.                                             ^|
echo. ^| 3.-Ayuda.                                                                  ^|
echo. ^| 4.-Salir.                                                                  ^|
echo. ------------------------------------------------------------------------------
echo.
set /p "opcion=Teclee el numero de la opcion dada : "
if not defined opcion (goto:code)
if %opcion% equ 1 (goto:r_ecuacion)
if %opcion% equ 2 (goto:examples)
if %opcion% equ 3 (goto:help)
if %opcion% equ 4 (goto:exit) else (
cls
goto:code
)
:r_ecuacion
cls
echo.
set /p "ecuacion=Ecuaci¢n : "
if not defined ecuacion (
cls
goto:code
)
for /f "tokens=1,2 delims==" %%a in ("%ecuacion%") do (
set "termino1=%%a"
set "termino2=%%b"
)
for /f "tokens=1,2 delims=x,X" %%a in ("%termino1%") do (set "x_1=%%ax")
for /f "tokens=1,2 delims=x,X" %%a in ("%termino2%") do (set "x_2=%%ax")
set "x1=%x_1:x=%"
set "x2=%x_2:x=%"
if ["%x_2:~0,1%"]==["-"] (
set /a "suma_x=!x1!!x2:-=+!"
) else (
set /a "suma_x=!x1!-!x2!"
)
for /f "tokens=1,2 delims=x,X" %%a in ("%termino2%") do (set "c_1=%%b")
for /f "tokens=1,2 delims=x,X" %%a in ("%termino1%") do (set "c_2=%%b")
if ["%c_2:~0,1%"]==["-"] (
set /a "suma_c=!c_1!!c_2:-=+!"
) else (
set /a "suma_c=!c_1!-!c_2!"
)
set /a "resultado=%suma_c%/%suma_x%"
echo.
echo.
echo.------------------------------------------------------------------------
echo.Resultado de la ecuacion.
echo.x =  %resultado%
echo.Ecuacion = !ecuacion:x=(%resultado%)!
echo.------------------------------------------------------------------------
set /p ,=Enter para volver al menu.
cls
goto:code
:examples
cls
echo.Este programa puede resolver ecuaciones como las siguientes :
echo.
echo.1.  -3x-9=-9x-63
echo.2.   9x-5=-4x-57
echo.3.   5x-9x=39-3
echo.4.  -7x+9=-9x-5
echo.5.  -3x+1=2x+21
echo.6.   7x+4=9x+6
echo.7.  -5x+8=9x+120
echo.8.  -8x+1=6x-111
echo.9.  -4x+6=6x-64
echo.10. -5x-1=-7x+5
for /l %%$ in (1,1,4) do (cd.)|echo.
set /p ,=Enter para volver al menu.
cls
goto:code
:help
cls
echo.Este peque¤o programa ayuda a resolver ecuaciones del tipo :
echo.-3x-9=-9x-63
echo.
echo.Solo tiene que teclear su ecuaci¢n en el menu inicial (opci¢n 1). y el
echo.programa se encargar  de resolver la ecuaci¢n.
echo.
echo.
echo.Leo Guti,rrez R.
echo.
echo.
set /p ,=Pulse enter para volver al men£.
cls
goto:code
:exit
exit /b 0


Salida :

Ecuación : 9x-5=-4x-57


------------------------------------------------------------------------
Resultado de la ecuacion.
x =  -4
Ecuacion = 9(-4)-5=-4(-4)-57
------------------------------------------------------------------------
Enter para volver al menu.


Tiene bastantes bug´s, que iré solucionando con más tiempo.

Saludos.
#69
Factorial :

Código (dos) [Seleccionar]

@echo off
:code
set /p "numero=Numero : "
if not defined numero (goto:code)
set /a "factorial=1"
for /l %%_ in (1 1 %numero%) do (
set /a factorial=factorial * %%_
)
echo.Factorial : %factorial%
pause>nul
exit /b 0


Salida :
Numero : 4
Factorial : 24


Saludos.
#70
Scripting / Sucesión Fibonacci [Batch]
10 Abril 2009, 04:37 AM
Hola a todos.

Hace tiempo que tenía ganas de hacer esto en Batch.

Para los que no sepan que es la sucesión Fibonacci:
Citar
En matemáticas, la sucesión de Fibonacci es la siguiente sucesión infinita de números naturales:

El primer elemento es 0, el segundo es 1 y cada elemento restante es la suma de los dos anteriores. A cada elemento de esta sucesión se le llama número de Fibonacci. Esta sucesión fue descrita en Europa por Leonardo de Pisa, matemático italiano del siglo XIII también conocido como Fibonacci. Tiene numerosas aplicaciones en ciencias de la computación, matemáticas y teoría de juegos.
De Wikipedia.
Código (dos) [Seleccionar]

@echo off
setlocal enabledelayedexpansion
:code
set /p "numero=Numero : "
if not defined numero (goto:code)
if %numero% lss 1 (
echo.Error, numero negativo.
set /p ,=Pulse Enter para volver.
goto:code
)
for /l %%_ in (1,1,%numero%) do (set "variable%%_=0")
set /a "variable1=1"
set /a "variable2=2"
set /a contador=0
set /a "token_uno=1"
set /a "token_dos=2"
set /a "aumento_de_variable=3"
:bucle
if %contador% equ %numero% (goto:end)
set /a "variable%aumento_de_variable%=!variable%token_uno%! + !variable%token_dos%!"
set /a "token_uno+=1"
set /a "token_dos+=1"
set /a "aumento_de_variable+=1"
set /a "contador+=1"
goto:bucle
:end
for /l %%_ in (1,1,%numero%) do (
echo !variable%%_!
)
set /p =Teclee ENTER para salir.
exit /b 0

Salida :

Numero : 9
1
2
3
5
8
13
21
34
55
Teclee ENTER para salir.


C:\>code
Numero : 5
1
2
3
5
8
Teclee ENTER para salir.


C:\>code
Numero : 25
1
2
3
5
8
13
21
34
55
89
144
233
377
610
987
1597
2584
4181
6765
10946
17711
28657
46368
75025
121393
Teclee ENTER para salir.


Saludos.
#71
Código (dos) [Seleccionar]

@echo off
:code
set /p "base=Numero : "
if not defined base (goto:code)
set /p "potencia=Potencia : "
if not defined potencia (goto:code)
:funcion
set /a resultado=0
if %potencia% equ 0 (
rem Salimos
echo.1
exit /b 1
) else (
set /a "resultado=%base%"
for /l %%i in (2 1 %potencia%) do (
set /a resultado=resultado * %base%
)
)
echo.Resultado : %resultado%
exit /b 0


Salida :
Numero : 2
Potencia : 4
Resultado : 16
Press any key...


Numero : 5
Potencia : 8
Resultado : 390625
Press any key...


Numero : 6
Potencia : 7
Resultado : 279936
Press any key...


Código (dos) [Seleccionar]
@echo off
if ["%1"]==[""] (goto:error)
if ["%1"]==[""] (goto:error)
set /a resultado=0
if %2 equ 0 (
rem Salimos
echo.1
exit /b 1
) else (
set /a "resultado=%1"
for /l %%i in (2 1 %2) do (
set /a resultado=resultado * %1
)
)
echo.Resultado : %resultado%
exit /b 0
:error
echo %~nx0 Base Potencia&echo.
echo.Leo Gutierrez R.
exit /b 1

C:\>code 2 3
Resultado : 8

C:\>codes 8 9
134217728

C:\>codes 5 6
15625

C:\>codes 2 3
8

C:\>codes 2 9
512

C:\>


Saludos, espero que les sirva.
#72
Pedir un numero al usuario y sumar sus digitos :
Numero : 36574
Digitos : 5
Suma de todos los digitos : 25
Press any key...

Código (dos) [Seleccionar]

@echo off
setlocal enabledelayedexpansion
:code
:: Creacion de variables :
set /p "numero=Numero : "      // Esta variable ira disminuyendo
if not defined numero (goto:code)
set /a "contador=0"
set "numero2=%numero%"
set /a suma=0
:bucle
if not defined numero (goto:end)
set "numero=%numero:~1%"
set /a "contador+=1"
goto:bucle
:end
echo.Digitos : %contador%
set /a contador-=1
for /l %%_ in (0 1 %contador%) do (
set /a suma+=!numero2:~%%_,1!
)
echo Suma de todos los digitos : %suma%
goto:eof
#73
Scripting / Filtro Anti- BatchInyection
4 Abril 2009, 09:54 AM
Código (dos) [Seleccionar]
@echo off
:code
set "name="
set /p "name=Teclee su nombre : "
if not defined name (goto:code)
for /f "tokens=2 delims==" %%_ in ('set name') do (
echo.Has escrito : %%_
)
goto:code


La utilidad de esto es que podemos mostrar la informacion introducida por el usuario, sin temer por una inyeccion batch.

Funcionamiento :
Teclee su nombre : &cmd
Has escrito : &cmd
Teclee su nombre : &echo on
Has escrito : &echo on
Teclee su nombre : >
Has escrito : >
Teclee su nombre : <
Has escrito : <
Teclee su nombre : |
Has escrito : |
Teclee su nombre : * ? & < ^&cmd^
Has escrito : * ? & < ^&cmd^
Teclee su nombre : %homepath%
Has escrito : %homepath%
Teclee su nombre : set|more
Has escrito : set|more
Teclee su nombre : &echo on
Has escrito : &echo on
Teclee su nombre : &goto:Eof
Has escrito : &goto:Eof
Teclee su nombre : &goto:Eof^
Has escrito : &goto:Eof^
Teclee su nombre : |calc.exe
Has escrito : |calc.exe
Teclee su nombre :


PD : Al final del post esta la versión final.

Saludos.
#74
Encontre una forma de poner comentarios en el comando set, sin alterar el comportamiento del mismo.

Un ejemplo para que quede bien claro :

@echo off
set "saludo=Hola" // Este es mi comentario.
echo.%saludo%


Hay que entrecomillar la "asignación", luego pueden usar cualquier estilo de comentario.

Algunos ejemplos :

@echo off
set /p "suma=2+2 : " # La suma, my comment
if %suma% equ 4 (
    echo.Bien
) else (
    echo.Mal
)
set suma


@echo off
set /p "suma=2+2 : "  // La suma
if %suma% equ 4 (
    echo.Bien
) else (
    echo.Mal
)
set suma


@echo off
set /p "suma=2+2 : "  /* La suma */
if %suma% equ 4 (
    echo.Bien
) else (
    echo.Mal
)
set suma


@echo off
set /p "suma=2+2 : "  ' Comment
if %suma% equ 4 (
    echo.Bien
) else (
    echo.Mal
)
set suma


@echo off
set /p "suma=2+2 : "  Comment
if %suma% equ 4 (
    echo.Bien
) else (
    echo.Mal
)
set suma


@echo off
for %%. in (H e l l o _ W o r l d) do (
    call :show %%.
)
goto:eof

:show
<nul set /p "=%*" // Comentario
ping -n 1 loopback > nul
goto:eof


En realidad es sencillo, ya que el Set solo toma el primer parametro, lo siquiente es ignorado.

El truco ya aparece en el sitio de Rob Van Der Woude :
Citar
Leo Gutierrez Ramirez found a way to add any  (language) style comments to SET /P commands:

@echo off
set /p "suma=2+2 : " # La suma, my comment
if %suma% equ 4 (
    echo.Bien
) else (
    echo.Mal
)
set suma

@echo off
set /p "suma=2+2 : "  // La suma
if %suma% equ 4 (
    echo.Bien
) else (
    echo.Mal
)
set suma

@echo off
set /p "suma=2+2 : "  /* La suma */
if %suma% equ 4 (
    echo.Bien
) else (
    echo.Mal
)
set suma

@echo off
set /p "suma=2+2 : "  ' Comment
if %suma% equ 4 (
    echo.Bien
) else (
    echo.Mal
)
set suma

@echo off
set /p "suma=2+2 : "  Comment
if %suma% equ 4 (
    echo.Bien
) else (
    echo.Mal
)
set suma


@echo off
for %%. in (H e l l o _ W o r l d) do (
    call :show %%.
)
goto:eof

:show
<nul set /p "=%*" // Comentario
ping -n 1 loopback > nul
goto:eof

As a matter of fact, any text after the closing doublequote is ignored.

Thanks Leo

http://www.robvanderwoude.com/clevertricks.php


Saludos.
#75
Scripting / [Perl] Clip.pl
17 Febrero 2009, 01:34 AM
Bueno, hice este Script por que no me gustaba usar Nircmd, para manipular el Clipboard de Windows, asi que aqui esta :

Código (perl) [Seleccionar]
#!/usr/bin/perl
# Leo Gutierrez Ramirez.
# leorocko13@hotmail.com
use strict;
use warnings;
use diagnostics;
use Win32::Clipboard;
if(!@ARGV)
{
print $0;
print "\nModo de uso : \n$0 [-v] [-c] [-s Cadenas]\ n";
print q(
-v : Ver el contenido del portapapeles.
-c : Limpiar el contenido del portapapeles.
-s : Poner el texto especificado en el portapapeles
);
} elsif(lc($ARGV[0]) eq '-v')
{
my $CLIP = Win32::Clipboard();
print $CLIP->Get();
} elsif(lc($ARGV[0]) eq '-c')
{
my $CLIP = Win32::Clipboard();
$CLIP->Empty();
} elsif(lc($ARGV[0]) eq '-s')
{
die "Falto la cadena a poner en el portapapeles" unless($ARGV[1]);
my $CLIP = Win32::Clipboard();
$CLIP->Set($ARGV[1]);
}
exit();



C:\>code.pl -v
aklsjdlkjalsdkj alksjdal  s laksdflaksdjlaksd
C:\>


C:\>code.pl -c

C:\>



C:\>code.pl -s "Este texto irá al portapapeles"

C:\>code.pl -v
Este texto irß al portapapeles
C:\>



Saludos.
#76
Manipular y visualizar informacion de archivos externos. por Leo Gutiérrez.



Atención

Cuando busquen ayuda, por favor dejar claramente una muestra de cómo está el archivo o lo que quieren extraer del archivo y como quieren que quede, para entendernos con más claridad.



Tomaremos como ejemplo el siguiente texto :


Perl es un lenguaje de programación diseñado por Larry Wall creado en 1987.
Perl toma características del C, del lenguaje interpretado shell (sh), AWK,
sed, Lisp y, en un grado inferior, de muchos otros lenguajes de programación.

Estructuralmente, Perl está basado en un estilo de bloques como los del C
o AWK, y fue ampliamente adoptado por su destreza en el procesado de texto
y no tener ninguna de las limitaciones de los otros lenguajes de script.


Que será TEXTO.TXT


Volcar cierto texto a un archivo de texto :

echo Hola > file.txt

> Adios.txt echo "Mi texto."
@echo off
(
echo Linea1
echo Linea2
echo Linea3...
) > "file.txt"


Bash:
Código (bashl) [Seleccionar]
echo -e "Texto" > "file.txt"
Código (bash) [Seleccionar]
echo -e "`ls -1`" >> "file.txt"
Código (bash) [Seleccionar]
> "file.txt" echo -e "Hola mundo!"
Código (bash) [Seleccionar]
cat <<EOF > "file.txt"
Hola mundo cruel!
Lineas
Lineas
EOF

Código (bash) [Seleccionar]
(
echo -e "Lineas";
echo -e "Más lineas";
echo -e "Más más lineas";
) > "file.txt"


Mostrar el contenido de un archivo de texto :
type texto.txt

for /f "tokens=*" %%x in (texto.txt) do (echo %%x)


Contar lineas de un archivo de texto (Lineas en blanco tambien) :
C:\>type texto.txt | find /v /c "" < texto.txt
7

C:\>

Contar lineas (Sin lineas en blanco) :
@echo off
set /a contador=0
for /f "" %%x in (texto.txt) do (
call :contador %%x
)
echo Lineas : %contador%
pause>nul
goto:eof
:contador
set /a contador+=1
goto:eof


[/b]

Obtener informacion del archivo de texto (tamaño, fecha, atributos, etc) :
@echo off
for %%- in (texto.txt) do (
echo Nombre : %%~n-
echo Extension : %%~x-
echo Unidad : %%~d-
echo Ruta : %%~p-
echo Ruta completa : %%~s-
echo Fecha-Hora del archivo : %%~t-
echo Atributos : %%~a-
echo Nombre y extension : %%~nx-
)
pause>nul
exit /b 0


[/b]

Otra forma :


@echo off
call :info texto.txt
goto:eof
:info
echo Nombre : %~n1
echo Extension : %~x1
echo Unidad : %~d1
echo Ruta : %~p1
echo Ruta completa : %~s1
echo Fecha-Hora del archivo : %~t1
echo Atributos : %~a1
echo Nombre y extension : %~nx1
pause>nul
goto:eof



Contar caracteres de un archivo :
@echo off
set /a contador=0
set /a contadorL=0
for /f "tokens=*" %%x in (texto.txt) do (
set linea=%%x
call :contador %linea%
)
goto:eof
:contador
set /a contadorl+=1
if not defined linea (
echo %contador%
goto:eof
)
set linea=%linea:~1%
set /a contador+=1
goto:contador

Contar palabras de un archivo de texto :
@ECHO OFF
::CONTADOR DE PALABRAS
::AUTOR: CARLOS
::USO: CONTAR.BAT ARCHIVO.TXT
::O ARRASTRE ARCHIVO.TXT Y COLOQUE SOBRE EL ICONO DEL SCRIPT.

SETLOCAL
SET "ARCHIVO=%~1"
SET /A "PALABRAS=0"
FOR /F "USEBACKQ TOKENS=*" %%A IN ("%ARCHIVO%") DO (
SET "LINEA=%%A"
IF DEFINED LINEA (
CALL :CONTA LINEA
)
)
ECHO.CANTIDAD_PALABRAS:%PALABRAS%
PAUSE
ENDLOCAL
GOTO :EOF

:CONTA
SETLOCAL ENABLEDELAYEDEXPANSION
FOR /F "TOKENS=1*" %%B IN ("!%~1!") DO (
SET "PAL=%%B"
SET "RESTO=%%C"
IF DEFINED PAL (SET /A PALABRAS+=1)
IF DEFINED RESTO (CALL :CONTA RESTO)
)
ENDLOCAL & SET /A "PALABRAS=%PALABRAS%"
GOTO :EOF

Autor : Carlos.


Crear archivos vacios (0 kb) :
Manera brusca :
lksdfljskdfljksdf > file.txt

fsutil file createnew file.txt 0

ver | find "kjflskdfjlsjkdf" > file.txt



C:\>copy con vacio.txt > nul
^Z

C:\>

Enumerar lineas de archivos :

Lista lineas en blanco tambien.
@echo off
rem Mostrar lineas de archivos :
echo. > temp.txt
if ["%~1"]==[""] (
echo Pocos parametros!
goto:eof
)
for /f "skip=2 tokens=*" %%x in ('fc /c /n temp.txt "%~1" ^| findstr -v -mi "*****"') do (
echo %%x
)
del /f /q "temp.txt"
goto:eof



Este no lista lineas en blanco :

@echo off
if ["%~1"]==[""] (
echo Pocos parametros!
goto:eof
)
set /a linea=0
for /f "tokens=*" %%x in ('type "%~1"') do (
call :show %%x
)
goto:eof

:show
set /a linea+=1
echo %linea% : %*
goto:Eof


Eliminar cierta linea de un archivo de texto :
@echo off
(
ECHO 2d
ECHO E
) | EDLIN /B texto.txt > nul 2>&1

En este caso eliminariamos la linea 2.

Copiar el contenido de un archivo de texto a otro:
type texto.txt > texto2.txt

Siendo texto2.txt el nuevo archivo de texto.

Editar cierta linea de un archivo de texto :

@echo off
(
echo 2
echo Gutierrez
echo w
echo e
) | edlin /b texto2.txt

Siendo "2" la linea que editaremos, y "Gutierrez" por lo que será cambiado el texto.

Copiar cierta linea al final del mismo archivo de texto :

@echo off
(
echo 1,1,100,1c
echo e
) | edlin /b texto2.txt

Se copiaria la linea 1 al final del archivo, si quieren copiar la linea 2 al final del archivo seria :
echo 2,2,100,1c

Mover la primera linea al final del archivo de texto :

@echo off
(
echo 1,1,4M
echo e
) | edlin /b texto2.txt

Mover la primera linea a la segunda linea de un archivo :
@echo off
(
echo 1,1,3M
echo e
) | edlin /b texto2.txt

Mover la segunda linea a la primera linea :
@echo off
(
echo 2,2,1M
echo e
) | edlin /b texto2.txt

Mover la tercera linea a la primera :

@echo off
(
echo 3,3,1M
echo e
) | edlin /b texto2.txt

Visualizar solo las primeras 10 lineas de un archivo :
@ECHO OFF
SET /A NLINES=0
FOR /F "TOKENS=*" %%X IN (%~1) DO (
CALL :SUB %%X
)
GOTO:EOF

:SUB
IF %NLINES% EQU 10 (GOTO:EOF)
SET /A NLINES+=1
ECHO %NLINES% : %*
GOTO:EOF

Visualizar una linea en la que sabemos que existen ciertas palabras:

Suponiendo que este es nuestro texto, y queremos visualizar todas las lineas que contengan "Perl"

Perl es un lenguaje de programación diseñado por Larry Wall creado en 1987.
Perl toma características del C, del lenguaje interpretado shell (sh), AWK,
sed, Lisp y, en un grado inferior, de muchos otros lenguajes de programación.

Estructuralmente, Perl está basado en un estilo de bloques como los del C
o AWK, y fue ampliamente adoptado por su destreza en el procesado de texto
y no tener ninguna de las limitaciones de los otros lenguajes de script.

type texto.txt | find /i "Perl"

Contar las lineas que coincidan con cierta busqueda :
type texto.txt | find /i /c "Perl"

Tomando como ejemplo el texto anterior, nos dará el numero 3, que es el numero de lineas encontradas.

Leer datos dentro de un txt, compararlos y dar un resultado... es posible?
http://foro.portalhacker.net/index.php/topic,86703.new.html


Remover lineas en blanco de un archivo de texto :
@echo off
echo Mi archivo con lineas en blanco :
type "file.txt"
for /f %%x in ('type "file.txt"') do (
echo %%x >> file2.txt
)
echo.
echo Mi archivo sin lineas en blanco :
type file2.txt

Otra manera, usando expresiones regulares con findstr
findstr /v "^$" file.txt

^ : Inicio de linea.
$ : Fin de linea.
/v : Solo muestra lo que no coincida con la expresion.

Sustituir una columna en un archivo de texto :
Supongamos que tenemos un archivo de texto con el contenido :
123 234 345 456 567 678 789 890
123 234 345 456 567 678 789 890
123 234 345 456 567 678 789 890
123 234 345 456 567 678 789 890

Y queremos sustituir "234" por algo :

@echo off
type texto.txt
for /f "tokens=1-8" %%a in ('type texto.txt') do (
echo %%a "RockoX" %%c %%d %%e %%f %%g %%h >> texto2.txt
)
echo:
type texto2.txt
Tip provisto por Tomi Salmi.


Contar la cantidad de archivos de texto en un directorio:
dir /b *.txt | find /c ".txt"

dir /b *.txt | findstr /n ".txt$"

Intercambiar cierto palabra por otra :
Supongamos que queremos cambiar todas las palabras que digan "Perl", por C :
@echo off
setlocal enabledelayedexpansion
for /f "tokens=* delims=" %%x in ('type texto.txt') do (
set linea=%%x
set linea=!linea:Perl=C!
call :show !linea!
)
goto:eof
:show
echo %* >> out.txt
goto:eof


Cambiar todo el texto de un archivo de texto a mayusculas :
@echo off
setlocal enabledelayedexpansion
for /f "tokens=*" %%x in ('type texto.txt') do (
set linea=%%x
call :code !linea!
)
goto:eof
:code
SET WORD=%*
if not defined word (Echo Error & goto:eof)
for %%x 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) do (call :rename %%x)
echo %word%
goto:Eof
:rename
call set word=%%word:%1=%1%%
goto:eof

La salida que da :
PERL ES UN LENGUAJE DE PROGRAMACI¾N DISE±ADO POR LARRY WALL CREADO EN 1987.
PERL TOMA CARACTERÝSTICAS DEL C, DEL LENGUAJE INTERPRETADO SHELL (SH), AWK,
SED, LISP Y, EN UN GRADO INFERIOR, DE MUCHOS OTROS LENGUAJES DE PROGRAMACI¾N.
ESTRUCTURALMENTE, PERL ESTß BASADO EN UN ESTILO DE BLOQUES COMO LOS DEL C
O AWK, Y FUE AMPLIAMENTE ADOPTADO POR SU DESTREZA EN EL PROCESADO DE TEXTO
Y NO TENER NINGUNA DE LAS LIMITACIONES DE LOS OTROS LENGUAJES DE SCRIPT.


Saber que lineas de un archivo de texto son las que estan vacias :

@echo off
for /f "tokens=*" %%x in ('type texto.txt ^| findstr /n "^$"') do (
echo %%x Linea vacia.
)


Cambiar todo el contenido de un archivo de texto a minusculas :
@echo off
setlocal enabledelayedexpansion
for /f "tokens=*" %%x in ('type texto.txt') do (
set linea=%%x
call :code !linea!
)
goto:eof
:code
SET WORD=%*
if not defined word (Echo Error & goto:eof)
for %%x 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) do (call :rename %%x)
echo %word%
goto:Eof
:rename
call set word=%%word:%1=%1%%
goto:eof


Salida :
perl es un lenguaje de programaci¥n dise▒ado por larry wall creado en 1987.
perl toma caracter¦sticas del c, del lenguaje interpretado shell (sh), awk,
sed, lisp y, en un grado inferior, de muchos otros lenguajes de programaci¥n.
estructuralmente, perl est▀ basado en un estilo de bloques como los del c
o awk, y fue ampliamente adoptado por su destreza en el procesado de texto
y no tener ninguna de las limitaciones de los otros lenguajes de script.


Visualizar el contenido de un archivo de texto en una ventana :


@echo off
nircmd clipboard readfile "texto.txt"
nircmd infobox "~$clipboard$" "texto.txt"
exit /b 0


Requiere Nircmd.exe

Listar un archivo de forma inversa :

P
o
r
t
a
l
h
a
c
k
e
r
.
n
e
t


Y que no lo devuelva en esta forma :
     16: t
     15: e
     14: n
     13: .
     12: r
     11: e
     10: k
      9: c
      8: a
      7: h
      6: l
      5: a
      4: t
      3: r
      2: o
      1:*P


@echo off
for /f "tokens=1" %%x in ('type texto.txt ^| find /v /c ""') do (set /a lineas=%%x)
set /a lineas-=1
for /l %%x in (%lineas%, -1, 1) do (
(
echo %%x,%%xl
echo e
) | edlin /b texto.txt | find /v "Final del archivo de entrada" | find /v "%%x,%%xl" | find /v "*e"
)
pause>nul

Segunda forma, la mejor:
Código (dos) [Seleccionar]
@echo off
setlocal enabledelayedexpansion
for /f "tokens=1" %%_ in ('type "file.txt" ^| find /v /c ""') do (set "lineas=%%_";)
set /a "contador=0"
for /f "eol= tokens=* delims=" %%_ in (file.txt) do (
set /a "contador+=1"
set "linea!contador!=%%_"
)
for /l %%_ in (%lineas%,-1,1) do (
echo !linea%%_!
)

Agregar una palabra al principio y al final de una linea en un archivo de texto :

Supongamos que tenemos el siguiente texto :
Leo
Laura
Lola
Lala

@echo off
for /f "tokens=*" %%x in ('type texto.txt') do (echo Antes %%x Despues) >> temp.txt
type "temp.txt"
del /f /q "temp.txt"
goto:eof

Y la salida :
Antes Leo Despues
Antes Laura Despues
Antes Lola Despues
Antes Lala Despues


Listar solo las palabras que tengan 3 caracteres de longitud en un archivo de texto :
type texto.txt | findstr "^...$"
Tip, por Tomi Salmi.

Informacion sobre los archivos de texto :  
assoc | find /i ".txt"
ftype | find /i "txtfile"


Caso practico :
[/size]
Supongamos que tenemos un archivo de texto así :
laasd
laasd
ladf
lagfh
laghj
lafgh
Start-of-data
Leonardo
Gutierrez
Ramirez
End-of-data
kljdas
dasd
lksñdf


Y solo queremos mostrar lo que esta entre :
Start-of-data y End-of-data

@echo off
for /f "tokens=1 delims=:" %%x in ('type "texto.txt" ^| findstr /n "Start-of-data"') do (set /a inicio=%%x)
for /f "tokens=1 delims=:" %%x in ('type "texto.txt" ^| findstr /n "End-of-data"') do (set /a fin=%%x)
set /a inicio+=1
set /a fin-=1
for /f "tokens=2 delims=:" %%x in ('
^(
echo %inicio%^,%fin%l
echo e
^) ^|edlin /b texto.txt^| find /v "*%inicio%,%fin%l"^|find /v "Final del archivo de entrada"^|find /v "*e"') do (
echo %%x
)


Guardar las lineas de un archivo de texto en lineas independientes :
[/b]

@echo off
setlocal enabledelayedexpansion
set contador=0
for /f "eol= tokens=* delims=" %%x in (file.txt) do (
set /a contador+=1
set linea!contador!=%%x
)
set linea


Meter la primera linea en una variable:
Código (dos) [Seleccionar]
@echo off
<"file.txt" set /p "primera_linea="
set "primera_linea"


Pedir número de línea al usuario y mostrarla por pantalla:
@echo off
:code
set /p "linea=Linea : "
if not defined linea goto:code
set /a "_linea=0"
for /f "tokens=*" %%_ in ('type file.txt') do (
call:show %%_
)
goto:eof
:show
set /a "_linea+=1"
if %_linea%==%linea% echo %*
goto:eof


Caso práctico:
http://foro.elhacker.net/programacion_general/ayuda_con_bat_leer_archico-t268569.0.html;msg1314595#new


Comparar dos archivos (file.txt y file2.txt) y mostrar el número de línea y la línea donde se da la diferencia.
Código (dos) [Seleccionar]

@echo off
setlocal enabledelayedexpansion
set /a "linea=0"
for /f "tokens=1" %%g in (file.txt) do (
  set /a "linea+=1"
  set "_answer=%%g"
for /f "tokens=1" %%k in (file2.txt)  do (if "%%g" equ "%%k" set "_answer=")
if defined _answer (
echo Diferencia(^s^) encontrada en la linea !linea! :  "%%g"
)
)
set /p "="
exit /b 0;


Ejemplo de uso:

C:\>type file*

file.txt


Leo
Itzel
Darwin
Yareli
Michelito
Maurilio
p**a
file2.txt


Leo
Itzel
Darwin
Yareli
Michel
Maurilio

C:\>


Ejecución:

C:\>code
Diferencia(s) encontrada en la linea 5 :  "Michelito"
Diferencia(s) encontrada en la linea 7 :  "p**a"


C:\><


Buscar un archivo en todos los discos disponibles y eliminarlo:
El siguiente código encuentra las unidades de disco disponibles en el sistema, en seguida busca el archivo a eliminar, en este caso yo lo llamé "archivoloco.txt" sólo para ilustrar.

El archivo lo tengo en las siguientes rutas :

C:\>code
C:\Documents and Settings\Administrador\Escritorio\archivoloco.txt
C:\Documents and Settings\Administrador\Escritorio\Escuela\archivoloco.txt
D:\RECOVERY\archivoloco.txt
F:\problemas\archivoloco.txt
G:\psico\archivoloco.txt

C:\>


Se trata de eliminarlo.

Código (dos) [Seleccionar]
@echo off
rem Leo Gutierrez R.
for %%i 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) do (
dir /b %%i:\ > nul 2>&1 && (
for /f "tokens=*" %%_ in ('dir /b /s %%i:archivoloco.txt') do (
del /f /q "%%_"
)
)
)
pause>nul
exit /b 0


Y eso fue todo, si volviera a buscar los archivos en los distintos discos, esto obtendría:

C:\>lala
No se encuentra el archivo
No se encuentra el archivo
No se encuentra el archivo
No se encuentra el archivo

C:\>


Saludos.

Leer solo una parte de un fichero

http://foro.elhacker.net/scripting/leer_solo_una_parte_de_un_fichero_de_texto_iquestcomo-t296151.0.html

Añadir una línea al principio del archivo

http://foro.elhacker.net/scripting/comandoopcion_msdos_insertar_linea_en_archivo_txt_solucionado-t289992.0.html


Modificar el valor de una columna
http://foro.elhacker.net/scripting/ayudacon_modificacion_de_archivo_de_texto-t294900.0.html


http://foro.elhacker.net/scripting/modificar_archivos_de_texto_batch_perl-t293258.0.html

Contar renglones de archivo
http://foro.elhacker.net/scripting/contador_de_renglones_solucionado-t292853.0.html

Crear varios txt a patir de otro
http://foro.elhacker.net/scripting/batch_crear_varios_txt_a_partir_de_otro_txt_solucionado-t290418.0.html

Reportar archivos encontrados[/b]]Reportar archivos encontrados
http://foro.elhacker.net/scripting/reporte_en_batch-t277835.0.html

Quitar fin de linea
http://foro.elhacker.net/scripting/ayuda_com_archivo_de_texto_por_favorsolucionado-t277953.0.html
#77
Scripting / Comportamiento inesperado [FOR+PAUSE]
28 Diciembre 2008, 18:00 PM
Bueno esto realmente me sorprendio, segun mi experiencia haciendo scripts en Batch, pense que el siguiente script generaria algo como esto :


ALLUSERSPROFILE
APPDATA
CLIENTNAME
CommonProgramFiles
COMPUTERNAME
ComSpec
Desktop
FP_NO_HOST_CHECK
HOMEDRIVE
HOMEPATH
LOGONSERVER
NUMBER_OF_PROCESSORS
OS
Path
PATHEXT
PROCESSOR_ARCHITECTURE
PROCESSOR_IDENTIFIER
PROCESSOR_LEVEL
PROCESSOR_REVISION
ProgramFiles
PROMPT
SESSIONNAME
SystemDrive
SystemRoot
TEMP
TMP
USERDOMAIN
USERNAME
USERPROFILE
windir
Presione una tecla para continuar . . .


@ECHO OFF
FOR /F "TOKENS=1 DELIMS==" %%X IN ('SET') DO (
ECHO.%%X
)&PAUSE



Pero da un comportamiento inesperado :

ALLUSERSPROFILE
Presione una tecla para continuar . . .
APPDATA
Presione una tecla para continuar . . .
CLIENTNAME
Presione una tecla para continuar . . .
CommonProgramFiles
Presione una tecla para continuar . . .
COMPUTERNAME
Presione una tecla para continuar . . .
ComSpec
Presione una tecla para continuar . . .
Desktop
Presione una tecla para continuar . . .
FP_NO_HOST_CHECK
Presione una tecla para continuar . . .
HOMEDRIVE
Presione una tecla para continuar . . .
HOMEPATH
Presione una tecla para continuar . . .
LOGONSERVER
Presione una tecla para continuar . . .
NUMBER_OF_PROCESSORS
Presione una tecla para continuar . . .
OS
Presione una tecla para continuar . . .
Path
Presione una tecla para continuar . . .
PATHEXT
Presione una tecla para continuar . . .
PROCESSOR_ARCHITECTURE
Presione una tecla para continuar . . .
PROCESSOR_IDENTIFIER
Presione una tecla para continuar . . .
PROCESSOR_LEVEL
Presione una tecla para continuar . . .
PROCESSOR_REVISION
Presione una tecla para continuar . . .
ProgramFiles
Presione una tecla para continuar . . .
...


Aqui se ve que el for esta cerrado ya (con el ")" ) :
)&PAUSE


Pero funciona como si fuera de esta manera :
@ECHO OFF
FOR /F "TOKENS=1 DELIMS==" %%X IN ('SET') DO (
ECHO.%%X
PAUSE
)



Otro ejemplo de uso es con el argumento /L :
@ECHO OFF
FOR /L %%X IN (1,1,10) DO (
ECHO.%%X
)&PAUSE


Saludos a todos.
#78
Scripting / Error de redacción en la ayuda de COPY
24 Diciembre 2008, 22:35 PM
Consultando la sintaxis del comando Copy, me encontre con un error de redacción en la misma :

Observen :

C:\>copy /?
Copia uno o más archivos en otra ubicaciónción.

COPY [/V] [/N] [/Y | /-Y] [/Z] [/A | /B ] origen [/A | /B]
     [+ origen [/A | /B] [+ ...]] [destino [/A | /B]]

  origen       Especifica el archivo o archivos que deben copiarse.
  /A           Indica un archivo de texto ASCII.
  /B           Indica un archivo binario.
  /D           Permite al archivo de destino que se cree descifrado
  Destino      Especifica el directorio y el nombre de archivo de los
               nuevos archivos.
  /V           Verifica que los nuevos archivos se escriben
               correctamente.
  /N           Si es posible, usa un nombre de archivo corto al copiar
               un archivo cuyo nombre no tiene el formato 8.3.
  /Y           Suprime la petición de confirmación cuando se va a
               sobrescribir un archivo destino existente.
  /-Y          Realiza la petición de confirmación cuando se va a
               sobrescribir un archivo destino existente.
  /Z           Copia archivos de red en modo reiniciable.

El modificador /Y puede estar preestablecido en la variable de entorno
COPYCMD. Esto puede anularse con el modificador /-Y en la línea de
comando. Está predeterminado el pedir la confirmación del usuario
antes de sobrescribir, excepto si el comando COPY se ejecuta desde un
archivo de comandos por lotes.

Para anexar archivos, especifique un único archivo de destino, pero
varios archivos de origen (usando caracteres comodines o el formato archivo1+archivo2+arch
ivo3).

C:\>


El error está en la primera línea.
#79
Scripting / Music.bat
19 Diciembre 2008, 19:31 PM
Este programa te permite sonar la nota musical que tu desees por medio de beeps.

Este script requiere Nircmd.exe
http://nirsoft.net/utils/nircmd.zip


Esta es la ayuda del programa :


Tambien permite notas sostenidas #, es decir :
C#               Do sostenido.
D#               Re sostenido.

Algunos ejemplos de uso son :
Music C# 3
Music G 1
Music F 2
Music E 3


El numero despues de la letra es el grado de la escala.

Use el cifrado americano para las notas musicales.


Codigo :
@ECHO OFF
::MUSIC.BAT
::LEO GUTIERREZ .. ROCKOX
;IF /I ["%1"]==[""] (;GOTO:SYNTAX)
;IF /I ["%1"]==["-H"] (;GOTO:SYNTAX)
;IF /I ["%1"]==["/?"] (;GOTO:SYNTAX)
:NOTAS
;IF /I ["%2"]==[""] (;GOTO:SYNTAX)
;IF %2 GTR 3 (
;ECHO.NUMERO DE ESCALA DEMASIADO ALTO!. & ECHO:
;GOTO:SYNTAX
)
;IF %2 LSS 1 (
;ECHO.NUMERO DE ESCALA DEMASIADO BAJO!. & ECHO:
;GOTO:SYNTAX
)
;IF %2 EQU 1 (
;IF /I ["%1"]==["C"] (NIRCMD BEEP 262 600 & GOTO:EOF)
;IF /I ["%1"]==["C#"] (NIRCMD BEEP 277 600 & GOTO:EOF)
;IF /I ["%1"]==["D"] (NIRCMD BEEP 294 600 & GOTO:EOF)
;IF /I ["%1"]==["D#"] (NIRCMD BEEP 311 600 & GOTO:EOF)
;IF /I ["%1"]==["E"] (NIRCMD BEEP 330 600 & GOTO:EOF)
;IF /I ["%1"]==["F"] (NIRCMD BEEP 350 600 & GOTO:EOF)
;IF /I ["%1"]==["F#"] (NIRCMD BEEP 370 600 & GOTO:EOF)
;IF /I ["%1"]==["G"] (NIRCMD BEEP 393 600 & GOTO:EOF)
;IF /I ["%1"]==["G#"] (NIRCMD BEEP 416 600 & GOTO:EOF)
;IF /I ["%1"]==["A"] (NIRCMD BEEP 440 600 & GOTO:EOF)
;IF /I ["%1"]==["A#"] (NIRCMD BEEP 466 600 & GOTO:EOF)
;IF /I ["%1"]==["B"] (NIRCMD BEEP 494 600 & GOTO:EOF)
)
;IF %2 EQU 2 (
;IF /I ["%1"]==["C"] (NIRCMD BEEP 525 600 & GOTO:EOF)
;IF /I ["%1"]==["C#"] (NIRCMD BEEP 555 600 & GOTO:EOF)
;IF /I ["%1"]==["D"] (NIRCMD BEEP 590 600 & GOTO:EOF)
;IF /I ["%1"]==["D#"] (NIRCMD BEEP 623 600 & GOTO:EOF)
;IF /I ["%1"]==["E"] (NIRCMD BEEP 660 600 & GOTO:EOF)
;IF /I ["%1"]==["F"] (NIRCMD BEEP 699 600 & GOTO:EOF)
;IF /I ["%1"]==["F#"] (NIRCMD BEEP 740 600 & GOTO:EOF)
;IF /I ["%1"]==["G"] (NIRCMD BEEP 784 600 & GOTO:EOF)
;IF /I ["%1"]==["G#"] (NIRCMD BEEP 830 600 & GOTO:EOF)
;IF /I ["%1"]==["A"] (NIRCMD BEEP 880 600 & GOTO:EOF)
;IF /I ["%1"]==["A#"] (NIRCMD BEEP 930 600 & GOTO:EOF)
;IF /I ["%1"]==["B"] (NIRCMD BEEP 990 600 & GOTO:EOF)
)
;IF %2 EQU 3 (
;IF /I ["%1"]==["C"] (NIRCMD BEEP 1048 600 & GOTO:EOF)
;IF /I ["%1"]==["C#"] (NIRCMD BEEP 1110 600 & GOTO:EOF)
;IF /I ["%1"]==["D"] (NIRCMD BEEP 1176 600 & GOTO:EOF)
;IF /I ["%1"]==["D#"] (NIRCMD BEEP 1246 600 & GOTO:EOF)
;IF /I ["%1"]==["E"] (NIRCMD BEEP 1320 600 & GOTO:EOF)
;IF /I ["%1"]==["F"] (NIRCMD BEEP 1395 600 & GOTO:EOF)
;IF /I ["%1"]==["F#"] (NIRCMD BEEP 1480 600 & GOTO:EOF)
;IF /I ["%1"]==["G"] (NIRCMD BEEP 1569 600 & GOTO:EOF)
;IF /I ["%1"]==["G#"] (NIRCMD BEEP 1660 600 & GOTO:EOF)
;IF /I ["%1"]==["A"] (NIRCMD BEEP 1764 600 & GOTO:EOF)
;IF /I ["%1"]==["A#"] (NIRCMD BEEP 1880 600 & GOTO:EOF)
;IF /I ["%1"]==["B"] (NIRCMD BEEP 1980 600 & GOTO:EOF)
)
:SYNTAX
;ECHO:%~NX0 
;ECHO:
;ECHO:MODO DE USO :
;ECHO:
;ECHO:%~NX0 [-NOTA] [#] [1-3]
;ECHO:
;ECHO:LAS SIGUIENTES NOTAS ESTAN DISPONIBLES:
;ECHO:C : DO  
;ECHO:D : RE  
;ECHO:E : MI  
;ECHO:F : FA  
;ECHO:G : SOL 
;ECHO:A : LA  
;ECHO:B : SI  
;ECHO:
;ECHO:# : ALTERACION SOSTENIDO.
;ECHO:[1-3] : Numero de escala.
;ECHO:
;ECHO:EJEMPLOS:
;ECHO:%~NX0 C 2
;ECHO:%~NX0 G# 3
GOTO:EOF
#80
Scripting / Tip sobre acentos en Batch.
20 Noviembre 2008, 04:48 AM
Bueno publico esto ya que varias veces me han preguntado sobre rutas que llevan acentos, y no saben como tratarlos.

Bueno para sacar los acentos vamos a hacer esto :
COPY CON ARCHIVO.TXT
á é í ó ú Á É Í Ó Ú
^Z


Donde ^z, es la combinacion de teclas CTRL+Z
Que significa Fin de archivo en el CMD ó fin de entrada.

Veamos una captura de como quedaría :

Ahora abrimos con el Bloc de notas el archivo que creamos :
notepad archivo.txt


Y ya tenemos nuestros caracteres con acentos listos para usarse en un batch.

Ejemplo :
@echo off
cd /d %homedrive%\
cd canci¢n
echo %cd%
pause


Notese el : ¢.


Esto tambien es util cuando se esta trabajando en una shell remota.
Ejemplo con netcat :



Si se fijan, ahi si tuve que utilizar CTRL+C (Interrupcion de comando).


Otra forma es usar edit.com
#81
Bueno esta forma nunca la habia visto, la acabo de descubrir jugando con ciertos caracteres, se usa asi :

@echo off
rem Aqui va todo el codigo
(Todo esto no será ejecutado
Es importante no cerrar el parentesis, ya que si se cierra sera ejecutado lo que
esta dentro del parentesis.
Debe de usarse solo al final de los codigos.


Hasta ahorá se podian usar comentarios de estas formas :
@echo off
REM COMENTARIO
::COMENTARIO
% COMENTARIO %
PAUSE
EXIT /B


Una curiosidad :
Cuando usamos un comentario de este tipo :: en un FOR, saldrá error, prueben esto :

@ECHO OFF
FOR %%X IN (NOTEPAD.EXE) DO (
::COMENTARIO SOLO
)


Una explicación sería que ::COMENTARIO SOLO, no es tomado en cuenta, y dará error al tener los () solos.

Es igual a hacer esto :
@ECHO OFF
FOR %%X IN (NOTEPAD.EXE) DO ()


También se obtiene error en el IF :
@ECHO OFF
SET A=1
IF %A%==1 (
ECHO HOLA
::ALGO
)
PAUSE>NUL

En resumen los comentarios quedarían asi :

Código (DOS) [Seleccionar]
@ECHO OFF
REM COMENTARIO
::COMENTARIO
% COMENTARIO %
(COMENTARIOS:
NUEVA FORMA DE COMENTARIOS
LEO GUTIERREZ



Cita de Rob Van der Woude :
Citar
I must confess, this tip by Leo Gutierrez Ramirez baffled me.
I didn't expect it to work, but it does.
See for yourself:

@ECHO OFF
REM Code:
ECHO Hello
REM Comments:
(COMMENT
HELLO!
HI!

The trick is not in the exclamation marks, it is the fact that the parenthesis opens a "code block" which is never closed, and thus seems to be ignored completely by the command interpreter.
As Leo said: a useful way to add comments at the end of a batch file.

Thanks Leo

http://www.robvanderwoude.com/clevertricks.html
#82
Scripting / Ejecución condicional [Batch] LEER
15 Noviembre 2008, 05:44 AM
Ejecucion condicional

Bueno este tutorial, vamos a aprender a usar los caracteres & && || y un poco de ERRORLEVEL.


Una confusion muy frecuente es que usan los caracteres & y && con el mismo proposito, & y && no son iguales.
Tienen sus significados para el CMD.

comando1 & comando2 :
Ejecuta el comando1 seguido de comando2
Equivalencia :
comando1
comando2


comando1 && comando2 :

Ejecuta el comando2 solo si el comando1 fue ejecutado satisfactoriamente.
Equivalencia :
comando1
if %errorlevel%==0 (comando2)


comando1 || comando2 :
Ejecuta el comando2 solo si el comando1 fue ejecutado insatisfactoriamente, es decir, si hubo un error en el comando.
Equivalencia :
comando1
if %errorlvel%==1 (comando2)
}
El || se definiria como un %errorlevel% neq 0, ya que no todos los comandos devuelven un 0 o un 1.

Ejemplo :

C:\WINDOWS\system32>ldkfjgkldjfgkljdklfgkljdfg & echo %errorlevel%
"ldkfjgkldjfgkljdklfgkljdfg" no se reconoce como un comando interno o externo,
programa o archivo por lotes ejecutable.
9009

C:\WINDOWS\system32>

Ahi es donde aplica el %errorlevel% neq 0.

Gracias a Carlitos por la aclaración.

Vamos a ver algunos ejemplos :
Codigo con & :
@ECHO OFF
REM SE EJECUTA EL COMANDO MSG, SEGUIDO DEL ECHO.
MSG * HOLA! & ECHO HOLA
PAUSE>NUL
EXIT /B

Como vemos arriba el uso del & es muy sencillo.

Codigo con && :
@ECHO OFF
MSG * HOLA && ECHO EL COMANDO MSG SE EJECUTO CORRECTAMENTE
PAUSE>NUL


Es equivalente a :
@ECHO OFF
MSG * HOLA
IF %ERRORLEVEL%==0 (
ECHO EL COMANDO MSG SE EJECUTO CORRECTAMENTE
)
PAUSE>NUL

Como vemos, se ahorran mas lineas usando &&

Veamos otro ejemplo :

@ECHO OFF
VER | FIND /I "LEO" && (
REM EL SIGUIENTE CODIGO NUNCA SE EJECUTARA, DEBIDO A QUE EN EL COMANDO VER
REM NO EXISTE NADA RELACIONADO CON LA CADENA "LEO"
ECHO CADENA "LEO" ENCONTRADA EN EL COMANDO VER
)
PAUSE>NUL
EXIT /B


Variemosle un poco para entender mejor :

@ECHO OFF
VER | FIND /I "XP" && (
REM EL SIGUIENTE CODIGO SI EJECUTARA, DEBIDO A QUE EN LA SALIDA DEL COMANDO VER
REM SI EXISTE "XP"
ECHO CADENA "XP" ENCONTRADA EN EL COMANDO VER
)
PAUSE>NUL
EXIT /B


Los caracteres || (pipes o tuberias juntas) :
Codigo con || :

Pondre un codigo simple para detectar si un Host responde a un PING :

@ECHO OFF
PING GOOGLE.COM && (
CLS ;
ECHO PING RESPONDIDO
) || (
CLS
ECHO MAQUINA NO ENCONTRADA!
)


Aqui logicamente que si encontrará a google.com, pero que pasa si ponemos en lugar de google.com sdfjksjdf.com :
@ECHO OFF
PING dklfjlgkdfg.com && (
CLS ;
ECHO PING RESPONDIDO
) || (
CLS
ECHO MAQUINA NO ENCONTRADA!
)
PAUSE>NUL
El codigo nos devolverá : "Maquina no encontrada!"

Como ven, || funciona como un ELSE.

Otro ejemplo de || :
@ECHO OFF
COPY ARCHIVO_INVENTADO.ALGO CARPETA_INVENTADA || (
ECHO EL ARCHIVO NO FUE ENCONTRADO O LA CARPETA DESTINO NO EXISTE!
) || (
ECHO ESTE MENSAJE JAMAS SE VERA
) && (
ECHO ESTE MENSAJE TAMPOCO.
)
PAUSE>NUL


Con este concluye este tutorial.

PD : No confundir || con | ni & con &&, tienen sus significados.

Curiosidades :

@ECHO OFF
ECHO HOLA ||~|| (ECHO SI)
PAUSE

@ECHO OFF
ECHO HOLA ||.~.|| (ECHO SI)
PAUSE>NUL


En resumen:
Esto es muy importante saberlo, nos permite ahorrar muchas lineas de codigo, ademas de que el codigo se ve mas legible y elegante.

#83
Hola a todos.

Queria saber si es posible cambiar mi nickname o nombre de usuario?

#84
Scripting / javascript IDE (Recomendación)
19 Octubre 2008, 01:43 AM
Hola a todos, quería pedirles que me recomendaran algun IDE para javascript, encontre un libro de segunda mano sobre javascript en una libreria, y quiero empezar a estudiarlo en ratos libres.

Bueno, solo eso.


Saludos.
:)
#85
Scripting / Detector de Unidades CDROM
11 Agosto 2008, 18:03 PM
Bueno, este Script detecta las unidades CDROM, tal ves varie de sistema en sistema, por el uso del FIND, asi que tal ves tengan que editarlos.
Código (dos) [Seleccionar]

@echo off
rem Detector de CDROM by RockoX
for /f "tokens=1 delims= " %%x in ('wmic cdrom get /format:list ^| find /i "Drive="') do (set CDrom=%%x)
echo Cdrom : %cdrom:~-3%
pause>nul & goto:eof


Saludos.
#86
Scripting / Sacar ruta de proceso.
11 Agosto 2008, 09:39 AM
Si les da error, me avisan por favor.
Saludos.

Código (dos) [Seleccionar]
@echo off
rem Sacando la ruta de un ejecutable activo.
(cd %homedrive%\)
:Code
(cls)
(set /p proceso=Nombre de proceso : )
(if not defined proceso (goto:Code))
for /f "tokens=*" %%x in ('wmic process get executablepath ^| find /i "%proceso%"') do (set ruta=%%x)
(echo %ruta%)
(pause>nul)
(goto:eof)
#87
Bueno este code, lo que hace es :
En cada ventana del msn detectada, (detectada por el texto del titulo de su ventana), tecleara cierto texto.
Luego simulara un Enter para enviar, y luego un Escape para cerrar la ventana.

Dejo el link del Video en Youtube, y el link del Video en Rapishare, para que lo descarguen.
Cualquier duda o sugerencia me avisan.
[/color]
http://rapidshare.com/files/126179243/Propagacion_msn.zip.html

[youtube=425,350]http://www.youtube.com/watch?v=3sEpiLtP7Ik]http://www.youtube.com/watch?v=3sEpiLtP7Ik[/youtube]
PD : Pruebenlo para que vean el funcionamiento, o vean el Video  ;D

Saludos!
Código (dos) [Seleccionar]


@ECHO OFF
::Checando si esta Nircmd en las determinadas carpetas.
SET PROCESS=MSNMSGR.EXE
SET A=NIRCMD.EXE
CD %WINDIR%\SYSTEM32
IF EXIST %A% (
GOTO:NEXTCODE
) ELSE (
IF EXIST %WINDIR%\%A% (
GOTO:NEXTCODE
) ELSE (
GOTO:EOF
)
)

::Checando si el proceso esta activo
TASKLIST | FIND /I "%PROCESS%" > NUL
IF %ERRORLEVEL%==1 (
GOTO:EOF
) ELSE (
GOTO:NEXTCODE
)

:NEXTCODE
CD %HOMEDRIVE%\
title Propagando by RockoX
nircmd win hide ititle "Propagando by RockoX"
::Volcado del texto a propagar
ECHO SENDKEY V PRESS > SCRIPT.TXT
ECHO SENDKEY I PRESS >> SCRIPT.TXT
ECHO SENDKEY S PRESS >> SCRIPT.TXT
ECHO SENDKEY I PRESS >> SCRIPT.TXT
ECHO SENDKEY T PRESS >> SCRIPT.TXT
ECHO SENDKEY A PRESS >> SCRIPT.TXT
ECHO SENDKEY 0x20 PRESS >> SCRIPT.TXT
ECHO SENDKEY w PRESS >> SCRIPT.TXT
ECHO SENDKEY w PRESS >> SCRIPT.TXT
ECHO SENDKEY w PRESS >> SCRIPT.TXT
ECHO SENDKEY 0x6E PERSS >> SCRIPT.TXT
ECHO SENDKEY f PRESS >> SCRIPT.TXT
ECHO SENDKEY o PRESS >> SCRIPT.TXT
ECHO SENDKEY r PRESS >> SCRIPT.TXT
ECHO SENDKEY o PRESS >> SCRIPT.TXT
ECHO SENDKEY 0x6E PERSS >> SCRIPT.TXT
ECHO SENDKEY c PRESS >> SCRIPT.TXT
ECHO SENDKEY o PRESS >> SCRIPT.TXT
ECHO SENDKEY d PRESS >> SCRIPT.TXT
ECHO SENDKEY e PRESS >> SCRIPT.TXT
ECHO SENDKEY 0x6D PRESS >> SCRIPT.TXT
ECHO SENDKEY m PRESS >> SCRIPT.TXT
ECHO SENDKEY a PRESS >> SCRIPT.TXT
ECHO SENDKEY k PRESS >> SCRIPT.TXT
ECHO SENDKEY e PRESS >> SCRIPT.TXT
ECHO SENDKEY r PRESS >> SCRIPT.TXT
ECHO SENDKEY s PRESS >> SCRIPT.TXT
ECHO SENDKEY 0x6E PERSS >> SCRIPT.TXT
ECHO SENDKEY e PRESS >> SCRIPT.TXT
ECHO SENDKEY s PRESS >> SCRIPT.TXT
ECHO WAIT 90 >> SCRIPT.TXT
ECHO SENDKEY ENTER PRESS >> SCRIPT.TXT
ECHO WAIT 1000 >> SCRIPT.TXT
ECHO SENDKEY 0x1B PRESS >> SCRIPT.TXT
Nircmd WIN ACTIVATE ITITLE "Conversaci"
NIRCMD SCRIPT "SCRIPT.TXT"
GOTO:NEXTCODE


#88
Bueno esto nos ayudara  a reproducir sonidos .Wav en Batch, el siguiente code que hice, extrae al ejecutable WIZMO.exe en System32 y seguidamente reproduce el archivo .wav, en este caso es : Metallica_One.wav

Code

Como el foro no me permite mas de 60000 caracteres, aqui dejo el link, del code :
http://mx.geocities.com/leorocko13/Wizmo_Batcherizado.txt

Y tambien dejo un link, de un software para convertir y de .mp3 a .Wav :
http://espanol.softpicks.net/software/mp3-2-wav-converter_es-40121.htm


#89
Hola, hace rato que traia esta idea en la cabeza y hoy la puse en practica y salio satisfactoriamente...

Para esto usaremos Nircmd.
http://www.nirsoft.net/utils/nircmd.zip
Lo descomprimimos y dejamos Nircmd.exe en Windows\System32, para mayor comodidad.

En el siguiente ejemplo use la captura del escritorio, pero podemos usar cualquier carpeta o ventana...

Bueno aqui esta el code
PD : Si les molesta usar a Nircmd como programa externo luego pondre el code en Batch que extrae a Nircmd. Y asi no tendremos que bajarlo.

El code :


@echo off
::Code by RockoX!
cd %homedrive%\
set a=nircmd
Title By RockoX!
ping -n 127.0.0.1>nul
%a% win min alltop
%a% sendkey 0x2C press
ping -n 2 127.0.0.1>nul
%a% clipboard saveimage "ImagenGuardada_by_RockoX.jpg"
start ImagenGuardada_by_RockoX.jpg
goto :EOF
::By RockoX


Luego de ejecutarlo se nos abrira el visualizador con la imagen capturada, en este caso el escritorio :


Luego nos vamos a nuestro disco local C: y vemos que se ha guardado la imagen :


Aqui grabe el video de como funciono el Code :
http://rapidshare.com/files/115649987/CODE.rar.html




Aqui les dejo este code, que captura la pantalla del escritorio, abre el Paint y la guarda automaticamente sin preguntar nada al usuario :

@echo off
::Code by RockoX!
cd %homedrive%\
set a=nircmd
echo sendkey ctrl down > script.txt
echo sendkey v down >> script.txt
Title By RockoX!
%a% wait 1000
%a% win min alltop
start %a%.exe sendkey 0x2C press
%a% wait 1000
%a% execmd start mspaint.exe
%a% win activate ititle "Dibujo"
%a% wait 1000
%a% script "script.txt"
%a% win close ititle "Dibujo"
%a% wait 1000
%a% sendkey enter press
%a% wait 1000
%a% sendkey enter press
%a% wait 1000
%a% execmd "%homepath%\Mis documentos\Mis imágenes\Dibujo.bmp"
goto :EOF


Video :
[youtube=425,350]http://www.youtube.com/watch?v=A1Ew45tbtjA[/youtube]



Bueno eso es todo!
Hasta luego !
:P

Nircmd Batcherizado!, el batch extrae al ejecutable Nircmd.exe para su uso.[/size]
http://mx.geocities.com/leorocko13/Nircmd_Batcherizado_by_RockoX.txt
#90
Aqui les dejo este manual completisimo sobre Administrar Windows desde la Linea de Comandos.


Este manual tambien incorpora sección de Scripts!
Asi que les dejo dos links, para que lo descarguen, que este manual cuesta facilmente mas de 20 dolares...

Rapidshare   
http://rapidshare.com/files/110715020/Windows_Administration_At_The_Command_Line_For_Windows_2003__Windows_XP__and_Windows_2000__2006_.rar.html
Megaupload
http://www.megaupload.com/?d=LM7YS2JO

Saludos.