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

 

 


Tema destacado: Recopilación Tutoriales y Manuales Hacking, Seguridad, Privacidad, Hardware, etc


  Mostrar Temas
Páginas: 1 2 3 4 5 6 7 [8] 9 10
71  Programación / Scripting / Elevar a cualquier potencia. [Batch] en: 9 Abril 2009, 22:59 pm
Código
  1. @echo off
  2. :code
  3. set /p "base=Numero : "
  4. if not defined base (goto:code)
  5. set /p "potencia=Potencia : "
  6. if not defined potencia (goto:code)
  7. :funcion
  8. set /a resultado=0
  9. if %potencia% equ 0 (
  10. rem Salimos
  11. exit /b 1
  12. ) else (
  13. set /a "resultado=%base%"
  14. for /l %%i in (2 1 %potencia%) do (
  15. set /a resultado=resultado * %base%
  16. )
  17. )
  18. echo.Resultado : %resultado%
  19. exit /b 0

Salida :
Código:
Numero : 2
Potencia : 4
Resultado : 16
Press any key...
Código:
Numero : 5
Potencia : 8
Resultado : 390625
Press any key...
Código:
Numero : 6
Potencia : 7
Resultado : 279936
Press any key...

Código
  1. @echo off
  2. if ["%1"]==[""] (goto:error)
  3. if ["%1"]==[""] (goto:error)
  4. set /a resultado=0
  5. if %2 equ 0 (
  6. rem Salimos
  7. exit /b 1
  8. ) else (
  9. set /a "resultado=%1"
  10. for /l %%i in (2 1 %2) do (
  11. set /a resultado=resultado * %1
  12. )
  13. )
  14. echo.Resultado : %resultado%
  15. exit /b 0
  16. :error
  17. echo %~nx0 Base Potencia&echo.
  18. echo.Leo Gutierrez R.
  19. exit /b 1
  20.  
Código:
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  Programación / Ejercicios / [Batch] Pedir numero y sumar digitos en: 4 Abril 2009, 19:55 pm
Pedir un numero al usuario y sumar sus digitos :
Código:
Numero : 36574
Digitos : 5
Suma de todos los digitos : 25
Press any key...
Código
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. :code
  4. :: Creacion de variables :
  5. set /p "numero=Numero : "      // Esta variable ira disminuyendo
  6. if not defined numero (goto:code)
  7. set /a "contador=0"
  8. set "numero2=%numero%"
  9. set /a suma=0
  10. :bucle
  11. if not defined numero (goto:end)
  12. set "numero=%numero:~1%"
  13. set /a "contador+=1"
  14. goto:bucle
  15. :end
  16. echo.Digitos : %contador%
  17. set /a contador-=1
  18. for /l %%_ in (0 1 %contador%) do (
  19. set /a suma+=!numero2:~% style="color: #448888;">%_,1!
  20. )
  21. echo Suma de todos los digitos : %suma%
  22. goto:eof
73  Programación / Scripting / Filtro Anti- BatchInyection en: 4 Abril 2009, 09:54 am
Código
  1. @echo off
  2. :code
  3. set "name="
  4. set /p "name=Teclee su nombre : "
  5. if not defined name (goto:code)
  6. for /f "tokens=2 delims==" %%_ in ('set name') do (
  7. echo.Has escrito : %%_
  8. )
  9. goto:code

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

Funcionamiento :
Código:
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  Programación / Scripting / [Batch] Poner comentarios en el comando Set. en: 8 Marzo 2009, 05:42 am
Encontre una forma de poner comentarios en el comando set, sin alterar el comportamiento del mismo.

Un ejemplo para que quede bien claro :
Código:
@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 :

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

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

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

Código:
@echo off
set /p "suma=2+2 : "  Comment
if %suma% equ 4 (
    echo.Bien
) else (
    echo.Mal
)
set suma
Código:
@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
Código:
http://www.robvanderwoude.com/clevertricks.php

Saludos.
75  Programación / Scripting / [Perl] Clip.pl en: 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
  1. #!/usr/bin/perl
  2. # Leo Gutierrez Ramirez.
  3. # leorocko13@hotmail.com
  4. use strict;
  5. use warnings;
  6. use diagnostics;
  7. use Win32::Clipboard;
  8. if(!@ARGV)
  9. {
  10. print $0;
  11. print "\nModo de uso : \n$0 [-v] [-c] [-s Cadenas]\ n";
  12. -v : Ver el contenido del portapapeles.
  13. -c : Limpiar el contenido del portapapeles.
  14. -s : Poner el texto especificado en el portapapeles
  15. );
  16. } elsif(lc($ARGV[0]) eq '-v')
  17. {
  18. my $CLIP = Win32::Clipboard();
  19. print $CLIP->Get();
  20. } elsif(lc($ARGV[0]) eq '-c')
  21. {
  22. my $CLIP = Win32::Clipboard();
  23. $CLIP->Empty();
  24. } elsif(lc($ARGV[0]) eq '-s')
  25. {
  26. die "Falto la cadena a poner en el portapapeles" unless($ARGV[1]);
  27. my $CLIP = Win32::Clipboard();
  28. $CLIP->Set($ARGV[1]);
  29. }
  30. exit();

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

Código:
C:\>code.pl -c

C:\>


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

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


Saludos.
76  Programación / Scripting / Acciones sobre archivos de texto. [Batch] en: 24 Enero 2009, 00:30 am
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 :

