none
Alterar variável de Ambiente (PATH) - Comando

    Pergunta

  • Pessoal, Bom dia.

    Hoje surgiu uma questão aqui que eu to quebrando a cabeça para resolver e não consegui.

    Na minha máquina possuo vários bancos de dados, instalados, porém não startados para não consumir recursos desnecessários. Quando preciso de algum executo um script especifico, para subir os serviços relacionados ao Banco.

    Aí vem minha dúvida, como tenho 2 Bancos Oracles, Quando executo comandos como sqlplus por exemplo ele sempre puxa a primeira biblioteca do PATH.

    Path=D:\Banco_Dados\Oracle11gR2\product\11.2.0\dbhome_1\bin;D:\Banco_Dados\Oracle11g\product\11.1.0\db_1\bin;D:\Banco_Dados\Oracle10gXe\app\oracle\product\10.2.0\server\bin;C:\Program Files\Common Files\Microsoft Shared\Windows Live;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\;D:\Banco_Dados\SQL_2008_R2\100\Tools\Binn\;D:\Banco_Dados\SQL_2008_R2\100\DTS\Binn\;D:\Banco_Dados\SQL_2008_R2\100\Tools\Binn\VSShell\Common7\IDE\;C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\PrivateAssemblies\;C:\Program Files\Windows Live\Shared

    Precisaria inverter a ordem dos Path sem precisar reiniciar a máquina. Se eu fizer via Propriedades de sistema, funciona perfeitamente.

    Tentei setar via dos como PATH=, SET PATH. Porém não troca em tempo de execução. ( Troca apenas na janela ativa do DOS )

    É Possível fazer essa troca via Script sem precisar reiniciar a maquina?

     

    Ficaria assim:

    Path=D:\Banco_Dados\Oracle11gR2\product\11.2.0\dbhome_1\bin;D:\Banco_Dados\Oracle11g\product\11.1.0\db_1\bin;D:\Banco_Dados\Oracle10gXe\app\oracle\product\10.2.0\server\bin;C:\Program Files\Common Files\Microsoft Shared\Windows Live;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\;D:\Banco_Dados\SQL_2008_R2\100\Tools\Binn\;D:\Banco_Dados\SQL_2008_R2\100\DTS\Binn\;D:\Banco_Dados\SQL_2008_R2\100\Tools\Binn\VSShell\Common7\IDE\;C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\PrivateAssemblies\;C:\Program Files\Windows Live\Shared

     

    ou

     

    Path=D:\Banco_Dados\Oracle10gXe\app\oracle\product\10.2.0\server\bin;D:\Banco_Dados\Oracle11gR2\product\11.2.0\dbhome_1\bin;D:\Banco_Dados\Oracle11g\product\11.1.0\db_1\bin;C:\Program Files\Common Files\Microsoft Shared\Windows Live;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\;D:\Banco_Dados\SQL_2008_R2\100\Tools\Binn\;D:\Banco_Dados\SQL_2008_R2\100\DTS\Binn\;D:\Banco_Dados\SQL_2008_R2\100\Tools\Binn\VSShell\Common7\IDE\;C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\PrivateAssemblies\;C:\Program Files\Windows Live\Shared


    Toni de Almeida

    • Editado Toni de Almeida sexta-feira, 14 de janeiro de 2011 11:52 Mais informações
    quinta-feira, 13 de janeiro de 2011 12:11

