Archivo .BAT no funciona
- JoseAlvarez
- Posts: 807
- Joined: Sun Nov 09, 2014 5:01 pm
Archivo .BAT no funciona
Estimados amigos, espero que estén muy bien.
En esta oportunidad, acudo al foro ante el extraño caso que se me presenta al momento de ejecutar un archivo .BAT
Trataré de explicarme lo mejor y más corto posible para no confundirlos.
Mi aplicación realiza tanto el respaldo como la restauración de las bases de datos MariaDB desde una opción del menu.
En el .PRG donde esto se hace, se crean y ejecutan en segundo plano, los respectivos archivos .BAT (desde código fuente) los cuales a través de comandos de consola, hacen respaldo y restauración.
Los respaldos de las bases de datos se siguen ejecutando sin ningún problema. Pero en la restauración se me presenta ahora lo siguiente:
Al querer ejecutar el .BAT, ocurre que el sistema operativo hace dos cosas, inserta en mitad de la instrucción un numero CERO y corta la ultima parte de la instrucción.
Me explcio mejor.
La orden es esta:
mysql -u vdbnr8ds_backup -prestaurardb <c:\Cuentas32\Backup\2023-09-26-H17-M18-Cuentas32BD.sql vdbnr8ds_cuentas32_demo
Si la copio del .BAT y la pego en el prompt en la carpeta de C:\Program Files\MariaDB 11.2\bin y la ejecuto, restaura perfectamente los datos.
Pero si lo hago usando el .BAT, o sea C:\Program Files\MariaDB 11.2\bin\archivo.bat -> enter sucede lo siguiente:
1.- Le aparece un cero a mitad de la instrucción
2.- Corta la ultima parte de la orden.
Pongo ejemplos:
Comando completo y que funciona escribiéndolo directo en la consola:
C:\Program Files\MariaDB 11.2\bin\mysql -u vdbnr8ds_backup -prestaurardb <c:\Cuentas32\Backup\2023-09-26-H17-M18-Cuentas32BD.sql vdbnr8ds_cuentas32_demo
Si lo hago desde el .BAT, muestra esto arrojando el respectivo mensaje de error:
C:\Program Files\MariaDB 11.2\bin>mysql -u vdbnr8ds_backup -prestaurardb 0<C:\Cuentas32\Backup\2023-09-26-H17-M18-Cuentas32BD.sql
ERROR 1046 (3D000) at line 22: No database selected
Como pueden observar, inserta un CERO a mitad de la instrucción (lo resalté en rojo) , y corta el nombre de la base de datos a restaurar al final de la misma.
Ya invertí dos días tratando de conseguir el error y no pude. Sucede lo mismo haciéndolo desde código fuente y también manualmente directo en la consola.
A alguien le ha pasado algo semejante?
En esta oportunidad, acudo al foro ante el extraño caso que se me presenta al momento de ejecutar un archivo .BAT
Trataré de explicarme lo mejor y más corto posible para no confundirlos.
Mi aplicación realiza tanto el respaldo como la restauración de las bases de datos MariaDB desde una opción del menu.
En el .PRG donde esto se hace, se crean y ejecutan en segundo plano, los respectivos archivos .BAT (desde código fuente) los cuales a través de comandos de consola, hacen respaldo y restauración.
Los respaldos de las bases de datos se siguen ejecutando sin ningún problema. Pero en la restauración se me presenta ahora lo siguiente:
Al querer ejecutar el .BAT, ocurre que el sistema operativo hace dos cosas, inserta en mitad de la instrucción un numero CERO y corta la ultima parte de la instrucción.
Me explcio mejor.
La orden es esta:
mysql -u vdbnr8ds_backup -prestaurardb <c:\Cuentas32\Backup\2023-09-26-H17-M18-Cuentas32BD.sql vdbnr8ds_cuentas32_demo
Si la copio del .BAT y la pego en el prompt en la carpeta de C:\Program Files\MariaDB 11.2\bin y la ejecuto, restaura perfectamente los datos.
Pero si lo hago usando el .BAT, o sea C:\Program Files\MariaDB 11.2\bin\archivo.bat -> enter sucede lo siguiente:
1.- Le aparece un cero a mitad de la instrucción
2.- Corta la ultima parte de la orden.
Pongo ejemplos:
Comando completo y que funciona escribiéndolo directo en la consola:
C:\Program Files\MariaDB 11.2\bin\mysql -u vdbnr8ds_backup -prestaurardb <c:\Cuentas32\Backup\2023-09-26-H17-M18-Cuentas32BD.sql vdbnr8ds_cuentas32_demo
Si lo hago desde el .BAT, muestra esto arrojando el respectivo mensaje de error:
C:\Program Files\MariaDB 11.2\bin>mysql -u vdbnr8ds_backup -prestaurardb 0<C:\Cuentas32\Backup\2023-09-26-H17-M18-Cuentas32BD.sql
ERROR 1046 (3D000) at line 22: No database selected
Como pueden observar, inserta un CERO a mitad de la instrucción (lo resalté en rojo) , y corta el nombre de la base de datos a restaurar al final de la misma.
Ya invertí dos días tratando de conseguir el error y no pude. Sucede lo mismo haciéndolo desde código fuente y también manualmente directo en la consola.
A alguien le ha pasado algo semejante?
"Los errores en programación, siempre están entre la silla y el teclado..."
Fwh 19.06 32 bits + Harbour 3.2 + Borland 7.4 + MariaDB + TDolphin
Carora, Estado Lara, Venezuela.
Fwh 19.06 32 bits + Harbour 3.2 + Borland 7.4 + MariaDB + TDolphin
Carora, Estado Lara, Venezuela.
- Willi Quintana
- Posts: 1023
- Joined: Sun Oct 09, 2005 10:41 pm
- Location: Cusco - Perú
- Contact:
Re: Archivo .BAT no funciona
Mi estimado, buenos dias,
¿Como construyes el .bat ?, aqui te envio un ejemplo
¿Como construyes el .bat ?, aqui te envio un ejemplo
Code: Select all | Expand
Function DBackUp()
local cFile, lEsc, nHand, cComando, hCambios, cText, oBrush, oDls, oSay, cFileBackup
cFile := "backup.bat"
lEsc := .f.
IF !FFERASE( cFile )
Return(.f.)
EndIf
cComando := ""
IF !FILE( cFile )
nHand := FCreate( cFile )
FWrite(nHand, cComando )
FClose(nHand)
// Respaldo Antes de la Auditoria, Nombre del DUMP
cFileBackup := 'respaldo_' + DTOS(Date()) + '_' + Time() + '.sql'
cComando := ""
cComando += 'mysqldump -h' + oApp:cConexion + ' -u' + oApp:cUser + ' -p' + oApp:cPassword + ' ' + oApp:cDatabase + ' > .\backup\'
cComando += cFileBackup + CRLF
hCambios := FOpen( cFile, FO_READWRITE + FO_SHARED )
FSeek( hCambios, 0, FS_END)
FWrite( hCambios, cComando )
FClose(nHand)
endif
//*------------- Proceso de Generacion del DUMP de la base de datos
lEsc := .F.
cText := ""
DEFINE DIALOG oDls RESOURCE "DLG_AVISO2" TITLE "Mi Respaldo ..." TRANSPARENT
REDEFINE SAY oSay PROMPT cText ID 100 OF oDls ;
COLORS CLR_WHITE
oDls:bStart := { || WaitRun( cFile, 0 ), lEsc := .T., oDls:End() }
ACTIVATE DIALOG oDls CENTERED VALID lEsc
rETURN (niL)
- JoseAlvarez
- Posts: 807
- Joined: Sun Nov 09, 2014 5:01 pm
Re: Archivo .BAT no funciona
Hola willi, como estas?
Desde codigo, lo hago asi:
Ahora bien, después de tanto probar, quise descartar haciendo el .BAT directo con el Block de Notas de Windows, y el resultado es igual. Me presenta el mismo error. Es solo con el .BAT de restauración. Con el de respaldar funciona perfecto tanto desde código como directo hecho con block de notas.
Desde codigo, lo hago asi:
Code: Select all | Expand
local h
local cComando
cComando := 'mysql -u cUsuario -p'+cPassword+' < '+cArchivo+' '+_cDatabase
h := fcreate( ("_4.bat") ); fwrite( h, cComando ) ; fclose( h )
"Los errores en programación, siempre están entre la silla y el teclado..."
Fwh 19.06 32 bits + Harbour 3.2 + Borland 7.4 + MariaDB + TDolphin
Carora, Estado Lara, Venezuela.
Fwh 19.06 32 bits + Harbour 3.2 + Borland 7.4 + MariaDB + TDolphin
Carora, Estado Lara, Venezuela.
Re: Archivo .BAT no funciona
José,
Saludos.
Puedes validar copiando el programa binario de maria BD en tu carpeta y ejecutar el .BAT en la misma ruta de tu programa binario.
En mi caso genero un *.bat en la misma carpeta de mi aplicación.
c:\dpsgev60\respaldo.bat
quien ejecutará a mysql.exe y mysqldump.exe ubicados en una subcarpeta c:\dpsgev60\mysql
Saludos.
Puedes validar copiando el programa binario de maria BD en tu carpeta y ejecutar el .BAT en la misma ruta de tu programa binario.
En mi caso genero un *.bat en la misma carpeta de mi aplicación.
c:\dpsgev60\respaldo.bat
quien ejecutará a mysql.exe y mysqldump.exe ubicados en una subcarpeta c:\dpsgev60\mysql
- Willi Quintana
- Posts: 1023
- Joined: Sun Oct 09, 2005 10:41 pm
- Location: Cusco - Perú
- Contact:
Re: Archivo .BAT no funciona
Mi Estimado, esto funciona correctamente: (sustituye lo que corresponda)
Code: Select all | Expand
//------------------------------------------------------------------------------------
Function DRestore()
local cFile, lEsc, nHand, cComando, hCambios, cText, oBrush, oDls, oSay, cFileBackup, cNDBase, cUser, cPass
cNDBase := "D:\SYSTEMDB\1206\MariaDb1011\bin\mysql alprogeneirl"
cFileBackUp := "D:\PRGS\SIAE\BIN\alprogen.sql"
cUser := "root"
cPass := "qazwsxedc"
cFile := "restore.bat"
lEsc := .f.
IF !FFERASE( cFile )
Return(.f.)
EndIf
cComando := ""
IF !FILE( cFile )
nHand := FCreate( cFile )
FWrite(nHand, cComando )
FClose(nHand)
// ojo, ruta completa.....
cComando := cNDBase + " < " + cFileBackUp + " -u " + cUser + " -p" + cPass
hCambios := FOpen( cFile, FO_READWRITE + FO_SHARED )
FSeek( hCambios, 0, FS_END)
FWrite( hCambios, cComando )
FClose(nHand)
endif
//*------------- Proceso de Generacion del DUMP de la base de datos
lEsc := .F.
cText := ""
DEFINE DIALOG oDls RESOURCE "DLG_AVISO2" TITLE "Mi Respaldo ..." TRANSPARENT
REDEFINE SAY oSay PROMPT cText ID 100 OF oDls ;
COLORS CLR_WHITE
oDls:bStart := { || WaitRun( cFile, 0 ), lEsc := .T., oDls:End() }
ACTIVATE DIALOG oDls CENTERED VALID lEsc
RETURN (niL)
- Willi Quintana
- Posts: 1023
- Joined: Sun Oct 09, 2005 10:41 pm
- Location: Cusco - Perú
- Contact:
Re: Archivo .BAT no funciona
Mi estimado, el bat que queda asi:
D:\SYSTEMDB\1206\MariaDb1011\bin\mysql alprogeneirl < D:\PRGS\SIAE\BIN\alprogen.sql -u root -pqazwsxedc
D:\SYSTEMDB\1206\MariaDb1011\bin\mysql alprogeneirl < D:\PRGS\SIAE\BIN\alprogen.sql -u root -pqazwsxedc
- JoseAlvarez
- Posts: 807
- Joined: Sun Nov 09, 2014 5:01 pm
Re: Archivo .BAT no funciona
Hola a todos colegas.
Una vez más agradecido por la ayuda en este maravilloso foro.
Amigo Juan Navas, intente hacerlo como me indicaste, ya que era la vía más rápida. Pero no funcionó. Seguía el error. No se si fue que no supe implementarlo, pero lo hice de todas las maneras posibles. El error estaba duro de matar.
Estimado Willi, tu código funcionó a la perfección. Solo hice los retoques de adecuación necesarios y funciona ¡ perfecto !
Con ello solucioné mi problema-
Muy agradecido a ambos por sus ideas y soluciones.
Solo me queda la duda del por que dejó de funcionar algo que trabajó bien por años. Pero tampoco me voy a preocupar por eso.
Un abrazo a todos !!
Una vez más agradecido por la ayuda en este maravilloso foro.
Amigo Juan Navas, intente hacerlo como me indicaste, ya que era la vía más rápida. Pero no funcionó. Seguía el error. No se si fue que no supe implementarlo, pero lo hice de todas las maneras posibles. El error estaba duro de matar.
Estimado Willi, tu código funcionó a la perfección. Solo hice los retoques de adecuación necesarios y funciona ¡ perfecto !
Con ello solucioné mi problema-
Muy agradecido a ambos por sus ideas y soluciones.
Solo me queda la duda del por que dejó de funcionar algo que trabajó bien por años. Pero tampoco me voy a preocupar por eso.
Un abrazo a todos !!
"Los errores en programación, siempre están entre la silla y el teclado..."
Fwh 19.06 32 bits + Harbour 3.2 + Borland 7.4 + MariaDB + TDolphin
Carora, Estado Lara, Venezuela.
Fwh 19.06 32 bits + Harbour 3.2 + Borland 7.4 + MariaDB + TDolphin
Carora, Estado Lara, Venezuela.
Re: Archivo .BAT no funciona
Jose,
Gracias, voy a tomar las recomendaciones de Willy,
Wylli, agradecido.
En este sitio, un colega reporta la misma incidencia.
https://www.lawebdelprogramador.com/for ... .html#last
Gracias, voy a tomar las recomendaciones de Willy,
Wylli, agradecido.
En este sitio, un colega reporta la misma incidencia.
https://www.lawebdelprogramador.com/for ... .html#last
Re: Archivo .BAT no funciona
José
Saludos,
El resultado el .BAT quedó de esta manera:
c:\adp\mysql\mysql.exe SGEV60_TEST < c:\adp\dpsgev60\dpsgev60.sql -uroot -proot --host=127.0.0.1 --port=3306 > TEMP\MYSQL.LOG
Saludos,
El resultado el .BAT quedó de esta manera:
c:\adp\mysql\mysql.exe SGEV60_TEST < c:\adp\dpsgev60\dpsgev60.sql -uroot -proot --host=127.0.0.1 --port=3306 > TEMP\MYSQL.LOG