Crear directorio del mes actual en BAT

Iniciado por ferrec, 15 Enero 2015, 16:43 PM

0 Miembros y 2 Visitantes están viendo este tema.

ferrec

Hola, tengo una question que me esta volviendo loco y no encuentro una solucion... a ver si me podeis echar un cable por favor..

Lo que me gustaria hacer es crear un directorio con el mes actual, por ejemplo si estamos en enero, que reconozca que estamos en este mes y genere ese directorio llamado "enero", creo que es algo sencillo pero no se como hacerlo...lo que he podido es hacer directorios con el formato  día/mes/año pero no solo con el mes actual.


Muchas gracias

el-brujo

#1
Tienes que usar el comando "date"

Código (dos) [Seleccionar]
@echo off
mkdir directorio %DATE%


Ejemplo:

Código (dos) [Seleccionar]
@ECHO OFF
@ECHO RESPALDO DE ARCHIVOS
REM creamos una variable conteniendo la fecha actual con el formato año-mes-dia
SET FOLDER=%date:~6,4%-%date:~3,2%-%date:~0,2%
REM Creamos la carpeta donde se guardará la copia de respaldo
IF NOT EXIST Backup MKDIR Backup
MKDIR Backup%FOLDER%
REM Seteamos las propiedades del comando XCOPY
SET BACKUPCMD=XCOPY /S /C /D /E /H /I /R /Y
REM Ejecutamos la instrucción
%BACKUPCMD% Actual. Backup%FOLDER%

ferrec

Hola gracias por la respuesta...pero DATE es la fecha completa
al crear el directorio se crearia 15/01/2014 y no el mes solamente que es lo que busco.

No se si me he explicado bien, perdonad...

lo que necesito es un bat para que me genere un directorio solamente con el MES actual.

Mil gracias de nuevo por tu respuesta

Eleкtro

#3
Hola

No es posible obtener el nombre de un mes específico mediante un lenguaje limitado como es Batch, no de forma natural.

Puedes hacerlo así:

Código (dos) [Seleccionar]
@Echo Off & Title GetMonthName by Elektro
(CHCP 1252)1>NUL

Call :GetMonthName
Echo [+] Current Month Is: "%monthName%"
:: MKDir ".\%monthName%"

Pause&Exit /B 0

:GetMonthName
Set    "monthNames=Enero Febrero Marzo Abril Mayo Junio Julio Agosto Septiembre Octubre Noviembre Diciembre"
Set /A "monthInt=%date:~3,2%" & REM Set For DD/MM/YYYY
For /F "Tokens=%monthInt%" %%# in ('Echo %monthNames%') do (
  Set "monthName=%%#"
  Exit /B 0
)
Goto:EOF


PD: En cualquier otro lenguaje sería una tarea simple de llevar a cabo, por ejemplo en VBS, otor lenguaje sencillo que podrías usar en vez de Batch.

Saludos








ferrec

#4
gracias Eleкtro, lo he probado como me has puesto pero solo me muestra el mes y no me genera el directorio , no me importa que no sea natural, solo que cuando ejecute el bat si no existe el directorio del mes actual que me lo cree...  

Una pregunta...es mas sencillo que el bat llame a VB me genere este directorio si no exite y luego continue con el Bat? ...Perdona por mi ignorancia  :-[

Gracias de nuevo pr tu ayuda :)




Ya esta solucionado...solamente me preguntaba pero no se porque no me lo generaba... le he quitado el echo que me mostraba el mes y le he dejado el mkdir que cree el directorio...


Gracias  ;-)

Código (dos) [Seleccionar]

Echo Off & Title GetMonthName by Elektro
(CHCP 1252)1>NUL

Call :GetMonthName
rem Echo [+] Current Month Is: "%monthName%"
MKDir ".\%monthName%"

Pause&Exit /B 0

:GetMonthName
Set    "monthNames=Enero Febrero Marzo Abril Mayo Junio Julio Agosto Septiembre Octubre Noviembre Diciembre"
Set /A "monthInt=%date:~3,2%" & REM Set For DD/MM/YYYY
For /F "Tokens=%monthInt%" %%# in ('Echo %monthNames%') do (
  Set "monthName=%%#"
  Exit /B 0
)
Goto:EOF





[MOD]: Está prohibido hacer doble post

Eleкtro

#5
Cita de: ferrec en 16 Enero 2015, 10:22 AM
gracias Eleкtro, lo he probado como me has puesto pero solo me muestra el mes y no me genera el directorio , no me importa que no sea natural, solo que cuando ejecute el bat si no existe el directorio del mes actual que me lo cree...  

Examina bien el código y verás que no te genera la carpeta porqué añadí una linea de comentario, descoméntala y todo irá bien,
de todas formas se supone que deberías saber como se crea una carpeta, eso es lo mínimo si vas a utilizar Batch.
EDITO: ya vi que lo modificaste :P

