Reemplazar archivos .dll haciendo uso de un .bat

De nuevo solicito su ayuda, realice algunas modificaciones al archivo bat anterior puesto que necesito que funcione ya sea en ingles o en español, en sistemas de 32 o 64 bits sin lograr éxito, el problema según mi criterio radica es la existencia de ambas carpetas "archivos de programas" o " Program files" tanto como "archivos de programa (x86)" o "program files (x86)" en un sistema de 64 Bits y no he podido hacer que el bat haga la diferencia a continuación describo el bat que estoy usando el cual es una modificación del que gentilmente ud me ayudo.
@echo off
IF EXIST "c:\Archivos de programa" (
ECHO Existe la carpeta Archivos de programa
copy /y "c:\Archivos de programa\siafi\jvm.dll" "c:\Archivos de programa\oracle\JInitiator 1.3.1.26\bin\hotspot\jvm.dll"
goto :fin)
IF EXIST "c:\Program Files" (
ECHO Existe la carpeta Program Files
copy /y "c:\Program Files\siafi\jvm.dll" "c:\program Files\Oracle\JInitiator 1.3.1.26\bin\hotspot\jvm.dll"
goto:fin)
IF EXIST "c:\Archivos de programa (x86)" (
ECHO Existe la carpeta Archivos de programa (x86)
copy /y "c:\Archivos de programa\siafi\jvm.dll" "c:\Archivos de programa\oracle\JInitiator 1.3.1.26\bin\hotspot\jvm.dll"
goto :fin)
IF EXIST "c:\Program Files (x86)" (
ECHO Existe la carpeta Program Files (x86)
copy /y "c:\Program Files\siafi\jvm.dll" "c:\program Files\Oracle\JInitiator 1.3.1.26\bin\hotspot\jvm.dll"
:Fin)
Para sistemas de 32 Bits funciona a la perfección.

1 respuesta

