none
Como criar um Script para criar atalho com critérios de verificação ?? RRS feed

  • Pergunta

  • Olá Pessoal, atualmente possuo esse Script, com o objetivo de cria atalho atalho de um determinado arquivo automaticamente na área de trabalho

     Porem gostaria que o script somente criasse o atalho, se o ".EXE" realmente fosse encontrado,..., pois quando ele não acha o programa, mesmo assim acaba criando um atalho em branco e inválido na área de trabalho!! Preciso disso para por na inicialização do sistema, fazendo verificação em varias pastas de vários servidores, obviamente cada VBS verificando um servidor diferente...

    Obs: Gostaria que não informasse mensagem nenhum de que o arquivo não foi encontrado, simplesmente ignorar...

    Existe algum parâmetro pra isso...

    me ajudem por favor !!!



    strAppPath = "\\server\pasta\teste.exe"

    Set objShell = CreateObject("WScript.Shell")
    objDesktop = objShell.SpecialFolders("Desktop")
    Set objLink = objShell.CreateShortcut(objDesktop & "\NomedoAtalho.lnk")

    objLink.TargetPath = strAppPath
    objLink.WindowStyle = 3
    objLink.Save

    WScript.Quit




    • Editado Werik Gomes quarta-feira, 16 de dezembro de 2015 18:25
    quarta-feira, 16 de dezembro de 2015 17:58