Cita de: ferrec en 16 Enero 2015, 10:22 AMUna pregunta...es mas sencillo que el bat llame a VB me genere este directorio si no exite y luego continue con el Bat? ...Perdona por mi ignorancia  :-[

Puedes hacer una especie de hibridación en el script para generar el VBS desde Batch y llamarlo y si quieres incluso devolver una respuesta y utilizarla, requiere más código, ya tienes una forma que funciona, úsala, en resumen "es lo mismo", jeje

Saludos!








ferrec

Gracias de nuevo... muy buena ayuda!  ;D

elqueteconte

Saludos;

Yo tengo que hacer algo parecido pero de la siguiente manera:
1.- El usuario indica (en numeros) el mes. Es decir que hay que validar que solo coloque dos caracteres y que sean numeros entre 01 y 12.
2.- Verificar si la carpeta mes con el año está creada. Ejemplo: Si el usuario indica 09 entonces la carpeta sería Septiembre2015.
3.- Si la carpeta no existe;se crea la carpeta con el mes y el año, ejemplo Septiembre2015
4.- Buscar en el directorio donde se está ejecutando el bath todas las carpetas cuya estructura sea año, mes, dia corresponda al mes de la carpeta que acabo de crear y mover esas carpetas a la que acabo de crear. Ejemplo
Si cree la carpeta miruta/Septiembre2015 y en miruta/ hay carpetas 20150901, 20150902 ... hasta 20150930 y moverla a  miruta/Septiembre2015

Me podrías orientar en como hacerlo, no tengo ni idea.

Desde ya mil gracias....

Mad Antrax

Cita de: elqueteconte en  9 Octubre 2015, 16:37 PM
Saludos;

Yo tengo que hacer algo parecido pero de la siguiente manera:
1.- El usuario indica (en numeros) el mes. Es decir que hay que validar que solo coloque dos caracteres y que sean numeros entre 01 y 12.
2.- Verificar si la carpeta mes con el año está creada. Ejemplo: Si el usuario indica 09 entonces la carpeta sería Septiembre2015.
3.- Si la carpeta no existe;se crea la carpeta con el mes y el año, ejemplo Septiembre2015
4.- Buscar en el directorio donde se está ejecutando el bath todas las carpetas cuya estructura sea año, mes, dia corresponda al mes de la carpeta que acabo de crear y mover esas carpetas a la que acabo de crear. Ejemplo
Si cree la carpeta miruta/Septiembre2015 y en miruta/ hay carpetas 20150901, 20150902 ... hasta 20150930 y moverla a  miruta/Septiembre2015

Me podrías orientar en como hacerlo, no tengo ni idea.

Desde ya mil gracias....


Te ayudo un poquito... lo he programado en VBS en lugar de Bat/Batch, es un lenguaje mucho más sencillo de implementar bajo mi punto de vista:

Código (vb) [Seleccionar]
'1.- El usuario indica (en numeros) el mes. Es decir que hay que validar que solo coloque dos caracteres y que sean numeros entre 01 y 12.
'2.- Verificar si la carpeta mes con el año está creada. Ejemplo: Si el usuario indica 09 entonces la carpeta sería Septiembre2015.
'3.- Si la carpeta no existe;se crea la carpeta con el mes y el año, ejemplo Septiembre2015
'4.- Buscar en el directorio donde se está ejecutando el bath todas las carpetas cuya estructura sea año, mes, dia corresponda al mes de la carpeta que acabo de crear y mover esas carpetas a la que acabo de crear. Ejemplo
'Si cree la carpeta miruta/Septiembre2015 y en miruta/ hay carpetas 20150901, 20150902 ... hasta 20150930 y moverla a  miruta/Septiembre2015

Set oFSO = CreateObject("Scripting.FileSystemObject")

iMes = InputBox("Introduce el mes: ")

If isNumeric(iMes) = False Then
While isNumeric(iMes) = False
MsgBox "Solo se permiten valores numéricos", vbExclamation + vbOkOnly
iMes = InputBox("Introduce el mes: ")
Wend
End If

If iMes < 1 Or iMes > 12 Then
While iMes < 1 Or iMes > 12
MsgBox "Solo se permiten valores numéricos entre 1 y 12", vbExclamation + vbOkOnly
iMes = InputBox("Introduce el mes: ")
Wend
End If

Select Case iMes
Case 1
sMes = "Enero"
Case 2
sMes = "Febrero"
Case 3
sMes = "Marzo"
Case 4
sMes = "Abril"
Case 5
sMes = "Mayo"
Case 6
sMes = "Junio"
Case 7
sMes = "Julio"
Case 8
sMes = "Agosto"
Case 9
sMes = "Septiembre"
Case 10
sMes = "Octubre"
Case 11
sMes = "Noviembre"
Case 12
sMes = "Diciembre"
End Select

sFolder = sMes & Year(Now)

If oFSO.FolderExists(sFolder) = True Then
MsgBox "La carpeta " & sFolder & " ya existe", vbInformation + vbOkOnly
Else
MsgBox "La carpeta " & sFolder & " no existe", vbInformation + vbOkOnly
oFSO.CreateFolder(sFolder)
End If


Verás que el punto (4) no lo he programado, te lo dejo para ti :) con el objeto oFSO podrás hacerlo sin problemas. Si tienes dudas pregunta, pero dale un poco al coco :)
No hago hacks/cheats para juegos Online.
Tampoco ayudo a nadie a realizar hacks/cheats para juegos Online.

elqueteconte

Me haz dejado loco jajajajaja.

Gracias mil.

Pensé en hacerlo en VB.net.

Voy a darle por allí a ver que logro.

Te podré contactar por este hilo o abro uno nuevo?