Código:
echo Hola > file.txt
Código:
> Adios.txt echo "Mi texto."
Código:
@echo off
(
echo Linea1
echo Linea2
echo Linea3...
) > "file.txt"

Bash:
Código
  1. echo -e "Texto" > "file.txt"
Código
  1. echo -e "`ls -1`" >> "file.txt"
Código
  1. > "file.txt" echo -e "Hola mundo!"
Código
  1. cat <<EOF > "file.txt"
  2. Hola mundo cruel!
  3. Lineas
  4. Lineas
  5. EOF
Código
  1. (
  2. echo -e "Lineas";
  3. echo -e "Más lineas";
  4. echo -e "Más más lineas";
  5. ) > "file.txt"
  6.  

Mostrar el contenido de un archivo de texto :
Código:
type texto.txt
Código:
for /f "tokens=*" %%x in (texto.txt) do (echo %%x)

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

C:\>
Contar lineas (Sin lineas en blanco) :
Código:
@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) :
Código:
@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 :


Código:
@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 :
Código:
@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 :
Código:
@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 :
Código:
lksdfljskdfljksdf > file.txt
Código:
fsutil file createnew file.txt 0
Código:
ver | find "kjflskdfjlsjkdf" > file.txt

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

C:\>
Enumerar lineas de archivos :

Lista lineas en blanco tambien.
Código:
@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 :

Código:
@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 :
Código:
@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:
Código:
type texto.txt > texto2.txt
Siendo texto2.txt el nuevo archivo de texto.

Editar cierta linea de un archivo de texto :

Código:
@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 :

Código:
@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 :
Código:
echo 2,2,100,1c
Mover la primera linea al final del archivo de texto :

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

Código:
@echo off
(
echo 3,3,1M
echo e
) | edlin /b texto2.txt
Visualizar solo las primeras 10 lineas de un archivo :
Código:
@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"

Código:
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.
Código:
type texto.txt | find /i "Perl"
Contar las lineas que coincidan con cierta busqueda :
Código:
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 :
Código:
@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
Código:
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 :
Código:
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 :

Código:
@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:
Código:
dir /b *.txt | find /c ".txt"
Código:
dir /b *.txt | findstr /n ".txt$"
Intercambiar cierto palabra por otra :
Supongamos que queremos cambiar todas las palabras que digan "Perl", por C :
Código:
@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 :
Código:
@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 :
Código:
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 :

Código:
@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 :
Código:
@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 :
Código:
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 :


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

Requiere Nircmd.exe

Listar un archivo de forma inversa :
Código:
P
o
r
t
a
l
h
a
c
k
e
r
.
n
e
t

Y que no lo devuelva en esta forma :
Código:
     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
Código:
@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
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=1" %%_ in ('type "file.txt" ^| find /v /c ""') do (set "lineas=%%_";)
  4. set /a "contador=0"
  5. for /f "eol= tokens=* delims=" %%_ in (file.txt) do (
  6. set /a "contador+=1"
  7. set "linea!contador!=% style="color: #448888;">%_"
  8. )
  9. for /l %%_ in (%lineas%,-1,1) do (
  10. echo !linea% style="color: #448888;">%_!
  11. )
  12.  
Agregar una palabra al principio y al final de una linea en un archivo de texto :

Supongamos que tenemos el siguiente texto :
Código:
Leo
Laura
Lola
Lala
Código:
@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 :
Código:
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 :
Código:
type texto.txt | findstr "^...$"
Tip, por Tomi Salmi.

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


Caso practico :
[/size]
Supongamos que tenemos un archivo de texto así :
Código:
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

Código:
@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]
Código:
@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
  1. @echo off
  2. <"file.txt" set /p "primera_linea="
  3. set "primera_linea"

Pedir número de línea al usuario y mostrarla por pantalla:
Código:
@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
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set /a "linea=0"
  4. for /f "tokens=1" %%g in (file.txt) do (
  5.   set /a "linea+=1"
  6.   set "_answer=%%g"
  7. for /f "tokens=1" %%k in (file2.txt)  do (if "%%g" equ "%%k" set "_answer=")
  8. if defined _answer (
  9. echo Diferencia(^s^) encontrada en la linea !linea! :  !REG3XP0!>"%%g"
  10. )
  11. )
  12. set /p "="
  13. exit /b 0;

Ejemplo de uso:
Código:
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ódigo:
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ódigo:
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
  1. @echo off
  2. rem Leo Gutierrez R.
  3. 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 (
  4. dir /b %%i:\ > nul 2>&1 && (
  5. for /f "tokens=*" %%_ in ('dir /b /s %%i:archivoloco.txt') do (
  6. del /f /q "%%_"
  7. )
  8. )
  9. )
  10. pause>nul
  11. exit /b 0

Y eso fue todo, si volviera a buscar los archivos en los distintos discos, esto obtendría:
Código:
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  Programación / Scripting / Comportamiento inesperado [FOR+PAUSE] en: 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 :

Código:
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 . . .

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


Pero da un comportamiento inesperado :
Código:
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 ")" ) :
Código:
)&PAUSE

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


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

Saludos a todos.
78  Programación / Scripting / Error de redacción en la ayuda de COPY en: 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ódigo:
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  Programación / Scripting / Music.bat en: 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 :
Código:
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 :
Código:
@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  Programación / Scripting / Tip sobre acentos en Batch. en: 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 :
Código:
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 :
Código:
notepad archivo.txt


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

Ejemplo :
Código:
@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
Páginas: 1 2 3 4 5 6 7 [8] 9 10
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines