none
Sustituição de arquivo RRS feed

  • Pergunta

  • Amigos bom dia,

    Sou novo no que se diz scripts, gostaria de saber o seguinte:

    Preciso substituir um arquivo em uma pasta da máquina, porem temos algumas particularidades, preciso checar se o sistema o operacional, caso for xp copia para um caminho, se for Windows 7 copia para outro e detalhe, o usuário não é adm da máquina ...

    gostaria da ajuda dos senhores..

    obrigado.

    Ricardo


    Ricardo Cesar

    sexta-feira, 24 de agosto de 2012 11:36

Respostas

  • Boa tarde Rico,

    sua duvida é parecida com a desse  Post,

    mas creio que esse cod te ajude, acredito que no XP não vai haver tanto problema (desde que o arquivo que você fala seja arquivo de sistema), mas no win7 o grande "Vilão" é o UAC, mas faça um teste...

    qualquer coisa dê mais detalhes do arquivo/pasta que você esteja mexendo..

    Set os = GetObject("winmgmts:").InstancesOf("Win32_OperatingSystem")
    For Each obj In os
        Set prps = obj.Properties_
        OSLang = prps("OSLanguage").value
        BldNum = prps("BuildNumber").value
    Next
    	if BldNum > 7100  then
    		wscript.echo "Vou rodar no Win7 ou no Win8"
    		win7ou8
    if BldNum = 2600 then
    		wscript.echo "Vou rodar no WinXP"
    		winXp
    		end if
    	end if
    
    SUB win7ou8
    	If WScript.Arguments.length =0 Then
    		Set objShell = CreateObject("Shell.Application")
    		objShell.ShellExecute "wscript.exe", Chr(34) & _
    		WScript.ScriptFullName & Chr(34) & " uac", "", "runas", 1
     Else
    	Set objFSO = CreateObject("Scripting.FileSystemObject") 'objFSO variavel de arquivo
    	Set wshShell = CreateObject("WScript.Shell")
    		strOrigem = "\\srv1\tcpip230.cfg" 'variavel com origem
    		StrDestino = wshShell.ExpandEnvironmentStrings("%PROGRAMFILES%") & "\TUN"  'variavel com destino
    	if NOT objFSO.FileExists(StrDestino & "\tcpip230.cfg") Then 'verifica se existe
         objFSO.Copyfile StrOrigem, StrDestino & "\" , true 'caso nao exista, copia
    	else
    		if objFSO.GetFile(StrOrigem).DateLastModified > objFSO.GetFile(StrDestino & "\tcpip230.cfg").DateLastModified Then
          objFSO.Copyfile StrOrigem, StrDestino & "\" , true
    	End if
    		End If
      End If
    END SUB
    
    SUB winXP
    	Set objFSO = CreateObject("Scripting.FileSystemObject") 'objFSO variavel de arquivo
    	Set wshShell = CreateObject("WScript.Shell")
    		strOrigem = "\\srv1\tcpip230.cfg" 'variavel com origem
    		StrDestino = wshShell.ExpandEnvironmentStrings("%PROGRAMFILES%") & "\TUN"  'variavel com destino
      if NOT objFSO.FileExists(StrDestino & "\tcpip230.cfg") Then 'verifica se existe
           objFSO.Copyfile StrOrigem, StrDestino & "\" , true 'caso nao exista, copia
    	else
    		if objFSO.GetFile(StrOrigem).DateLastModified > objFSO.GetFile(StrDestino & "\tcpip230.cfg").DateLastModified Then
            objFSO.Copyfile StrOrigem, StrDestino & "\" , true
    
    		End if
    	End If
     END SUB


    att, Aparecido Deveza

    sexta-feira, 24 de agosto de 2012 17:33

Todas as Respostas

  • Boa tarde Rico,

    sua duvida é parecida com a desse  Post,

    mas creio que esse cod te ajude, acredito que no XP não vai haver tanto problema (desde que o arquivo que você fala seja arquivo de sistema), mas no win7 o grande "Vilão" é o UAC, mas faça um teste...

    qualquer coisa dê mais detalhes do arquivo/pasta que você esteja mexendo..

    Set os = GetObject("winmgmts:").InstancesOf("Win32_OperatingSystem")
    For Each obj In os
        Set prps = obj.Properties_
        OSLang = prps("OSLanguage").value
        BldNum = prps("BuildNumber").value
    Next
    	if BldNum > 7100  then
    		wscript.echo "Vou rodar no Win7 ou no Win8"
    		win7ou8
    if BldNum = 2600 then
    		wscript.echo "Vou rodar no WinXP"
    		winXp
    		end if
    	end if
    
    SUB win7ou8
    	If WScript.Arguments.length =0 Then
    		Set objShell = CreateObject("Shell.Application")
    		objShell.ShellExecute "wscript.exe", Chr(34) & _
    		WScript.ScriptFullName & Chr(34) & " uac", "", "runas", 1
     Else
    	Set objFSO = CreateObject("Scripting.FileSystemObject") 'objFSO variavel de arquivo
    	Set wshShell = CreateObject("WScript.Shell")
    		strOrigem = "\\srv1\tcpip230.cfg" 'variavel com origem
    		StrDestino = wshShell.ExpandEnvironmentStrings("%PROGRAMFILES%") & "\TUN"  'variavel com destino
    	if NOT objFSO.FileExists(StrDestino & "\tcpip230.cfg") Then 'verifica se existe
         objFSO.Copyfile StrOrigem, StrDestino & "\" , true 'caso nao exista, copia
    	else
    		if objFSO.GetFile(StrOrigem).DateLastModified > objFSO.GetFile(StrDestino & "\tcpip230.cfg").DateLastModified Then
          objFSO.Copyfile StrOrigem, StrDestino & "\" , true
    	End if
    		End If
      End If
    END SUB
    
    SUB winXP
    	Set objFSO = CreateObject("Scripting.FileSystemObject") 'objFSO variavel de arquivo
    	Set wshShell = CreateObject("WScript.Shell")
    		strOrigem = "\\srv1\tcpip230.cfg" 'variavel com origem
    		StrDestino = wshShell.ExpandEnvironmentStrings("%PROGRAMFILES%") & "\TUN"  'variavel com destino
      if NOT objFSO.FileExists(StrDestino & "\tcpip230.cfg") Then 'verifica se existe
           objFSO.Copyfile StrOrigem, StrDestino & "\" , true 'caso nao exista, copia
    	else
    		if objFSO.GetFile(StrOrigem).DateLastModified > objFSO.GetFile(StrDestino & "\tcpip230.cfg").DateLastModified Then
            objFSO.Copyfile StrOrigem, StrDestino & "\" , true
    
    		End if
    	End If
     END SUB


    att, Aparecido Deveza

    sexta-feira, 24 de agosto de 2012 17:33
  • Aparecido bom dia,

    Vou efetuar testes e volto a postar o resultado, mas o que eu preciso mais claramente, é substituir um arquivo do saplogon.ini do sap tanto no xp quanto no win7, sendo que eles estão em caminhos diferentes ...

    mas obrigado até o momento ...

    tkts.

    Ricardo.


    Ricardo Cesar

    segunda-feira, 27 de agosto de 2012 11:34
  • Rico,

    Também utilizamos SAP (7.20) na rede que trabalho, e atualmente utilizo um script VBS aplicado via GPO:

    On Error Resume Next
    Set objShell = WScript.CreateObject("WScript.Shell")
    Set colSystemEnvVars = objShell.Environment("User")      
    colSystemEnvVars("SAPLOGON_INI_FILE") = "\\servidor\suporte\saplogon\saplogon.ini"

    O que esse script faz é criar a variável "SAPLOGON_INI_FILE" no perfil do usuário (independente se é XP ou 7). Com isso, o SAP prioriza a leitura desse arquivo.

    Resolvi 100% dos problemas relacionados ao saplogon.ini :)

    Abraços.


    Daniel Silva Analista de TI

    segunda-feira, 27 de agosto de 2012 11:38
  • Rico,

    Foi isso mesmo que o Aparecido passou, ele utilizou a classe WMI Win32_OperatingSystem para conseguir a informações sobre o sistema operacional,

    Veja que ele armazenou a informação de versão do SO na variavel BldNum e considerou que Builds maiores que 7100 são Windows 7 ou 8 e build igual a 2600 é o Windows XP.

    Talvez o IF é que tenha ficado errado, um else resolve.

    if BldNum > 7100  then
    
        wscript.echo "Vou rodar no Win7 ou no Win8"
        win7ou8
    
    elseif BldNum = 2600 then
    
        wscript.echo "Vou rodar no WinXP"
        winXp
    
    end if


    Fábio de Paula Junior

    segunda-feira, 27 de agosto de 2012 11:47
    Moderador
  • Daniel bom dia,

    Você usou esse script postado ?

    Att.,


    Ricardo Cesar

    segunda-feira, 17 de setembro de 2012 14:43
  • Daniel bom dia,

    Voc tem ai o script que você usa para eu testar, por favor ..


    Ricardo Cesar

    segunda-feira, 17 de setembro de 2012 14:50
  • Ola Daniel,

    Ainda nao deu tempo, vou começar a mexer apartir da semana que vem, esse projeto é para 1 semana de outubro, porem tenho que testar e homologar antes de colocar em produção ...

    valeu pela força.


    Ricardo Cesar

    segunda-feira, 17 de setembro de 2012 14:51
  • Daniel boa tarde,

    Estou verificando o script e alterando as variáveis que o Aparecido passou, porem estava vendo codigo que vc postou dizendo que faz a mesma coisa ...

    me diz uma coisa, no caso do seu basta isso para efetuar as copias ?

    tanto xp quanto 7?

    e a questão do uac, ele salva em outro caminho que nao o padrao "c:\windows\saplogon.ini" ..

    no aguardo,

    Ricardo


    Ricardo Cesar

    quinta-feira, 4 de outubro de 2012 17:48
  • aparecido boa tarde,

    vou postar aqui o codigo com as variaveis que estarei utilizando ...

    Set os = GetObject("winmgmts:").InstancesOf("Win32_OperatingSystem")
    For Each obj In os
        Set prps = obj.Properties_
        OSLang = prps("OSLanguage").value
        BldNum = prps("BuildNumber").value
    Next
    if BldNum > 7100  then

    wscript.echo "Vou rodar no Win7 ou no Win8"
    win7ou8


    elseif = 2600 then

    wscript.echo "Vou rodar no WinXP"
    winXp

    end if
    end if

    SUB win7ou8
    If WScript.Arguments.length =0 Then
    Set objShell = CreateObject("Shell.Application")
    objShell.ShellExecute "wscript.exe", Chr(34) & _
    WScript.ScriptFullName & Chr(34) & " uac", "", "runas", 1
     Else
    Set objFSO = CreateObject("Scripting.FileSystemObject") 'objFSO variavel de arquivo
    Set wshShell = CreateObject("WScript.Shell")
    strOrigem = "\\bf-dc-fs-01\usuarios\publico\ti\sapini\saplogon.ini" 'variavel com origem
    StrDestino = wshShell.ExpandEnvironmentStrings("%USERPROFILE%\AppData\Local\VirtualStore\Windows\saplogon.ini 
    ") & "\TUN"  'variavel com destino
    if NOT objFSO.FileExists(StrDestino & "\saplogon.ini") Then 'verifica se existe
         objFSO.Copyfile StrOrigem, StrDestino & "\" , true 'caso nao exista, copia
    else
    if objFSO.GetFile(StrOrigem).DateLastModified > objFSO.GetFile(StrDestino & "\saplogon.ini").DateLastModified Then
          objFSO.Copyfile StrOrigem, StrDestino & "\" , true
    End if
    End If
      End If
    END SUB

    SUB winXP
    Set objFSO = CreateObject("Scripting.FileSystemObject") 'objFSO variavel de arquivo
    Set wshShell = CreateObject("WScript.Shell")
    strOrigem = "\\bf-dc-fs-01\usuarios\publico\ti\sapini\saplogon.ini" 'variavel com origem
    StrDestino = wshShell.ExpandEnvironmentStrings("c:\windows\saplogon.ini") & "\TUN"  'variavel com destino
      if NOT objFSO.FileExists(StrDestino & "\saplogon.ini") Then 'verifica se existe
           objFSO.Copyfile StrOrigem, StrDestino & "\" , true 'caso nao exista, copia
    else
    if objFSO.GetFile(StrOrigem).DateLastModified > objFSO.GetFile(StrDestino & "\saplogon.ini").DateLastModified Then
            objFSO.Copyfile StrOrigem, StrDestino & "\" , true

    End if
    End If
     END SUB


    Ricardo Cesar

    quinta-feira, 4 de outubro de 2012 17:50
  • Daniel,

    copiei seu codigo e alterei o caminho do arquivo ...

    rodei e não apresentou nada, olhei no perfil nao gero arquivos diferente, me explica melhor oque ele faz, por favor ..

    Att.,

    Ricardo


    Ricardo Cesar

    quinta-feira, 4 de outubro de 2012 18:00