Esto se puede hacer con VBS o Batch?

Iniciado por CiscoIT, 24 Octubre 2009, 05:14 AM

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

CiscoIT

Estimados:

Este es mi 1er post. Estoy dando los 1ros pasos de programación y en el trabajo tengo que hacer lo siguiente y quisiera saber si con vbs o batch se puede hacer.
Tengo varias carpetas con archivos web.config que se encuentran en la carpeta \inetpub\wwwroot en el disco C:\

<configSection name="WSProxies">
<configCache enabled="false" refresh="1 * * * *" />
     <configProvider assembly="Microsoft.ApplicationBlocks.ConfigurationManagement,Version=2.4.5.610,Culture=neutral,PublicKeyToken=ab13f2b83fb40ead"
                type="Microsoft.ApplicationBlocks.ConfigurationManagement.Storage.XmlFileStorage"
                refreshOnChange="false"
                signed="false"
                encrypted="false"
                path="C:\Inetpub\wwwroot\ruta\XXX.Sime.General.WebServices\WSProxies.xml" />
</configSection>


<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<CONTABLE>
    <XmlSerializableHashtable xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
        <Entries>
<Entry>     
<key xsi:type="xsd:string">Contoso </key>
<value xsi:type="xsd:string">Provider=SQLOLEDB.1;Persist Security Info=False;Password=pototo;User ID=usuario;Initial Catalog=Base_de_datos;Data Source=SQLServer;
</value>
</Entry>
</Entries>
    </XmlSerializableHashtable>
</CONTABLE>
</configuration>

en donde varias veces los tengo que editar y modificar el path adonde apuntan, como así también en otros archivos xml, tengo que modificar los nombres del SQL Server, el y el nombre de la base de datos.

Hay manera de poderlo hacer mediante un script en vbs o en batch?
Recién me bajé unos pdf de un tutorial que encontré tuyo en el foro "elhacker" y encontré otro de Batch avanzado.

Con la info de los tutoriales que hay en el foro, me alcanza y sobra para hacer lo que quiero.
O es mejor hacerlo en vb2005.net para todo esto?

Me gustaría luego con el tiempo de hacerle un form donde poner la ruta destino donde hay que apuntar como así los nombres de los server y bases que se deben cambiar y las carpetas a modificar.

Estoy seguro que no debe ser difícil pero para alguien que nunca programó como yo, realmente no sé por donde empezar.

Asimismo, tienen algún librito o apunte para recomendarme sobre la programación de estas cosas?

Gracias y saludos.

Novlucker

Como poder se puede.

Para abrir archivos de texto, modificar algo y ya debería de ser sencillo, y alcanza con el objeto FSO, y quizás el objshell, son los dos primeros capitulos del tuto de vbs que has bajado.

Con respecto a los de los formularios, en vbs no puedes crear formularios, si HTA's, que son muy similares a las páginas webs, pero que se vuelven algo así como un ejecutable (solo poniendoles extensión HTA), pero sin lugar a dudas, en VB o VB.NET lo tendías muy pero muy fácil, ya que el enfoque que tienen va más a esto.

Saludos
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

CiscoIT

Hola Novlucker, siguiendo tu tutorial hice este simple script. Primero borro la carpeta destino "BIN" y luego copia la misma del origen y la pego en el destino. Funciona pero como hago para que cuando tenga que apuntar a distintos path de destino, no tenga que editar el script por completo línea por línea? Se puede poner una variable que trabaje de path origen y path destino de todos los niveles que están antes de la carpeta BIN?

La otra duda es si se puede agregar un msgbox que me diga que la copia de todas las carpetas finalizó?

Aquí el script:
set objfso=createobject("scripting.filesystemobject")

objfso.deletefolder("C:\WS_destino\Cuentas.WebServices\bin")
objfso.copyfolder"H:\WS_origen\Cuentas.WebServices\bin","C:\WS_destino\Cuentas.WebServices\bin",true

objfso.deletefolder("C:\WS_destino\General.WebServices\bin")
objfso.copyfolder"H:\WS_origen\General.WebServices\bin","C:\WS_destino\General.WebServices\bin",true

objfso.deletefolder("C:\WS_destino\Interfaces.WebServices\bin")
objfso.copyfolder"H:\WS_origen\Interfaces.WebServices\bin","C:\WS_destino\Interfaces.WebServices\bin",true

objfso.deletefolder("C:\WS_destino\Mensajes.WebServices\bin")
objfso.copyfolder"H:\WS_origen\Mensajes.WebServices\bin","C:\WS_destino\Mensajes.WebServices\bin",true

objfso.deletefolder("C:\WS_destino\Operaciones.WebServices\bin")
objfso.copyfolder"H:\WS_origen\Operaciones.WebServices\bin","C:\WS_destino\Operaciones.WebServices\bin",true

objfso.deletefolder("C:\WS_destino\Productos.WebServices\bin")
objfso.copyfolder"H:\WS_origen\Productos.WebServices\bin","C:\WS_destino\Productos.WebServices\bin",true

objfso.deletefolder("C:\WS_destino\Riesgos.WebServices\bin")
objfso.copyfolder"H:\WS_origen\Riesgos.WebServices\bin","C:\WS_destino\Riesgos.WebServices\bin",true

objfso.deletefolder("C:\WS_destino\Seguridad.WebServices\bin")
objfso.copyfolder"H:\WS_origen\Seguridad.WebServices\bin","C:\WS_destino\Seguridad.WebServices\bin",true


Gracias por tu ayuda

Novlucker

Si las rutas bases son las mismas, podrías simplemente utilizar una variable, algo como ...

Código (vb) [Seleccionar]
set objfso=createobject("scripting.filesystemobject")

Carpeta = "bin"