Respuesta
1
No acabo de entender en que consiste el problema.
¿En una máquina concreta pueden existir las cuatro carpetas:
c:\Archivos de programa
c:\Archivos de programa (x86)
c:\Program Files
c:\Program Files (x86)
?
No he trabajado mucho con Windows Vista ni con Windows 7 pero me da la impresión de que en estos sistemas operativos las carpetas reales tienen el nombre en inglés aunque vistas desde las ventanas de Windows parezcan tener otro nombre. Para decidir si van por ahí los problemas te sugiero que abras una ventana de CMD, te sitúes en el directorio raíz c:\ y hagas un dir para ver que nombres te aparecen y esos deben ser los que uses en el BAT.
Si lo que quieres es que en cualquiera de las cuatro carpetas, si existe, se haga el copy debes eliminar el "goto :fin" de cada "IF EXIST". Si lo eliminas hará todos los copy para carpeta que encuentre.
Pero ya te digo que no acabo de entender cual es el problema, por lo que tal vez nada de lo que te he dicho te sirva.
En todo caso no hay mayor problema que un poco de paciencia para intentar explicármelo de nuevo, que seguro que acabamos encontrando la solución.
Saludos,
GGG
Ud tiene toda la razón, voy a depurar mi consulta.
En una maquina de 64 bits, existen dos carpetas:
"program files" y "program files (x86)" como ud lo dice por sus nombres en ingles, cuando corro el bat anteriores no hace la sustisucion en la carpeta de x86 que es donde esta la carpeta origen y destino, a continuación depurare también el bat para resumir un poco.
@echo off
IF EXIST "c:\Program Files" (
ECHO Existe la carpeta Program Files
copy /y "c:\Program Files\siafi\jvm.dll" "c:\program Files\Oracle\JInitiator 1.3.1.26\bin\hotspot\jvm.dll"
goto:fin)
IF EXIST "c:\Program Files (x86)" (
ECHO Existe la carpeta Program Files (x86)
copy /y "c:\Program Files (x86)\siafi\jvm.dll" "c:\program Files (x86)\Oracle\JInitiator 1.3.1.26\bin\hotspot\jvm.dll"
:Fin)
Espero darme a entender.
En lo que ud me contesta probare removiendo el goto:fin) según sus instrucciones.
He estado haciendo pruebas en Windows 7 y creo que ya entiendo lo que te ocurre y también creo que sé como se puede resolver.
Imagino que en el momento de hacer el copy sobre la carpeta "c:\Program Files (x86)" te está diciendo "Acceso denegado" y por eso no hace el copy. Si es así debería reprenderte porque es una información importante que deberías haber aportado. Cuando algo no funciona pero da algún tipo de información es fundamental pasársela a quien quieras que te ayude. Si no es el caso discúlpame, y si lo es también, cada uno puede hacer las cosas como le parezca.
Volvamos al asunto.
Si te da ese mensaje el problema está en que Windows 7 y Windows Vista controlan verdaderamente los permisos de los usuarios para hacer determinadas cosas y un copy supone un permiso de escritura sobre la carpeta destino que posiblemente no tengas. Yo he probado en condiciones similares y me da ese problema.
Para resolverlo tienes que entrar en la ventana de cmd con permisos de administrador. Una forma sencilla es buscar el icono de "Símbolo del sistema" en Inicio\Programas\Accesorios abrir sus Propiedades y elegir "Ejecutar como administrador".
Si en esas condiciones te funciona ya está acotado el problema. Podría ser que en tus planes no entre funcionar de esta manera, pero al menos ya sabremos donde está el problema y como buscar la solución.
Si las cosas van por aquí puedes olvidarte de lo que te sugería de eliminar los "goto :fin" aunque tampoco te van a hacer daño.
Saludos y suerte,
GGG
Si he omitido algo mil disculpas y acepto de buena gana la reprimenda, pero de hecho he de asegurarte de que todas las pruebas e instalaciones se hacen desde la cuenta de administrador.
Sigo realizando pruebas con los pasos que me indicas, mil gracias.
Hola, otra aclaración.
Si uso este bat me funciona bien 32bits:
@echo off
IF EXIST "c:\Program Files" (
ECHO Existe la carpeta Program Files
copy /y "c:\Program Files\siafi\jvm.dll" "c:\program Files\Oracle\JInitiator 1.3.1.26\bin\hotspot\jvm.dll"
:Fin)
si uso este bat me funciona bien 64 bits:
@echo off
IF EXIST "c:\Program Files (x86)" (
ECHO Existe la carpeta Program Files
copy /y "c:\Program Files (x86)\siafi\jvm.dll" "c:\program Files (x86)\Oracle\JInitiator 1.3.1.26\bin\hotspot\jvm.dll"
:fin)
correcto?, hasta aca bamos bien.
ahora bien si uso alguna combinacion, por ejemplo esta:
@echo off
IF EXIST "c:\Program Files (x86)" (
ECHO Existe la carpeta Program Files
copy /y "c:\Program Files (x86)\siafi\jvm.dll" "c:\program Files (x86)\Oracle\JInitiator 1.3.1.26\bin\hotspot\jvm.dll"
IF EXIST "c:\Program Files" (
ECHO Existe la carpeta Program Files
copy /y "c:\Program Files\siafi\jvm.dll" "c:\program Files\Oracle\JInitiator 1.3.1.26\bin\hotspot\jvm.dll"
:fin)
solo me funcionara para 64bits, porque es la primera instruccion en el bat.
o por el contrario si uso:
@echo off
IF EXIST "c:\Program Files" (
ECHO Existe la carpeta Program Files
copy /y "c:\Program Files\siafi\jvm.dll" "c:\program Files\Oracle\JInitiator 1.3.1.26\bin\hotspot\jvm.dll"
IF EXIST "c:\Program Files (x86)" (
ECHO Existe la carpeta Program Files
copy /y "c:\Program Files (x86)\siafi\jvm.dll" "c:\program Files (x86)\Oracle\JInitiator 1.3.1.26\bin\hotspot\jvm.dll"
Solo me funcionara para 32bits, porque es la primera instrucción en el bat.
O sea que lo que no he logrado hacer es combinarlos para usarlos ya sea en 32 o en 64bits.
Espero no estarle confundiendo.
Gracias.
Vamos a ver si resulta que el problema es una tontería como el cierre de los paréntesis (también puede ser que se te hayan escapado al copiar). El paréntesis que se abre en cada instrucción "IF EXIST" sirve para agrupar todas las órdenes o comandos a ejecutar cuando se cumple la condición de existencia y abarca los comandos (uno por línea) hasta el cierre del paréntesis. Lo siguiente debería servir para todo:
@echo off
IF EXIST "c:\Program Files (x86)" (
ECHO Existe la carpeta Program Files
copy /y "c:\Program Files (x86)\siafi\jvm.dll" "c:\program Files (x86)\Oracle\JInitiator 1.3.1.26\bin\hotspot\jv11m.dll"
)
IF EXIST "c:\Program Files" (
ECHO Existe la carpeta Program Files
copy /y "c:\Program Files\siafi\jvm.dll" "c:\program Files\Oracle\JInitiator 1.3.1.26\bin\hotspot\jvm.dll"
)
Observa que en lo que me has pasado como combinación te falta cerrar paréntesis en algunos casos. Eso hacía que el segundo "IF EXIST" estuviera dentro del primero por lo que nunca se ejecutaba.
Según he ido escribiendo la respuesta me he ido convenciendo de que este va a ser el problema. A ver si hay suerte.
Saludos,
GGG
Con esto doy por finalizada esta pregunta muchas gracias y espero que la próxima vez que solicite su ayuda sea por otro tema, de nuevo mil gracias.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas