none
Script para executar video RRS feed

  • Pergunta

  • Olá pessoal,

    Estou para finalizar meu TCC, porém estou atolado numa parte e preciso da ajuda de vocês kkk.

    Criei um script para pegar os arquivos uma determinada pasta num servidor "sv1", e jogar num diretório no meu servidor "sv2", este arquivo é gerado no servidor SV1 com o nome do meu item, exemplo lapis_azul.txt, até ai tudo bem, porém preciso criar um script no meu SV2 para executar um vídeo propaganda desse meu item.

    Estou pensando em uma forma mas não sei coloca-la em prática, ficaria assim:

    diretorio/arquivos_txt/lapis_azul.txt

    diretorio/videos/lapis_azul.avi

    Os comandos ficariam +o- assim:

    set video_name = diretorio/arquivos_txt/lapis_azul.txt

    comandoParaExecutarAvi = diretorio/videos/"video_name"

    Obrigado!

    Conto com a ajuda de vocês!!!

    segunda-feira, 9 de outubro de 2017 21:22

Todas as Respostas

  • Ola Isaque,

    Se entendi bem é isso o o que vc quer?

    Como vc não falou o tipo de script, criei esse vbs.

    salve com a extensão vbs (Ex: teste.vbs)

    faça o teste...

    Set oShell = CreateObject("Wscript.Shell")
    Set oFSO = CreateObject("Scripting.FileSystemObject")
    
    sDiretorioTXT = "C:\temp\arquivos_txt\lapis_azul.txt"
    sDiretorioAVI = "C:\temp\videos\"
    
    video_name = sDiretorioAVI & Replace(oFSO.GetFileName(oFSO.GetFile(sDiretorioTXT)),"txt","avi")
    
    wscript.echo "Diretótio TXT: " & sDiretorioTXT & Chr(13) & "Video: " & video_name
    oShell.run video_name, 1, true


    att, Aparecido Deveza

    terça-feira, 10 de outubro de 2017 02:17
  • Olá Aparecido,

    Primeiramente muito obrigado pela resposta.

    Estou no trabalho no momento e não consegui testar o script, desculpe.

    Eu desconheço essa linguagem, mas é isso que você fez que eu quero.

    Tenho outra dúvida, se por exemplo, no meu diretório do SV1 eu tiver mais de um arquivo de texto, exemplo lapis_azul.txt e lapis_preto.txt, esses arquivos serão jogados na minha pasta diretorio/arquivos_txt/***.txt, se eu tiver duas chamadas nesse meu diretório, essa variavel  sDiretotioTXT = "C:\temp\arquivos_txt\lapis_azul.txt" teria esse valor estático, eu conseguiria fazer algo assim:

    Exemplo:

    sDiretotioTXT = "C:\temp\arquivos_txt\*.txt"                                                                                                     

    Porém poderia chegar 2 arquivos diferentes no meu diretório do SV2, como eu trataria isso? teria por exemplo alguma função assim:

    Exemplo:  

    verificadiretorio(){

    verifica se existe algum arquivo .txt no diretorio, cria a variavel video_name 

    goto executavideo

    }

    executavideo(){

    executa o video

    goto verificadiretorio

    }

    Grato!

    terça-feira, 10 de outubro de 2017 13:28
  • Sim é possível fazer isso de forma dinamica.

    Qual a liguagem que vc usa? por que fica mais fácil para fazer o cod na liguagem correta. :)


    att, Aparecido Deveza

    terça-feira, 10 de outubro de 2017 21:45
  • Olá, 

    Realizei o teste com o seu script e funcionou certinho, obrigado!

    Quanto a linguagem, ainda não defini por não saber qual usar (não conheço muito bem sobre linguagens de servidores), o script de transferência de arquivos fiz em .bat, porem minha aplicação principal é em JavaWeb.

    terça-feira, 10 de outubro de 2017 22:20
  • Ola Isaque,

    fiz as alterações, fiz em VBS que tenho mais familiarizade, rs, 

    Bom segue o script, faça um teste..

    Set oShell = CreateObject("Wscript.Shell")
    Set oFSO = CreateObject("Scripting.FileSystemObject")
    
    sDiretorioTXT = "C:\temp\arquivos_txt"
    sDiretorioAVI = "C:\temp\videos\"
    
    Set oFolderTXT = oFSO.GetFolder(sDiretorioTXT)
    Set sfilesTXT = oFolderTXT.Files
    
    For each sTXT In sfilesTXT
    	'*** Verifica se os arquivos que existem na pasta são com extensão TXT
    	If oFSO.GetExtensionName(sTXT) = "txt" Then
    		'*** Se houver arquivos TXT, executa a rotina para rodar o video
    		ExecutaVideo(Replace(sTXT.Name,"txt","avi"))
    	End If
    Next
    
    Sub ExecutaVideo(sFileAVI)
    	video_name = sDiretorioAVI & sFileAVI
    	'*** Verifica se o arquivo AVI existe, senão apresenta erro
    	If oFSO.FileExists(video_name) Then
    		wscript.echo "Diretótio TXT: " & sDiretorioTXT & Chr(13) & "Video: " & video_name
    		oShell.run video_name, 1, true
    	Else
    		wscript.echo "O [" & sFileAVI & "] não existe no diretorio " & sDiretorioAVI
    	End IF
    End Sub


    att, Aparecido Deveza


    quarta-feira, 11 de outubro de 2017 15:27
  • Olá Aparecido,

    Realizei o teste com esse script, funcionou muito bem, porém encontrei outra dificuldade. 

    Adicionei uma verificação ao Script para ver se existem arquivos dentro da minha pasta, se não houver ele executa uma propaganda programada, segue:

     

    Set oShell = CreateObject("Wscript.Shell")
    Set oFSO = CreateObject("Scripting.FileSystemObject")


    sDiretorioTXT = "C:\arquivos_txt"
    sDiretorioAVI = "C:\videos\"
    sDiretorioBackup = "C:\teste\123.avi"

    Set oFolderTXT = oFSO.GetFolder(sDiretorioTXT)
    Set sfilesTXT = oFolderTXT.Files


    If (oFSO.FileExists(sDiretorioTXT)) Then

    WScript.Echo("Entrei")

    Else
    WScript.Echo("Sem propaganda para executar no momento, executando propaganda programada")
    oShell.run sDiretorioBackup, 1, true
    End If



    For each sTXT In sfilesTXT
    '*** Verifica se os arquivos que existem na pasta são com extensão TXT
    If oFSO.GetExtensionName(sTXT) = "txt" Then
    '*** Se houver arquivos TXT, executa a rotina para rodar o video
    ExecutaVideo(Replace(sTXT.Name,"txt","avi"))
    End IF
    Next

    Sub ExecutaVideo(sFileAVI)
    video_name = sDiretorioAVI & sFileAVI
    '*** Verifica se o arquivo AVI existe, senão apresenta erro
    If oFSO.FileExists(video_name) Then
    wscript.echo "Diretótio TXT: " & sDiretorioTXT & Chr(13) & "Video: " & video_name
    oShell.run video_name, 1, true
    Else
    wscript.echo "O [" & sFileAVI & "] não existe no diretorio " & sDiretorioAVI
    End IF
    End Sub


    A verificação funcionou, mas logo após a execução do video ele para o script (mesmo sem a verificação), pensei em tentar algo assim:

    verifica pasta > sem arquivos? > executa prop. prog. > verifica pasta > chegou arquivo? > executa propaganda.

    Tudo isso constantemente, porém tenho uma duvida, se eu tiver esse mesmo arquivo na minha pasta eu precisaria "filtrar" o arquivo após a execução da propaganda, pois se continuar ali o arquivo a propaganda pode ficar no loop infinito só daquele arquivo, pensei em algo assim:

    verifica pasta > sem arquivos? > executa prop. prog. > verifica pasta > chegou arquivo? > executa propaganda e filtra o arquivo (deleta ou move para uma outra pasta ex: ("c\history\")) > executou propaganda? > verifica pasta > ......

    Teria como fazer algo assim com esse tipo de linguagem? 

    Estou começando na área de infraestrutura onde eu trabalho e estou gostando muito, porém ainda desconheço muitas coisas que da pra fazer com .bat, .sh, .vbs ... Se puder continuar me ajudando agradeço, pessoal da faculdade fica desmerecendo essas linguagens, quero mostrar pra eles que da pra fazer tudo por aqui kkkk

    Obrigado!

    quarta-feira, 11 de outubro de 2017 23:30
  • Entendi, rs

    Script administrativos não há problemas, hoje em dia usa-se muito powershell, mas tenho mais familiaridade com vbs, hta e Bat. 

    E me ajuda muito, mas é claro depende muito da necessidade.

    Bom segue o script atualizado, nele eu movo os arquivo para uma pasta History, mas se optar por deletar, basta apagar ou comentar a entradas OFSO.Copy.

    Veja se te ajuda, estamos aqui no forum para ajudar :)

    Set oShell = CreateObject("Wscript.Shell")
    Set oFSO = CreateObject("Scripting.FileSystemObject")
    
    sDiretorioTXT = "C:\temp\arquivos_txt"
    sDiretorioAVI = "C:\temp\videos\"
    sDiretorioBackup = "C:\temp\bkp\123.avi"
    sDiretorioHistory = "C:\temp\History\"
    
    Set oFolderTXT = oFSO.GetFolder(sDiretorioTXT)
    Set sfilesTXT  = oFolderTXT.Files
    
    '*** Verifica se existe arquivo na pasta TXT, senão executa o video BKP
    If sfilesTXT.Count > 0 Then
    	ChecaPasta()
    Else
    	msgbox "Sem propaganda para executar no momento" & Chr(13) & "Executando propaganda programada",48,"Alerta Propaganda"
    	oShell.run sDiretorioBackup, 1, true
    	ChecaPasta()
    End If
    
    Sub ChecaPasta()
    	Do Until sFile=True
    		IF sfilesTXT.Count > 0 Then
    			wscript.echo "Entrei, total de arquivos: "& sfilesTXT.Count
    			ExecutaPropaganda()
    			WScript.Sleep(5000)
    		Else
    			wscript.echo "espere 5 sec e verifica a pasta novamente"
    			WScript.Sleep(5000)
    		End If
    	Loop
    End Sub
    
    Sub ExecutaPropaganda()
    	For each sTXT In sfilesTXT
    		'*** Verifica se os arquivos que existem na pasta são com extensão TXT
    		If oFSO.GetExtensionName(sTXT) = "txt" Then
    			'*** Se houver arquivos TXT, executa a rotina para rodar o video
    			ExecutaVideo(Replace(sTXT.Name,"txt","avi"))
    			'*** Move o arquivo TXT para pasta de historico
    			oFSO.CopyFile oFSO.GetAbsolutePathName(sTXT), sDiretorioHistory,true
    			oFSO.DeleteFile oFSO.GetAbsolutePathName(sTXT),true
    		End IF
    	Next
    End Sub
    
    Sub ExecutaVideo(sFileAVI)
    	video_name = sDiretorioAVI & sFileAVI
    	'*** Verifica se o arquivo AVI existe, senão apresenta erro
    	If oFSO.FileExists(video_name) Then
    		wscript.echo "Diretótio TXT: " & sDiretorioTXT & Chr(13) & "Video: " & video_name
    		oShell.run video_name, 1, true
    		'*** Move o arquivo AVI para pasta de historico
    		oFSO.CopyFile video_name, sDiretorioHistory,true
    		oFSO.DeleteFile video_name, true
    	Else
    		wscript.echo "O [" & sFileAVI & "] não existe no diretorio " & sDiretorioAVI
    	End IF
    End Sub
    


    att, Aparecido Deveza

    sexta-feira, 13 de outubro de 2017 06:07
  • Aparecido, bom dia!

    Desculpa a demora para dar um feedback, vou testa-lo hoje de noite na aula e o valido.

    Obrigado!!

    segunda-feira, 16 de outubro de 2017 13:05
  • Olá Aparecido,

    Fiz o teste com o script, temos alguns bugs, tentei concertar porém sem sucesso.

    Assim, a parte de deleção não está 100% funcional, ela só deleta o arquivo caso não exista o AVI na pasta Videos, procedimento realizado:

    Coloquei o arquivo com um nome diferente, ele filtrou o arquivo apareceu a mensagem de erro informando que não existia a propaganda na pasta Videos, porém quando ele executa a função com sucesso não deleta o arquivo, creio que essas linhas não estejam pegando o nome correto do arquivo para fazer a deleção:

    ExecutaPropaganda() (nao deleta)

    oFSO.CopyFile oFSO.GetAbsolutePathName(sTXT), sDiretorioHistory,true
    oFSO.DeleteFile oFSO.GetAbsolutePathName(sTXT),true

    ExecutaVideo(arq) (deleta)

    video_name = sDiretorioAVI & sFileAVI

    oFSO.CopyFile video_name, sDiretorioHistory,true
    oFSO.DeleteFile video_name, true

    PS: Todos os arquivos terminam com .txt e .avi (posso mudar isso se você preferir), acho que o script está se perdendo nesta parte.

    Quanto ao loop de propagandas, também não está 100% funcional, pois quando ele termina de executar o vídeo o script "para" e quando tenho 2 arquivos na pasta arquivos_txt, ele executa apenas 1. Acredito que temos que colocar a função ChecaPasta() após a finalização da função ExecutaVideo(), tentei realizar o procedimento mas não funcionou.

    Como sempre, conto com sua ajuda!

    Obrigado!


    terça-feira, 17 de outubro de 2017 00:18
  • Ola Isaque,

    Fiz o teste em duas maquinas e rolou de boa, mas tem uma coisa, o comando Run, funciona da seguinte maneira.
    oShell.Run "COmando.exe", 1 = Visivel ou 0 = oculto, True = Aguarda comando.exe finaliza ou False = Não espera.
    sendo assim, para ir ao próximo video é necessário finalizar o media playe para que inicie o proximo video, não sei se era isso o que ocorria...
    Ele não apaga pois o arquivo esta em uso,Pensado dessa maneira, fiz uma alteração, onde crio um player list de maneira que executa todos os videos em um unico player, e depois deleta os videos.
    Lembrando que é necessário fechar o media player para apagar os videos.
    Ele esta em loop, então sempre irá verificar a pasta do TXT.  

    Const ForAppending= 8
    Set oShell = CreateObject("Wscript.Shell")
    Set oFSO = CreateObject("Scripting.FileSystemObject")
    
    sDiretorioTXT = "C:\temp\arquivos_txt"
    sDiretorioAVI = "C:\temp\videos\"
    sDiretorioBackup = "C:\temp\bkp\123.avi"
    sDiretorioHistory = "C:\temp\History\"
    sListVideo = sDiretorioAVI &  "videos.m3u"
    
    Set oFolderTXT = oFSO.GetFolder(sDiretorioTXT)
    Set sfilesTXT  = oFolderTXT.Files
    
    '*** Verifica se existe arquivo na pasta TXT, senão executa o video BKP
    If sfilesTXT.Count > 0 Then
    	ChecaPasta()
    Else
    	msgbox "Sem propaganda para executar no momento" & Chr(13) & "Executando propaganda programada",48,"Alerta Propaganda"
    	oShell.run sDiretorioBackup, 1, true
    	ChecaPasta()
    End If
    
    Sub ChecaPasta()
    	Do Until sFile=True
    		IF sfilesTXT.Count > 0 Then
    			wscript.echo "Entrei, total de arquivos: "& sfilesTXT.Count
    			ExecutaPropaganda()
    			WScript.Sleep(5000)
    		Else
    			wscript.echo "espere 5 sec e verifica a pasta novamente"
    			WScript.Sleep(5000)
    		End If
    	Loop
    End Sub
    
    Sub ExecutaPropaganda()
    	For i = 1 to sfilesTXT.Count
    		For each sTXT In sfilesTXT
    			'*** Verifica se os arquivos que existem na pasta são com extensão TXT
    			If oFSO.GetExtensionName(sTXT) = "txt" Then
    				'*** Se houver arquivos TXT, executa a rotina para rodar o video
    				If oFSO.FileExists(sDiretorioAVI & Replace(sTXT.Name,"txt","avi")) Then
    					video_name = sDiretorioAVI & Replace(sTXT.Name,"txt","avi")
    					If Not oFSO.FileExists(sListVideo) Then
    						Set oListVideo = oFSO.CreateTextFile(sListVideo)
    					Else
    						Set oListVideo = oFSO.OpenTextFile(sListVideo,ForAppending,True)
    					End If
    
    					oListVideo.WriteLine sDiretorioAVI & Replace(sTXT.Name,"txt","avi")
    					oListVideo.close
    					oFSO.CopyFile oFSO.GetAbsolutePathName(sTXT), sDiretorioHistory  ,true
    					oFSO.DeleteFile oFSO.GetAbsolutePathName(sTXT),true
    				End IF
    			End IF
    		Next
    	Next
    
    
    	If oFSO.FileExists(sListVideo) Then
    	on error resume next
    		oShell.Run "wmplayer """  & sListVideo & """ /fullscreen", 1, true
    		Set DelVideo = oFSO.OpenTextFile(sListVideo, 1)
    		Do Until DelVideo.AtEndOfStream
    			sVideo = DelVideo.Readline
    			oFSO.CopyFile sVideo, sDiretorioHistory,true
    			oFSO.DeleteFile sVideo,true
    		Loop
    		DelVideo.Close
    		oFSO.DeleteFile sListVideo,true
    	End If
    End Sub


    att, Aparecido Deveza

    • Sugerido como Resposta Aparecido Deveza segunda-feira, 20 de novembro de 2017 12:11
    quarta-feira, 18 de outubro de 2017 21:34
  • Aparecido Bom dia,

    Desculpa a demora de novo, estou um finalizando uma outra parte do projeto e não tive tempo de testar ainda.

    Irei testa-lo hoje de noite na aula e retorno com um feedback!!

    Obrigado!!

    terça-feira, 24 de outubro de 2017 13:34
  • Aparecido, Boa tarde!

    Desculpa novamente a demora de dar o feedback! O script funcionou perfeitamente!

    Ja o implementei no meu sistema!

    Muito obrigado!

    quarta-feira, 15 de novembro de 2017 15:09