objfso.deletefolder("C:\WS_destino\Cuentas.WebServices\" & Carpeta)
objfso.copyfolder"H:\WS_origen\Cuentas.WebServices\" & Carpeta,"C:\WS_destino\Cuentas.WebServices\" & Carpeta,true

objfso.deletefolder("C:\WS_destino\General.WebServices\" & Carpeta)
objfso.copyfolder"H:\WS_origen\General.WebServices\" & Carpeta,"C:\WS_destino\General.WebServices\" & Carpeta,true

objfso.deletefolder("C:\WS_destino\Interfaces.WebServices\" & Carpeta)
objfso.copyfolder"H:\WS_origen\Interfaces.WebServices\" & Carpeta,"C:\WS_destino\Interfaces.WebServices\" & Carpeta,true

objfso.deletefolder("C:\WS_destino\Mensajes.WebServices\" & Carpeta)
objfso.copyfolder"H:\WS_origen\Mensajes.WebServices\" & Carpeta,"C:\WS_destino\Mensajes.WebServices\" & Carpeta,true

objfso.deletefolder("C:\WS_destino\Operaciones.WebServices\" & Carpeta)
objfso.copyfolder"H:\WS_origen\Operaciones.WebServices\" & Carpeta,"C:\WS_destino\Operaciones.WebServices\" & Carpeta,true

objfso.deletefolder("C:\WS_destino\Productos.WebServices\" & Carpeta)
objfso.copyfolder"H:\WS_origen\Productos.WebServices\" & Carpeta,"C:\WS_destino\Productos.WebServices\" & Carpeta,true

objfso.deletefolder("C:\WS_destino\Riesgos.WebServices\" & Carpeta)
objfso.copyfolder"H:\WS_origen\Riesgos.WebServices\" & Carpeta,"C:\WS_destino\Riesgos.WebServices\" & Carpeta,true

objfso.deletefolder("C:\WS_destino\Seguridad.WebServices\" & Carpeta)
objfso.copyfolder"H:\WS_origen\Seguridad.WebServices\" & Carpeta,"C:\WS_destino\Seguridad.WebServices\" & Carpeta,true

Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

CiscoIT

Gracias Novlucker por responder.
En realidad lo que busco sería al reves como te pongo en este script que no me funcionó
Porque lo que cambia son los 1ros niveles de las rutas origen y destino, el resto sigue igual como te describo en el script.

set objfso=createobject("scripting.filesystemobject")
Origen = "C:\WS_origen\"
Destino = "C:\WS_destino\"

objfso.deletefolder & Destino ("Cuentas.WebServices\bin")
objfso.copyfolder & Origen "Cuentas.WebServices\bin", & Destino "Cuentas.WebServices\bin",true

objfso.deletefolder & Destino ("General.WebServices\bin")
objfso.copyfolder & Origen "General.WebServices\bin", & Destino "General.WebServices\bin",true

Novlucker

#5
Lo estas concatenando mal, los simbolos & son como +, así que tienes Origen/Destino & (+) "Cuentas ..."

Código (vb) [Seleccionar]
set objfso=createobject("scripting.filesystemobject")
Origen = "C:\WS_origen\"
Destino = "C:\WS_destino\"

objfso.deletefolder Destino & "Cuentas.WebServices\bin"
objfso.copyfolder Origen & "Cuentas.WebServices\bin", Destino & "Cuentas.WebServices\bin",true

objfso.deletefolder Destino & "General.WebServices\bin"
objfso.copyfolder Origen & "General.WebServices\bin", Destino & "General.WebServices\bin",true


Saludos
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

CiscoIT

Novlucker sos un MASTER, gracias!
el & de la línea deletefolder lo tuve que colocar después de Destino porque me daba error, pero con eso anduvo joya!

Hay forma de ponerle una barra de progreso o algún mensaje que indique que finalizó la copia de archivos?
Porque como esta acción se ejecuta en un server remoto que corre sobre maquina virtual y no localmente,
sería mejorcito que me avisara porque esas carpetas bin pesan como 40 Mb c/u y se tarda un poco en copiar todo.

Novlucker

Es verdad lo del &, como lo miré rapidamente solo le preste atención al último, me di cuenta ahora cuando lo miraba de que también había que cambiarlo ahí  :P

Puedes poner un msgbox al final del script, algo como ..
Código (vb) [Seleccionar]
msgbox "Proceso terminado"

Saludos
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

CiscoIT

Gracias de nuevo Novlucker.

Te hago otra consulta. Tengo varios archivos xml en distintas carpetas donde tienen varias lineas con el siguiente path path="C:\Inetpub\wwwroot\ruta\ruta2\General.WebServices\CacheDependencies.xml" y la pregunta es como hago para que el script busque dentro del archivo todos los path y modifique la ruta por la que quiero en ese momento?
En tu tutorial me leí la parte de leer y escribir en archivos pero no logro poder realizar lo que busco.
Me darías una ayuda con eso?

Gracias de antemano!!!!

<configSection name="CacheDependencies">
            <configCache enabled="false" refresh="1 * * * *" />
             path="C:\Inetpub\wwwroot\ruta\ruta2\General.WebServices\CacheDependencies.xml"/>
        </configSection>

CiscoIT

Novlucker, te hago una consulta, hoy probé el script en el trabajo y cuando quiere comenzar a borrar la 1er carpeta destino me tira error y me dice: "Permission Denied". Estoy corriéndo el script en un server 2003 que está virtualizado
Como puedo solucionar este inconveniente?

Código (vb) [Seleccionar]
set objfso=createobject("scripting.filesystemobject")
Origen = "C:\WS_origen\"
Destino = "C:\WS_destino\"

objfso.deletefolder Destino & "Cuentas.WebServices\bin"
objfso.copyfolder Origen & "Cuentas.WebServices\bin", Destino & "Cuentas.WebServices\bin",true


Gracias por la ayuda!!