[BATCH] Dudas varias

Iniciado por baldovi_6, 2 Diciembre 2018, 03:22 AM

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

baldovi_6


Buenas noches.

Estoy desarrollando una batch para que me genere unas determinadas carpetas en una rutas segun la tarea que me encomiende mi jefe.
Mi problema es que cada vez que ejecuto el batch, la primera vez siempre me da error, la segunda ya se completa correctamente (Bueno, aun me falta pulir detalles)

Y ahora mismo, me da el siguiente error
31 was unexpected at this time.

No entiendo que ayer funcionase, y hoy no.

Puede estar relacionado con el numero de lineas que llvo escritas?
Hay algun tamaño maximo (o recomendado) que haga que la ejecucion se vuelva inestable?


Un saludo

:D

Guarrino

Si puedes dejar el código sería más fácil ayudarte.

O tienes que "deducir" mejor lo que quieres que haga o mira desde que usuario lo ejecutas.

baldovi_6

Cita de: Guarrino en  2 Diciembre 2018, 06:08 AM
Si puedes dejar el código sería más fácil ayudarte.

O tienes que "deducir" mejor lo que quieres que haga o mira desde que usuario lo ejecutas.

Siento la tardanza.

En el siguiente post os dejo el codigo.

Muchas gracias por la respuesta.

baldovi_6

CODIGO

@ECHO OFF

SETLOCAL ENABLEEXTENSIONS
SET me=%~n0
SET parent=%~dp0

REM | ***************************************************************************************** |
REM | *                                                                                       * |
REM | *                                                                 * |
REM | * Localizacion y copia del fichero de Excel Report_DDMC.xlsm correspondiente al dia     * |
REM | * anterior al que nos encontramos. Posteriormente se copiara en la carpeta recien       * |
REM | * creada del dia de hoy.                                                                * |
REM | * En esta prueba vamos a intentar recuperar el fichero correspondiente al dia de ayer   * |
REM | * 22/11/2018. Tambien simularemos que estamos en 01/01/2018 para que nos recupere el    * |
REM | * fichero de 31/12/2017.                                                                * |
REM | *                                                                                       * |
REM | * Parametros pasados: AuxD, AuxM, AuxY, AuxRuta.                                        * |
REM | *                                                                                       * |
REM | ***************************************************************************************** |
CLS
ECHO.
SET Fecha= %DATE%
SET AuxD=%Fecha:~1,2%
SET AuxM=%Fecha:~4,2%
SET AuxY=%Fecha:~7,4%
SET AuxRuta=C:\Temp\Reports\DDMC\
ECHO %me%: Entramos en Test5
ECHO %AuxD% %AuxM% %AuxY% %AuxRuta%
ECHO.

REM | **************************************************************************************** |
REM | *                                                                                      * |
REM | * Codigo de la funcion de busqueda. Comprobaremos que dia es hoy y tomaremos decision  * |
REM | * basandonos en si es el primer dia del mes, o algun dia posterior.                    * |
REM | *                                                                                      * |
REM | **************************************************************************************** |   

IF NOT %AuxD%==01 (
   ECHO %me%: Entramos dentro del primer IF. Linea 40
   ECHO.
        REM Intento hacer un contador para que cuando encuentre el equivalente al dia de hoy me calcule el dia de ayer tambien. No funciona.
   FOR /L %%i IN (1,1,31) DO (
      IF "%%i"=="%AuxD%" (
         SET /A Hoy=%%i
         SET /A Ayer=%%i-1
         ECHO %me%: Hoy es: %Hoy%
         ECHO %me%. Ayer fue: %Ayer%
      )
   )
   ECHO.
   CALL :NOM_MES %AuxM%
   ECHO Dia anterior: [%DiaAnt%]
   ECHO Mes actual: [%NomMES%]
   MKDIR %AuxRuta%\%AuxY%\%NomMES%\%AuxD%
   ECHO %AuxRuta%\%AuxY%\%NomMES%\%Ayer%
   ECHO.
   IF /I EXIST %AuxRuta%\%AuxY%\%NomMES%\%DiaAnt%\Report_DDMC.xlsm (
      COPY %AuxRuta%\%AuxY%\%NomMES%\%DiaAnt%\Report_DDMC.xlsm  %AuxRuta%\%AuxY%\%NomMES%\%AuxD%
      IF EXIST %AuxRuta%\%AuxY%\%NomMES%\%AuxD%\Report_DDMC.xlsm (
         ECHO COPIA_FICHERO. Copiado archivo Report_DDMC en %AuxRuta%\%AuxY%\%NomMES%\%AuxD%
      ) ELSE ( ECHO COPIA_FICHERO. Error durante la copia del archivo. Revisar. Linea 56)
   ) ELSE ( ECHO El archivo Report_DDMC.xlsm no existe en %AuxRuta%\%AuxY%\%NomMES%\%DiaAnt%. Revisar que ha podido suceder. Linea 79)   
) ELSE (
   ECHO Entramos en el ELSE del bucle IF. Linea 58
   IF %AuxM%==01 (
      ECHO Feliz Año Nuevo, pringao.
      ECHO.
      SET /A LastY=%AuxY%
      SET /A LastY=LastY-1
      SET LastM=12-DECEMBER
      SET LastD=31
      ECHO %LastY%
      ECHO.
      REM Primero hemos de crear las carpetas correspondientes al nuevo año y a los 12 meses.
      COPY %AuxRuta%\%LastY%\12-DECEMBER\31-12\Report_DDMC.xlsm  %AuxRuta%\%AuxY%\01-JANUARY\01-01
      ECHO.
   ) ELSE (
       ECHO %me%: El dia es 1, pero el mes es distinto de Enero. Falta implementar el conteo de carpetas para encontrar cual es el ultimo dia del mes anterior.
      SET /A LastM=%AuxM%
      SET /A LastM=LastM-1
      ECHO %LastM%
      CALL :NOM_MES %LastM%
      ECHO.
      ECHO %me%: Retornamos de NOM_MES. El nombre del mes anterior es %NomMES%
      ECHO.
      ECHO %me%: Ruta del mes anterior: %AuxRuta%\%NomMES% 
      ECHO %me%: Si todo ha ido bien, contador deberia contener el numero de carpetas, y por ende, el numero de dias del mes anterior.
      ECHO %me%: Asi pues, el numero de carpetas del mes anterior es %contador%.
      ECHO %me%: Por tanto, el fichero a copiar debera encontrarse en %AuxRuta%\%NomMES%\%contador%.
      ECHO.
      IF %contador% GEQ 31 (
         ECHO %me%: El numero de carpetas es mayor que 31. Revisar la ruta.
         ECHO.
         DIR %AuxRuta%\%NomMES%\%contador%\*.*
         REM Falta desarrollo paa este caso. Solicitare introducir por teclado la carpeta desde la cual copiar el fichero.
      )
      IF /I EXIST  %AuxRuta%\%NomMES%\%contador% (
         ECHO %me%: La carpeta existe. Vamos a listarla para ver si encontramos el archivo Report_DDMC.xlsm
         ECHO.
         DIR %AuxRuta%\%NomMES%\%contador%\*.xlsm
         ECHO.
         ECHO %me%: Ahora podermos copiar el fichero Report_DDMC.xlsm a la nueva carpeta correspondiente al dia de hoy.
         ECHO.
         
      )
     )
)      

GOTO :EOF

: NOM_MES

SET Meses=JANUARY FEBRUARY MARCH APRIL MAY JUNE JULY AUGUST SEPTEMBER OCTOBER NOVEMBER DECEMBER
FOR /F "Tokens=%1" %%a IN ("%Meses%") DO (
   IF %1 GEQ 10 (   
      ECHO  %2\%1-%%a
      MKDIR %2\%1-%%a
   ) ELSE (
      ECHO  %2\0%1-%%a
      MKDIR %2\0%1-%%a
     )

GOTO :EOF




Muchas gracias.

baldovi_6

Se que esta bastante por pulir y adecentar.
Y tengo dudas si he elegido bien al intentar hacer esto en un batch, pero es lo mas a mano que tengo en el trabajo.

Seguire dandole vueltas pero es que hasta decrementar una variable es extraño.

De nuevo, muchas gracias y perdon por tardar tanto en subir el codigo.

baldovi_6

Cita de: baldovi_6 en  9 Diciembre 2018, 05:19 AM
Se que esta bastante por pulir y adecentar.
Y tengo dudas si he elegido bien al intentar hacer esto en un batch, pero es lo mas a mano que tengo en el trabajo.

Seguiré dándole vueltas pero es que hasta decrementar una variable es extraño.

De nuevo, muchas gracias y perdón por tardar tanto en subir el código.

Al final este problemas también se ha resuelto.
Me replantee el código y como había enfocado el asunto y reescribí algunos trozos.

Muchísimas gracias a todos.