Respostas

  • Olá Werik,

    Para não aparecer nenhuma mensagem de erro, basta adicionar no ínicio do script:

    on error resume next

    Para verificar se o arquivo existe antes de criar o atalho, tente esse script abaixo:

    on error resume next
    
    strAppPath = "\\gm9-nus-dc01\prof$\teste.exe"
    
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    strExist = objFSO.FileExists(strAppPath)
    
    If not strExist Then
    	wscript.echo "Arquivo nao existe, saindo..."
    	WScript.Quit
    End If
    
    
    Set objShell = CreateObject("WScript.Shell")
    objDesktop = objShell.SpecialFolders("Desktop")
    Set objLink = objShell.CreateShortcut(objDesktop & "\NomedoAtalho.lnk")
    
    objLink.TargetPath = strAppPath
    objLink.WindowStyle = 3
    objLink.Save
    
    WScript.Quit

    Qualquer dúvida, avise.

    Se a resposta fornecida nessa thread ajudou na sua solução, não esqueça de marcar como resposta!

    Abraço,
    Gustavo Zimmermann Montesdioca - MTAC, MCT
    Blog: www.gm9.com.br
    quarta-feira, 16 de dezembro de 2015 18:54
  • Minha contribuição em PowerShell (PoSh!) utilizando um arquivo CSV de parâmetros para a criação dos atalhos e validação como solução alternativa:

    $PoShShell = New-Object -ComObject WScript.Shell
    ForEach ($ShortCut in (Import-Csv -Delimiter ";" C:\Utils\ShortCuts.csv)) {
        If (Test-Path $ShortCut.ShortCutPath) {
            $PoShShortCut = $PoShShell.CreateShortcut($env:USERPROFILE + "\Desktop\" + $ShortCut.ShortCutName + ".lnk")
            $PoShShortCut.TargetPath = $ShortCut.ShortCutPath
            $PoShShortCut.WorkingDirectory = $ShortCut.ShortCutWorkingDirectory
            $PoShShortCut.Save()
        }
    }



    • Editado 4HorsemenOfDaIT domingo, 20 de dezembro de 2015 13:56
    • Marcado como Resposta Werik Gomes quinta-feira, 4 de fevereiro de 2016 12:52
    domingo, 20 de dezembro de 2015 13:56

Todas as Respostas

  • Amigo,

    Por que você não utiliza a guia preferências na GPO de usuário? O atalho só irá ser criado, caso o arquivo esteja presente no desktop.

    quarta-feira, 16 de dezembro de 2015 18:54
  • Olá Werik,

    Para não aparecer nenhuma mensagem de erro, basta adicionar no ínicio do script:

    on error resume next

    Para verificar se o arquivo existe antes de criar o atalho, tente esse script abaixo:

    on error resume next
    
    strAppPath = "\\gm9-nus-dc01\prof$\teste.exe"
    
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    strExist = objFSO.FileExists(strAppPath)
    
    If not strExist Then
    	wscript.echo "Arquivo nao existe, saindo..."
    	WScript.Quit
    End If
    
    
    Set objShell = CreateObject("WScript.Shell")
    objDesktop = objShell.SpecialFolders("Desktop")
    Set objLink = objShell.CreateShortcut(objDesktop & "\NomedoAtalho.lnk")
    
    objLink.TargetPath = strAppPath
    objLink.WindowStyle = 3
    objLink.Save
    
    WScript.Quit

    Qualquer dúvida, avise.

    Se a resposta fornecida nessa thread ajudou na sua solução, não esqueça de marcar como resposta!

    Abraço,
    Gustavo Zimmermann Montesdioca - MTAC, MCT
    Blog: www.gm9.com.br
    quarta-feira, 16 de dezembro de 2015 18:54
  • Amigo, ficou quase perfeito, só queria acertar um detalhe, que é na caixa de mensagem "Arquivo nao existe, saindo..." gostaria que ela fechasse sozinha sem que eu tenha que dar "OK", colocando um tempo mínimo de 5 Segundos.

    E outro detalhe é, se consigo mandar buscar mais de um ".EXE", porém com nomes diferentes, utilizando a mesma base de código, sem que eu tenha que criar vários Scripts, evitando que o arquivo fique muito extenso ...

    quarta-feira, 16 de dezembro de 2015 20:36
  • Werik,

    Para não acontecer a mensagem, é só remover o wscript.echo dentro do if.

    Para criar vários, utilize um Array, veja o exemplo abaixo:

    Se a resposta fornecida nessa thread ajudou na sua solução, não esqueça de marcar como resposta!

    Abraço,
    Gustavo Zimmermann Montesdioca - MTAC, MCT
    Blog: www.gm9.com.br

    Dim strAppPath, objFSO, objShell, strPath, strExist, strFileName, objDesktop, objLink
    
    on error resume next
    
    strAppPath = Array("c:\teste.exe", "c:\teste1.exe")
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objShell = CreateObject("WScript.Shell")
    
    For Each strPath in strAppPath
    	strExist = objFSO.FileExists(strPath)
    	If strExist Then
    		strFileName = objFSO.GetFileName(strPath)
    		strFileName = Mid(strFileName, 1, len(strFileName)-4)
    		objDesktop = objShell.SpecialFolders("Desktop")
    		Set objLink = objShell.CreateShortcut(objDesktop & "\" & strFileName & ".lnk")
    		objLink.TargetPath = strPath
    		objLink.WindowStyle = 3
    		objLink.Save
    	End If
    Next
    
    WScript.Quit

    quinta-feira, 17 de dezembro de 2015 14:32
  • Olá amigo, desculpa pela demora à responder. A parte da mensagem ficou resolvida, com relação a mesma base de código buscar mais de um atalho, gostaria que ele buscasse atalhos em mais de um servidor,  porém criasse o atalho na área de trabalho com nome diferente EX: \\Servidor1\Programa1.EXE ele cria o atalho na área de trabalho  "atalho1.lnk. .................... e a segunda busca seria: \\Servidor2\Programa2.EXE ele cria o atalho na área de trabalho  "atalho2.lnk ... tentei adicionar o comando "array" na linha "

    Set objLink = objShell.CreateShortcut = array (objDesktop & "\Atalho1.lnk" "Atalho2.lnk")

    porém não obtive sucesso, assim como na primeira linha quando o mesmo me orientou a fazer....

    O objetivo é que ele busque mais de um .EXE, porém crie atalhos com nomes diferentes, pois cada programa possui funções diferentes e por isso preciso que ele crie cada atalho para cada .EXE encontrado....


    vlw pela ajuda ....




    • Editado Werik Gomes sábado, 19 de dezembro de 2015 22:24
    sábado, 19 de dezembro de 2015 22:11
  • Minha contribuição em PowerShell (PoSh!) utilizando um arquivo CSV de parâmetros para a criação dos atalhos e validação como solução alternativa:

    $PoShShell = New-Object -ComObject WScript.Shell
    ForEach ($ShortCut in (Import-Csv -Delimiter ";" C:\Utils\ShortCuts.csv)) {
        If (Test-Path $ShortCut.ShortCutPath) {
            $PoShShortCut = $PoShShell.CreateShortcut($env:USERPROFILE + "\Desktop\" + $ShortCut.ShortCutName + ".lnk")
            $PoShShortCut.TargetPath = $ShortCut.ShortCutPath
            $PoShShortCut.WorkingDirectory = $ShortCut.ShortCutWorkingDirectory
            $PoShShortCut.Save()
        }
    }



    • Editado 4HorsemenOfDaIT domingo, 20 de dezembro de 2015 13:56
    • Marcado como Resposta Werik Gomes quinta-feira, 4 de fevereiro de 2016 12:52
    domingo, 20 de dezembro de 2015 13:56