none
Como posso enviar dois parâmetros para para um VBS, ao chama-lo através de um .BAT? RRS feed

  • Pergunta

  • Tenho um script que é chamado através de um .BAT que faz a exclusão de arquivos com base em suas datas de modificações, ele exclui todos os arquivos que tem data de modificação anteriores a 30 dias. O comando que utilizo para chama-los é o seguinte:

    C:\DelOldFiles_30dias\Deletar30DiasModificacao.vbs "H:\Audios FM - Archive"

    onde H:\Audios FM - Archive é o caminho da pasta onde contem os arquivos a serem apagados e suas subpastas eu gostaria de passar mais um parâmetro para tornar este script mais dinamico e atender algumas necessidades da empresa passando também o número de dias ao chamar o .VBS pelo .BAT. O comando seria o seguinte no .BAT:

    Por exemplo:

    C:\DelOldFiles_30dias\Deletar30DiasModificacao.vbs "H:\Audios FM - Archive" 30

    Só não sei como recebo o número de dias no Script a seguir.

    -----------------------------------------------------------------------------------------------------------------

    Set oArgs = Wscript.Arguments
    set FSo = CreateObject("Scripting.FileSystemObject")
    Set strPasta = FSo.GetFolder(oArgs(0))
    Set strDias = FSo.GetFolder(oArgs(1))
    
    Apagar_Arquivos(strPasta, strDias)
    
    Sub Apagar_Arquivos(Pasta, Dias)
    
     set folder = FSO.getFolder (Pasta)
     set ndias = FSO.getFolder (Dias)
    
     on error resume next
    
     'Verifica se tem subpastas
     if folder.Subfolders.count > 0 then
      for each SubFolder in folder.Subfolders
       Apagar_Arquivos SubFolder
      next
     end if
    
     for each file in folder.files 
    '30 é o número de dias que deve ser recebido por parametro e subistituido pelo vamor de ndias
      if (dateDiff("d", file.DateLastModified, now) > 30) then
       File.delete
      end if
     next
    
     if folder.Subfolders.count = 0 and folder.files.count=0 and Folder.Path<>strPasta then
      Folder.delete true
     end if
    
    end sub


    -----------------------------------------------------------------------------------------------------------------

    Desde já agradeço pela ajuda.


    • Editado Fábio JrModerator segunda-feira, 12 de agosto de 2013 17:44 formatação do código
    segunda-feira, 12 de agosto de 2013 17:02

Respostas

  • Acho que assim funciona, teve várias alterações, se tiver dúvida é só perguntar

    Set oArgs = Wscript.Arguments
    set FSo = CreateObject("Scripting.FileSystemObject")
    
    strPasta = oArgs(0)
    strDias = oArgs(1)
    
    Apagar_Arquivos strPasta, strDias
    
    Sub Apagar_Arquivos(Pasta, Dias)
    
    	set folder = FSO.getFolder (Pasta)
    	
    	on error resume next
    
    	'Verifica se tem subpastas
    	if folder.Subfolders.count > 0 then
    		for each SubFolder in folder.Subfolders
    			Apagar_Arquivos SubFolder, Dias
    		next
    	end if
    
    	for each file in folder.files 
    		'30 é o número de dias que deve ser recebido por parametro e subistituido pelo vamor de ndias
    		if cint(dateDiff("d", file.DateLastModified, now)) > cint(Dias) then
    			wscript.echo "entrou"
    			File.delete
    		end if
    	next
    
    	if folder.Subfolders.count = 0 and folder.files.count=0 and Folder.Path<>strPasta then
    		Folder.delete true
    	end if
    
    end sub


    Fábio de Paula Junior

    segunda-feira, 12 de agosto de 2013 21:29
    Moderador

Todas as Respostas

  • Lucas,

    Vc precisa receber o parametro e utilizá-lo, metade do trabalho você já fez com a linha:

    Set strDias = FSo.GetFolder(oArgs(1))

    até aqui strDias vai ter o valor do segundo parâmetro.

    Agora precisa usar, altere esta linha:

    if (dateDiff("d", file.DateLastModified, now) > 30) then

    por esta

    if (dateDiff("d", file.DateLastModified, now) > strDias) then

    Teste aí e informe se funcionou, eu não testei.


    Fábio de Paula Junior

    segunda-feira, 12 de agosto de 2013 17:49
    Moderador
  • Valeu Fábio, mas esta dando erro na linha 6 diz que não é possível usar parenteses para chamar uma sub.
    segunda-feira, 12 de agosto de 2013 18:03
  • Lucas,

    O script antes das modificações que pedi, funcionava?????

    Tirou os parenteses?????


    Fábio de Paula Junior

    segunda-feira, 12 de agosto de 2013 21:17
    Moderador
  • Acho que assim funciona, teve várias alterações, se tiver dúvida é só perguntar

    Set oArgs = Wscript.Arguments
    set FSo = CreateObject("Scripting.FileSystemObject")
    
    strPasta = oArgs(0)
    strDias = oArgs(1)
    
    Apagar_Arquivos strPasta, strDias
    
    Sub Apagar_Arquivos(Pasta, Dias)
    
    	set folder = FSO.getFolder (Pasta)
    	
    	on error resume next
    
    	'Verifica se tem subpastas
    	if folder.Subfolders.count > 0 then
    		for each SubFolder in folder.Subfolders
    			Apagar_Arquivos SubFolder, Dias
    		next
    	end if
    
    	for each file in folder.files 
    		'30 é o número de dias que deve ser recebido por parametro e subistituido pelo vamor de ndias
    		if cint(dateDiff("d", file.DateLastModified, now)) > cint(Dias) then
    			wscript.echo "entrou"
    			File.delete
    		end if
    	next
    
    	if folder.Subfolders.count = 0 and folder.files.count=0 and Folder.Path<>strPasta then
    		Folder.delete true
    	end if
    
    end sub


    Fábio de Paula Junior

    segunda-feira, 12 de agosto de 2013 21:29
    Moderador