Respostas

  • TOni, espero que esteja bem ^^

     

    sobre o script em VBS e o bat vc executou os comandos que mandei nos posts anteriores?

     

    Funcionou aqueles comandos especificamente?


    Thiago Cardoso Luiz - MCSA W2k3 MCTS SQL ITIL MSP http://www.thiagocardoso.org
    Caso seja util VOTE e COLOQUE COMO RESPOSTA
    terça-feira, 31 de maio de 2011 17:06
    Moderador
  • Melhorando cara. Mais me recupero.

     

    Quanto aos scripts / bat foi exatamente o que eu fiz.

    O problema é que ele altera no registro porém não muda em tempo de execução. O meu problema é exatamente esse. Mudar em tempo de execução.

    Quando eu edito visualmente e altero, ele altera em tempo de execução. Se faço via bat ou registro ele altera mais não em tempo de execução.

    Deixa eu tentar ser mais prático para ver se vocês ententem o problema.

     

    Hoje meu Path esta da seguinte forma:

     

    D:\PROGRAMAS\Oracle_Client\product\11.2.0\client_1\bin;C:\Program Files\Common Files\Microsoft Shared\Windows Live;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\;C:\Program Files\Windows Live\Shared

    Reparem na Ordem de pastas definidas no path:

     

    1° - D:\PROGRAMAS\Oracle_Client\product\11.2.0\client_1\bin

    2º - C:\Program Files\Common Files\Microsoft Shared\Windows Live

    3º - %SystemRoot%\system32

    4º - %SystemRoot% e assim por diante

     

    Exemplo: Eu fiz 2 bats, Alterando apenas a mensagem "D:\PROGRAMAS\Oracle_Client\product\11.2.0\client_1\bin" para saber de qual pasta ele estava executando. e Salvei o arquivo com o mesmo nome nas pastas 1 e 2.

     

    Abaixo exemplo de BAT. Eu salvei como Mensagem.VBS

    1º Arquivo: Mensagem.VBS ( Salvei ele em D:\PROGRAMAS\Oracle_Client\product\11.2.0\client_1\bin )

    Dim WshShell, BtnCode
    Set WshShell = WScript.CreateObject("WScript.Shell")
    BtnCode = WshShell.Popup("D:\PROGRAMAS\Oracle_Client\product\11.2.0\client_1\bin", 7, "Deu para entender o Problema ?", 0 + 32)

     

    2º Arquivo: Mensagem.VBS ( Salvei ele em C:\Program Files\Common Files\Microsoft Shared\Windows Live )

    Dim WshShell, BtnCode
    Set WshShell = WScript.CreateObject("WScript.Shell")
    BtnCode = WshShell.Popup("C:\Program Files\Common Files\Microsoft Shared\Windows Live", 7, "Deu para entender o Problema ?", 0 + 32)

     

    1º Após a criação dos arquivos, entre no executar e digite Mensagem.vbs e veja de qual pasta ele executa.

     

    2º Agora faça a alteração do PATH via Script ou Bat alterando as ordens das pastas 1 e 2. O Path alterado ficaria assim:

    C:\Program Files\Common Files\Microsoft Shared\Windows Live;D:\PROGRAMAS\Oracle_Client\product\11.2.0\client_1\bin;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\;C:\Program Files\Windows Live\Shared

     

    3º Execute novamente o Mensagem.VBS pelo executar do Windows - Veja que ele continua executando do mesmo local.

     

    4º Entramos no visual (Caminho > Painel de Controle > Sistema > Configurações avançada do sistema > Avançado > Variáveis de Ambiente ) - Veremos que o caminho esta alterado conforme o script de alteração de PATH. Se você simplesmente clicar em OK ele começa a assumir a ordem conforme script de alteração de PATH, ou seja a ordem invertida como queriamos anteriormente.  

     

    5º Execute novamente o Mensagem.VBS pelo executar do Windows - Repare que nesse momento ele assume a 2º Pasta como Default.


    Vejam se com esse teste vocês compreendem melhor o problema de tempo de execução.

     

     

     

     


    Toni de Almeida
    terça-feira, 31 de maio de 2011 18:16

Todas as Respostas

  • Toni,

    Creio que voce pode criar um BAT ou VBS com a sua lista de comandos e nas primeiras linhas alterara a variavel de sistema PATH.

    Em seguida fazer a chamada nos serviços...

    por fim subir e enviar os scripts depois de algum tempo com o comando PAUSE por exemplo ou validando o se o serviço esta no ar com o comando SC.

    Teste e retorne se necessitar de auxilio no bat ou vbs nos retorne.

    []'s


    Thiago Cardoso Luiz - MCSA W2k3 MCTS SQL ITIL MSP http://www.thiagocardoso.org Caso seja util VOTE e COLOQUE COMO RESPOSTA
    sexta-feira, 14 de janeiro de 2011 19:28
    Moderador
  • Toni,

    Creio que voce pode criar um BAT ou VBS com a sua lista de comandos e nas primeiras linhas alterara a variavel de sistema PATH.

    Em seguida fazer a chamada nos serviços...

    por fim subir e enviar os scripts depois de algum tempo com o comando PAUSE por exemplo ou validando o se o serviço esta no ar com o comando SC.

    Teste e retorne se necessitar de auxilio no bat ou vbs nos retorne.

    []'s


    Thiago Cardoso Luiz - MCSA W2k3 MCTS SQL ITIL MSP http://www.thiagocardoso.org Caso seja util VOTE e COLOQUE COMO RESPOSTA


    Se fosse fazer dessa forma, teria que criar um script para cada comando que irei executar.  acho que não fica viável.

    A melhor alternativa que achei é alterar o registro, porém não consegui colocar variável estendida via dos. (%SYSTEMROOT%) por exemplo. Quando rodo a script pelo DOS, ele Associa automáticamente c:\windows\system32 o que não deixa de estar correto também, como estou rodando em uma BAT, mesmo colocando o Circunflexo (^), como o contexto está entre aspas, ele assume como texto deixando a path errada. se Tiro o ^ ele associa a variável padrão. Alguma idéia de como deixar com a variável extendida?

    Chaves que devem ser alterada:

    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment]

    [HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Session Manager\Environment]

    [HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Control\Session Manager\Environment]

     

    Exemplo do comando:

    REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path /t REG_EXPAND_SZ /d "D:\Banco_Dados\Oracle11gR2\product\11.2.0\dbhome_1\bin;D:\Banco_Dados\Oracle11g\product\11.1.0\db_1\bin;D:\Banco_Dados\Oracle10gXe\app\oracle\product\10.2.0\server\bin;C:\Program Files\Common Files\Microsoft Shared\Windows Live;^%SystemRoot^%\system32;^%SystemRoot^%;^%SystemRoot^%\System32\Wbem;^%SYSTEMROOT^%\System32\WindowsPowerShell\v1.0\;D:\Banco_Dados\SQL_2008_R2\100\Tools\Binn\;D:\Banco_Dados\SQL_2008_R2\100\DTS\Binn\;D:\Banco_Dados\SQL_2008_R2\100\Tools\Binn\VSShell\Common7\IDE\;C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\PrivateAssemblies\;C:\Program Files\Windows Live\Shared"

     

    Se alguem tiver alguma alternativa melhor, por favor, nos informe.


    Toni de Almeida
    segunda-feira, 17 de janeiro de 2011 11:19
  • Toni,

    Nao esta padrao o SYstemroot no C:\windows?

    Voce pode utilizar o conteudo da variavel alterando o  %systemroot% no codigo pelo seu driver padrao.

    []´s

     


    Thiago Cardoso Luiz - MCSA W2k3 MCTS SQL ITIL MSP http://www.thiagocardoso.org Caso seja util VOTE e COLOQUE COMO RESPOSTA
    segunda-feira, 17 de janeiro de 2011 17:13
    Moderador
  • Olá Toni.

    Alguma novidade sobre o problema?

     

    Abraço.

     


    Richard Juhasz
    sexta-feira, 21 de janeiro de 2011 17:24
    Proprietário
  • Olá Toni!

    Veja se esse link te ajuda: http://support.microsoft.com/kb/841180/pt-br

    Abraços.


    http://enyex.wordpress.com
    • Sugerido como Resposta Carlos Feitosa domingo, 23 de janeiro de 2011 19:49
    • Não Sugerido como Resposta Toni de Almeida segunda-feira, 24 de janeiro de 2011 10:36
    domingo, 23 de janeiro de 2011 08:25
    Moderador
  • Olá Toni!

    Veja se esse link te ajuda: http://support.microsoft.com/kb/841180/pt-br

    Abraços.


    http://enyex.wordpress.com


    Caro Enyel, meu probrema não está em subir os serviços do oracle. O problema está em especificar qual das instancias o path pegará o comando.

    Ex.: Tenho o Oracle 10 XE e o 11g na máquina. As vezes preciso executar comando especificos do 10 e as vezes especifico do 11.

    Para isso abria o path do windows e alterava a ordem de qual o SO busca primeiro.

    Então pra isso, queria criar um script para fazer essa troca mais fácil.


    Toni de Almeida
    segunda-feira, 24 de janeiro de 2011 10:46
  • Alguma novidade?
    Thiago Cardoso Luiz - MCSA W2k3 MCTS SQL ITIL MSP http://www.thiagocardoso.org Caso seja util VOTE e COLOQUE COMO RESPOSTA
    segunda-feira, 24 de janeiro de 2011 13:56
    Moderador
  • Alguma novidade?
    Thiago Cardoso Luiz - MCSA W2k3 MCTS SQL ITIL MSP http://www.thiagocardoso.org Caso seja util VOTE e COLOQUE COMO RESPOSTA


    Pior que não.

    Mesmo alterando os 3 registros, sem reiniciar ele não funciona.

    Precisava de algo que não reinicie a máquina.

     

    O mais engraçado é que descobri agora que eu não preciso reiniciar a máquina. Depois de executar a importação do registro alterado, preciso navegar até as variáveis de ambiente abrir e clicar em OK que ele funciona da forma que eu quero.

    Caminho > Painel de Controle > Sistema > Configurações avançada do sistema > Avançado > Variáveis de Ambiente > OK

     

    Alguem imagina alguma uma solução ?


    Toni de Almeida

    • Editado Toni de Almeida quarta-feira, 26 de janeiro de 2011 12:36 Novas Informações
    quarta-feira, 26 de janeiro de 2011 11:05
  • Toni,

     

    Se voce faz por script nao rola mas alterando pelo caminho

    Caminho > Painel de Controle > Sistema > Configurações avançada do sistema > Avançado > Variáveis de Ambiente > OK

    Funciona?


    Thiago Cardoso Luiz - MCSA W2k3 MCTS SQL ITIL MSP http://www.thiagocardoso.org Caso seja util VOTE e COLOQUE COMO RESPOSTA
    segunda-feira, 31 de janeiro de 2011 12:46
    Moderador
  • Se eu rodar o script, ele não assume.

    Quando depois de rodar o script vou lá em variáves abro e dou um ok ele passa a funcionar.

     

    Coisa de Loko.. não consegui entender.


    Toni de Almeida
    quarta-feira, 2 de fevereiro de 2011 10:43
  • Toni,

     

    Não sei se voce conhece o comando via bat:

    set path=%path%;w:\vol\company\nt\bin

     

    ou via VBS

    Set WshShell = WScript.CreateObject("WScript.Shell")
    Set WshEnv = WshShell.Environment("SYSTEM")
    WshEnv("Path") = WshEnv("Path") & ";C:\append path"

    []'s


    Thiago Cardoso Luiz - MCSA W2k3 MCTS SQL ITIL MSP http://www.thiagocardoso.org Caso seja util VOTE e COLOQUE COMO RESPOSTA
    quarta-feira, 2 de fevereiro de 2011 19:30
    Moderador
  • Olá Toni.

    Alguma novidade sobre o problema?

     

    Abraço.

     


    Richard Juhasz
    quinta-feira, 24 de fevereiro de 2011 18:33
    Proprietário
  • Toni,

     

    Não sei se voce conhece o comando via bat:

    set path=%path%;w:\vol\company\nt\bin

     

    ou via VBS

    Set WshShell = WScript.CreateObject("WScript.Shell")
    Set WshEnv = WshShell.Environment("SYSTEM")
    WshEnv("Path") = WshEnv("Path") & ";C:\append path"

    []'s


    Thiago Cardoso Luiz - MCSA W2k3 MCTS SQL ITIL MSP http://www.thiagocardoso.org Caso seja util VOTE e COLOQUE COMO RESPOSTA

     

     

    Aproveitei para fazer testes sobre este comando e rolou tranquilo aqui.


    Thiago Cardoso Luiz - MCSA W2k3 MCTS SQL ITIL MSP http://www.thiagocardoso.org Caso seja util VOTE e COLOQUE COMO RESPOSTA
    sexta-feira, 25 de fevereiro de 2011 21:23
    Moderador
  • Olá Thiago.

    Se possível, entre em contato comigo, gostaria de conversar com você sobre o fórum.

    v-rjuhas@microsoft.com

     

    Abraço.

     


    Richard Juhasz
    quinta-feira, 3 de março de 2011 19:33
    Proprietário
  • Te mandei um email

     

    []'s


    Thiago Cardoso Luiz - MCSA W2k3 MCTS SQL ITIL MSP http://www.thiagocardoso.org Caso seja util VOTE e COLOQUE COMO RESPOSTA
    sexta-feira, 4 de março de 2011 12:59
    Moderador
  • Bom Galera.. Eu sofri um acidente e fiquei fora do ar por alguns meses.

     

    Bom voltando ao problema de alteração do path.

     

    Thiago, eu conheço o script/Bat sim. Mesmo fazendo dessa forma o erro persiste.

     

    O Problema está que não é atualiza em tempo de execução, ou seja, Não importa se eu fiz via bat ou via registro se eu não entrar na tela Visual abrir e clicar em OK ele não considera. Outra opção para que ele considere é reiniciar a máquina.

     

    Então nesse caso prefiro entrar no visual de alteração de path e Abrir e clicar em OK.


    Toni de Almeida
    sexta-feira, 27 de maio de 2011 17:53
  • TOni, espero que esteja bem ^^

     

    sobre o script em VBS e o bat vc executou os comandos que mandei nos posts anteriores?

     

    Funcionou aqueles comandos especificamente?


    Thiago Cardoso Luiz - MCSA W2k3 MCTS SQL ITIL MSP http://www.thiagocardoso.org
    Caso seja util VOTE e COLOQUE COMO RESPOSTA
    terça-feira, 31 de maio de 2011 17:06
    Moderador
  • Melhorando cara. Mais me recupero.

     

    Quanto aos scripts / bat foi exatamente o que eu fiz.

    O problema é que ele altera no registro porém não muda em tempo de execução. O meu problema é exatamente esse. Mudar em tempo de execução.

    Quando eu edito visualmente e altero, ele altera em tempo de execução. Se faço via bat ou registro ele altera mais não em tempo de execução.

    Deixa eu tentar ser mais prático para ver se vocês ententem o problema.

     

    Hoje meu Path esta da seguinte forma:

     

    D:\PROGRAMAS\Oracle_Client\product\11.2.0\client_1\bin;C:\Program Files\Common Files\Microsoft Shared\Windows Live;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\;C:\Program Files\Windows Live\Shared

    Reparem na Ordem de pastas definidas no path:

     

    1° - D:\PROGRAMAS\Oracle_Client\product\11.2.0\client_1\bin

    2º - C:\Program Files\Common Files\Microsoft Shared\Windows Live

    3º - %SystemRoot%\system32

    4º - %SystemRoot% e assim por diante

     

    Exemplo: Eu fiz 2 bats, Alterando apenas a mensagem "D:\PROGRAMAS\Oracle_Client\product\11.2.0\client_1\bin" para saber de qual pasta ele estava executando. e Salvei o arquivo com o mesmo nome nas pastas 1 e 2.

     

    Abaixo exemplo de BAT. Eu salvei como Mensagem.VBS

    1º Arquivo: Mensagem.VBS ( Salvei ele em D:\PROGRAMAS\Oracle_Client\product\11.2.0\client_1\bin )

    Dim WshShell, BtnCode
    Set WshShell = WScript.CreateObject("WScript.Shell")
    BtnCode = WshShell.Popup("D:\PROGRAMAS\Oracle_Client\product\11.2.0\client_1\bin", 7, "Deu para entender o Problema ?", 0 + 32)

     

    2º Arquivo: Mensagem.VBS ( Salvei ele em C:\Program Files\Common Files\Microsoft Shared\Windows Live )

    Dim WshShell, BtnCode
    Set WshShell = WScript.CreateObject("WScript.Shell")
    BtnCode = WshShell.Popup("C:\Program Files\Common Files\Microsoft Shared\Windows Live", 7, "Deu para entender o Problema ?", 0 + 32)

     

    1º Após a criação dos arquivos, entre no executar e digite Mensagem.vbs e veja de qual pasta ele executa.

     

    2º Agora faça a alteração do PATH via Script ou Bat alterando as ordens das pastas 1 e 2. O Path alterado ficaria assim:

    C:\Program Files\Common Files\Microsoft Shared\Windows Live;D:\PROGRAMAS\Oracle_Client\product\11.2.0\client_1\bin;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\;C:\Program Files\Windows Live\Shared

     

    3º Execute novamente o Mensagem.VBS pelo executar do Windows - Veja que ele continua executando do mesmo local.

     

    4º Entramos no visual (Caminho > Painel de Controle > Sistema > Configurações avançada do sistema > Avançado > Variáveis de Ambiente ) - Veremos que o caminho esta alterado conforme o script de alteração de PATH. Se você simplesmente clicar em OK ele começa a assumir a ordem conforme script de alteração de PATH, ou seja a ordem invertida como queriamos anteriormente.  

     

    5º Execute novamente o Mensagem.VBS pelo executar do Windows - Repare que nesse momento ele assume a 2º Pasta como Default.


    Vejam se com esse teste vocês compreendem melhor o problema de tempo de execução.

     

     

     

     


    Toni de Almeida
    terça-feira, 31 de maio de 2011 18:16