TUTORIAL PROGRAMACION BAT

Iniciado por soplo, 8 Septiembre 2003, 14:29 PM

0 Miembros y 1 Visitante están viendo este tema.

pebre

Hola! Tengo un bat que hace backup de una base de datos oracle, esto genera un archivo (*.dmp), mi pregunta es:
como puedo hacer para que se adicione por ejemplo la fecha al nombre del archivo cada vez que se ejecute el .bat ?

ej.  nombrearchivo041204.dmp   ;)

Soy nuevo en programacion bat.
Gracias.

OutShell

Hola a todos. Soy nuevo por aquí y veo que hay un gran nivel, a ver si me puedo pasar más a menudo. Bueno, y a lo que iba, a ver si me podeis solucionar una duda. Me gustaría hacer un script batch que cree de forma automática un directorio que por nombre tenga la fecha del día en que ejecutamos el archivo .bat, pero no encuentro la forma de hacerlo, seguro que alguno se le ocurre algo. Muchas gracias.

Un saludo.

ceo

 :)
Hola a todos.
Necesito ayuda con lo siguiente: quiero hacer un bat que cree una carpeta cuyo nombre sea la fecha y hora del sistema operativo.  Alguien tiene idea de como se hace?.  Gracias por sus comentarios.

FiReBlAdE2

solo funciona para w2k/xp...pq utiliza las extensiones de los comandos de consola y de las variables de entorno; espero que te sirva...

@echo off
cmd /v:on
date /t > .\mio.txt
time /t >> .\mio.txt

for /f  "usebackq tokens=1,2"  %%i in (`type .\mio.txt`) do set mifecha=%%i %%j !mifecha!

mkdir %mifecha%

OutShell

Bueno, pues durante el día de hoy encontré la solución a mi problema, aunque es un poco más drástica que la que acaba de publicar FiReBlAdE2, pero a cambio funciona indistintamente en windows 2k/xp y en 9x  ;).

Lo primero (solo para windows 9x) debemos crear un archivo que simule a la tecla intro, para esto hacemos lo siguiente:

copy con "nombre de archivo"

y pulsamos intro 2 veces el intro y luebo Ctrl+z y otra vez al intro, de esta forma se nos crea un archivo que ocupa 2 bytes y que nos va a servir para simular la tecla intro. Imaginemos que este archivo se va a llamar "intro.txt", luego el codigo sería este:

echo off
cls
set %1
set dia=00
set mes=00
set año=00
if %OS% == Windows_NT goto winnt
goto win9x
:winnt
date /t > date.txt
goto dia
:win9x
date <intro.txt |find "actual" >date.txt
goto dia
:dia
find " 01/" <date.txt
if errorlevel 0 if not errorlevel 1 set dia=01
find " 02/" <date.txt
if errorlevel 0 if not errorlevel 1 set dia=02
find " 03/" <date.txt
if errorlevel 0 if not errorlevel 1 set dia=03
find " 04/" <date.txt
if errorlevel 0 if not errorlevel 1 set dia=04
find " 05/" <date.txt
if errorlevel 0 if not errorlevel 1 set dia=05
find " 06/" <date.txt
if errorlevel 0 if not errorlevel 1 set dia=06
find " 07/" <date.txt
if errorlevel 0 if not errorlevel 1 set dia=07
find " 08/" <date.txt
if errorlevel 0 if not errorlevel 1 set dia=08
find " 09/" <date.txt
if errorlevel 0 if not errorlevel 1 set dia=09
find " 10/" <date.txt
if errorlevel 0 if not errorlevel 1 set dia=10
find " 11/" <date.txt
if errorlevel 0 if not errorlevel 1 set dia=11
find " 12/" <date.txt
if errorlevel 0 if not errorlevel 1 set dia=12
find " 13/" <date.txt
if errorlevel 0 if not errorlevel 1 set dia=13
find " 14/" <date.txt
if errorlevel 0 if not errorlevel 1 set dia=14
find " 15/" <date.txt
if errorlevel 0 if not errorlevel 1 set dia=15
find " 16/" <date.txt
if errorlevel 0 if not errorlevel 1 set dia=16
find " 17/" <date.txt
if errorlevel 0 if not errorlevel 1 set dia=17
find " 18/" <date.txt
if errorlevel 0 if not errorlevel 1 set dia=18
find " 19/" <date.txt
if errorlevel 0 if not errorlevel 1 set dia=19
find " 20/" <date.txt
if errorlevel 0 if not errorlevel 1 set dia=20
find " 21/" <date.txt
if errorlevel 0 if not errorlevel 1 set dia=21
find " 22/" <date.txt
if errorlevel 0 if not errorlevel 1 set dia=22
find " 23/" <date.txt
if errorlevel 0 if not errorlevel 1 set dia=23
find " 24/" <date.txt
if errorlevel 0 if not errorlevel 1 set dia=24
find " 25/" <date.txt
if errorlevel 0 if not errorlevel 1 set dia=25
find " 26/" <date.txt
if errorlevel 0 if not errorlevel 1 set dia=26
find " 27/" <date.txt
if errorlevel 0 if not errorlevel 1 set dia=27
find " 28/" <date.txt
if errorlevel 0 if not errorlevel 1 set dia=28
find " 29/" <date.txt
if errorlevel 0 if not errorlevel 1 set dia=29
find " 30/" <date.txt
if errorlevel 0 if not errorlevel 1 set dia=30
find " 31/" <date.txt
if errorlevel 0 if not errorlevel 1 set dia=31
:mes
find "/01/" <date.txt
if errorlevel 0 if not errorlevel 1 set mes=01
find "/02/" <date.txt
if errorlevel 0 if not errorlevel 1 set mes=02
find "/03/" <date.txt
if errorlevel 0 if not errorlevel 1 set mes=03
find "/04/" <date.txt
if errorlevel 0 if not errorlevel 1 set mes=04
find "/05/" <date.txt
if errorlevel 0 if not errorlevel 1 set mes=05
find "/06/" <date.txt
if errorlevel 0 if not errorlevel 1 set mes=06
find "/07/" <date.txt
if errorlevel 0 if not errorlevel 1 set mes=07
find "/08/" <date.txt
if errorlevel 0 if not errorlevel 1 set mes=08
find "/09/" <date.txt
if errorlevel 0 if not errorlevel 1 set mes=09
find "/10/" <date.txt
if errorlevel 0 if not errorlevel 1 set mes=10
find "/11/" <date.txt
if errorlevel 0 if not errorlevel 1 set mes=11
find "/12/" <date.txt
if errorlevel 0 if not errorlevel 1 set mes=12
:año
find "2004" <date.txt
if errorlevel 0 if not errorlevel 1 set año=04
find "2005" <date.txt
if errorlevel 0 if not errorlevel 1 set año=05
find "2006" <date.txt
if errorlevel 0 if not errorlevel 1 set año=06
:carpeta
cls
md %1%dia%-%mes%-%año%
:end

Se podría depurar un poco más, pero para lo que yo quería sobra  ;D. La primera variable es para poder poner la ruta donde queremos que se cree la carpeta, por ejemplo imaginemos que el archivo .bat se llama fecha:

fecha c:\dias\

de esta forma se crearía una carpeta de nombre 00-00-00 en la carpeta c:\dias, con lo que a día de hoy se quedaría así:

c:\días\23-12-04\

Espero que le sirva a lguien.

Un saludo.

jhackes

Y BUENO EL CODIGO que LES PONGO AHORA NO ES DE UN VIRUS NI MUCHO MENOS PERO TAMBIEN ES DE UN BAT, ASI que LO PONGO Y DESPUES EXPLICO MI PROBLEMA:

Código:

@rem ServAnalizer.bat V 0.1
@echo off
@cls
@set host=127.0.0.1
@set name=Desconocido
@set existe=si

@rem especificaron un host??
@if "%1"=="" goto shost
@set host=%1

@rem existe el hot??
@PING %host% | FIND "TTL=" > nul
@if errorlevel 1 set existe=no
@if "%existe%"=="no" goto snoexiste

@rem tomamos solo el nombre
@for /f "delims=9*" %%n in ('nslookup %host% ^| FIND ^"Nombre:  ^"') do @set name=%%n
@echo Analizando, %name%
@pause
@goto out

@rem Los mensajes de salida y error
:shost
  @echo Ocurrio un error, ud no ha especificado el host a analizar :(
  @goto out
:snoexiste
  @echo El host que ud especifico no existe o esta apagado.
  @goto out
:out



EL PROBLEMA ESTA AKI:
Código:

@for /f "delims=9*" %%n in ('nslookup %host% ^| FIND ^"Nombre:  ^"') do @set name=%%n
@echo Analizando, %name%



YA que LA SALIDA AL PASAR POR EJEMPLO, LA IP 216.239.39.99 ES:
Analizando, Nombre: google.com

CUANDO DEBERIA SER:
Analizando, google.com

Y PUES NO ENTIENDO POR que NO ME FUCIONA CON LA OPCION "tokens=9*", que INDICA LO que SE PASA AL FOR, SOLO FUNCIONA CON EL "delims=9*" Y NO DEBERIA DE SER ASI, POR que "delims" INDICA LOS SEPARADORES ENTRE LOS tokens..

Gracias, de ante mano.. 

Saluditops!!! & bytes!!!

soplo

Hola

CitarHola! Tengo un bat que hace backup de una base de datos oracle, esto genera un archivo (*.dmp), mi pregunta es:
como puedo hacer para que se adicione por ejemplo la fecha al nombre del archivo cada vez que se ejecute el .bat ?
Dispones de la variable de entorno %date% que te devuelve la fecha del sistema así que la cosa sería algo como esto:
ren *.dmp %date%*.dmp

CitarMe gustaría hacer un script batch que cree de forma automática un directorio que por nombre tenga la fecha del día en que ejecutamos el archivo .bat
Utilizando la misma variable:
md %date%

Citarquiero hacer un bat que cree una carpeta cuyo nombre sea la fecha y hora del sistema operativo.  Alguien tiene idea de como se hace?. 
Pues igual. Con las variables %date% y %time%
md %date%_%time%

Un saludo

Callar es asentir ¡No te dejes llevar!

pato99

Hola estuve examinando tu codigo del programa para obtener la fecha y hora y concretamente la linea

for /f  "usebackq tokens=1,2"  %%i in (`type .\mio.txt`) do set mifecha=%%i %%j !mifecha!

Me podrías explicar para que usas  !mifecha! y como funciona, creo que sirve para que vaya actualizando el valor de la variable dentro del bucle pero no lo tengo muy claro

Muchas gracias a todos por vuestros aportes, espero colaborar en lo que pueda

Citar

Helga

Hola a todos!!, Espero me puedan ayudar con mi problema...
Estoy haciendo un script .bat, para redireccionar un puerto y poder conectar una impresora que se encuentra en red.
Estuve buscando información y encontre que se supone me debería funcionar el siguiente comando:
net use lpt1:\\nombreequipodondeestalaimpresora\nombreimpresora
estoy haciendo esto en windows server 2003, y resulta que tiene otra configuracion de puertos, entonces yo puse el comando de la siguiente manera:

net use TS007:\\nombreequipodondeestalaimpresora\nombreimpresora
pero no me funciona.
Alguien sabe cual es el error que estoy cometiendo, cuando ejecuto esto me aparece el siguiente error:
error de sistema 67: No se encuentra el nombre de red especificado.

Tengo que agregar algo más al archivo.bat o que?
Por favor, agradecería mucho su ayuda :'(
De ante mano muchas gracias

Ladicita

Tewngo una duda...
Puedo enviar emails atraves de los BATS?
Me gustaria saber ...Gracias
LADICITA FOR EVER