none
Script que verifique simplesmente se uma pasta de rede tem ficheiros ou nao .. RRS feed

  • Pergunta

  • olá ,

    de forma a verificar se uns backups estao a correr bem ou nao .....gostava simplesmente de ter um script em batch  que depois adicionaria a um shedulle que verificasse simplesmente se uma determinada  pasta tem ou nao tem ficheiros no caso seriam .bak ...e se nao tiver me enviasse um email.

     a pasta onde eu queria que verificasse se está ou nao vazia  é uma pasta de rede ....algo tipo \\192.168.1.1\backups\

    Any help please ???




    quinta-feira, 20 de dezembro de 2012 15:47

Respostas

  • @echo off
    SET DIRECTORIO=\\192.168.1.1\backups
    
    NET USE B: %DIRECTORIO%
    
    echo.>%temp%\arquivos.txt
    forfiles /P B: /C "cmd /c echo Arquivo > %temp%\arquivos.txt"
    
    find /i "Arquivo" %temp%\arquivos.txt
    if not %errorlevel%==0 (echo envia e-mail) else (echo nao envia e-mail)
    
    NET USE B: /DELETE


    Fábio de Paula Junior

    sexta-feira, 21 de dezembro de 2012 11:38
    Moderador

Todas as Respostas

  • Francisco,

    Tente utilizar este PowerShell (.ps1)

    $Arquivos=Get-ChildItem "\\192.168.1.1\backups" | where {!$_.PsIsContainer} | Select-Object Name | Measure-Object
    
    if ($Arquivos.Count -eq 0){
    
        write-host "Envia E-mail"
    
    }

    Só falta vc colocar uma rotina de envio de e-mail, aqui no fórum vc encontra.

    Pesquisa: PowerShell e-mail

    http://social.technet.microsoft.com/Search/pt-BR/?query=Powershell%20e-mail&rq=meta:Search.MSForums.ForumID(e4fa6db6-7e9b-40e9-b8bd-143acb14c6d6)+site:microsoft.com&rn=F%C3%B3rum+Scripts+Administrativos


    Fábio de Paula Junior

    quinta-feira, 20 de dezembro de 2012 16:17
    Moderador
  • em batch please ......é possível ???

    é que nao posso correr powershells lá no servidor ...

    quinta-feira, 20 de dezembro de 2012 16:28
  • Com .BAT

    SET DIRECTORIO=\\192.168.1.1\backups
    
    echo.>%temp%\arquivos.txt
    forfiles /P "%DIRECTORIO%" /C "cmd /c echo Arquivo > %temp%\arquivos.txt"
    
    find /i "Arquivo" %temp%\arquivos.txt
    if not %errorlevel%==0 echo envia e-mail

    Quanto a mandar e-mail procure algum utilitário que envia e-mail via batch (exemplo: BLAT).

    Send Mail from Script 

    www.petri.co.il/send_mail_from_script.htm


    Fábio de Paula Junior



    • Editado Fábio JrModerator quinta-feira, 20 de dezembro de 2012 17:23 Alteração de Del para Echo
    quinta-feira, 20 de dezembro de 2012 17:18
    Moderador
  • olá  novamente :)

    Depois de estar na directoria SET DIRECTORIO=\\192.168.1.1\backups , ou seja no directorio que quero analisar .... o código para saber se o directorio tem ou nao ficheiros .bak ...é o que enviou a seguir ??

    "del "%temp%\arquivos.txt" forfiles /"%DIRECTORIO%" /"cmd /c echo Arquivo > %temp%\arquivos.txt"find /"Arquivo" %temp%\arquivos.txt"

    ????? tou a achar isso mt estranho ...nao se enganou ??   :)

    eu queria simplesmente saber se esse directorio têm ou nao ficheiros com a extensao . bak ---- já agora para ficar perfeito seria incluir no script a data do ultimo ficheiro que lá foi criado nessa directoria.

    quinta-feira, 20 de dezembro de 2012 17:34
  • É isso mesmo Francisco. Fiz uma pequena alteração (nada drástico). Vou explicar as linhas:

    :: Esvazio o arquivo de controle %temp%\arquivos.txt

    echo.>%temp%\arquivos.txt

    :: Utiliza o forfiles para ler os arquivos do diretorio, a cada arquivo ele grava a palavra Arquivo dentro de %temp%\arquivos.txt forfiles /P "%DIRECTORIO%" /C "cmd /c echo Arquivo > %temp%\arquivos.txt"

    :: Tenta localizar a palavar Arquivo dentro de %temp%\arquivos.txt find /i "Arquivo" %temp%\arquivos.txt

    :: Se não tiver a palavra arquivo dentro de %temp%\arquivos.txt então é porque o diretorio estava vazio entao manda o e-mail. if not %errorlevel%==0 echo envia e-mail


    Fábio de Paula Junior

    quinta-feira, 20 de dezembro de 2012 17:41
    Moderador
  • hhuummmmm.....já o executei mas o resultado nao está a ser o esperado .....ou seja ele cria o ficheiro arquivos.txt   mas nao coloca lá nada .....embora eu tenha 4 ficheiros na directoria que está a ser analisada .....daí ele depois retornar ...."envia email" .

    "SET DIRECTORIO=\\xxx.xxx.xxx.xxx\windows02\w01weeks\MSSQL\win2parsql0102\Default\PTBluestore

    :: Esvazio o arquivo de controle %temp%\arquivos.txt
    echo.>%temp%\arquivos.txt
    :: Utiliza o forfiles para ler os arquivos do diretorio, a cada arquivo ele grava a palavra Arquivo dentro de %temp%\arquivos.txt
    forfiles /P "%DIRECTORIO%" /C "cmd /c echo Arquivo > %temp%\arquivos.txt"
    :: Tenta localizar a palavar Arquivo dentro de %temp%\arquivos.txt
    find /i "Arquivo" %temp%\arquivos.txt
    :: Se não tiver a palavra arquivo dentro de %temp%\arquivos.txt então é porque o diretorio estava vazio entao manda o e-mail.
    if not %errorlevel%==0 echo envia e-mail

    "

    quinta-feira, 20 de dezembro de 2012 17:55
  • Pode enviar um DIR do seu diretório?

    Fábio de Paula Junior

    quinta-feira, 20 de dezembro de 2012 18:20
    Moderador
  • Desculpe Francisco,

    Não testei o script usando caminhos UNC (\\server\shares...), o FORFILES não funciona com caminho UNC

    Faça a seguinte modificação:

    SET DIRECTORIO=\\192.168.1.1\backups
    
    NET USE B: %DIRECTORIO%
    
    echo.>%temp%\arquivos.txt
    forfiles /P B: /C "cmd /c echo Arquivo > %temp%\arquivos.txt"
    
    find /i "Arquivo" %temp%\arquivos.txt
    if not %errorlevel%==0 echo envia e-mail
    
    NET USE B: /DELETE

    E lembre-se, o script ainda não envia e-mail, você tem que adaptar um dos utilitários que eu sugeri no lugar do echo envia e-mail


    Fábio de Paula Junior

    quinta-feira, 20 de dezembro de 2012 23:58
    Moderador
  • olá :)

    o script tal como referi anteriormente ..funciona ....o problema é que nao dá o resultado esperado ...ou seja a directoria que estou a analisar tem lá ficheiros ...pelo que nao deveria dar o output "envia e-mail"   ...mas dá :(

    O output ao executar foi este :

    E:\tools>echo.1>C:\Users\deadmin\AppData\Local\Temp\2\arquivos.txt


    E:\tools>forfiles /P B: /C "cmd /c echo Arquivo > C:\Users\deadmin\AppData\Loca
    \Temp\2\arquivos.txt"


    E:\tools>find /i "Arquivo" C:\Users\deadmin\AppData\Local\Temp\2\arquivos.txt

    ---------- C:\USERS\DEADMIN\APPDATA\LOCAL\TEMP\2\ARQUIVOS.TXT
    Arquivo

    E:\tools>if not 0 == 0 echo envia e-mail

    sexta-feira, 21 de dezembro de 2012 11:14
  • O script está funcionando corretamente.

    Se fosse para enviar o e-mail apareceria a mensagem "envia e-mail" sozinho na linha. Assim:

    if not 1 == 0 echo envia e-mail
    envia e-mail

    Coloque no inicio do script a linha abaixo:

    @echo off

    assim vc não vai se confundir com a saída do script.


    Fábio de Paula Junior

    sexta-feira, 21 de dezembro de 2012 11:35
    Moderador
  • @echo off
    SET DIRECTORIO=\\192.168.1.1\backups
    
    NET USE B: %DIRECTORIO%
    
    echo.>%temp%\arquivos.txt
    forfiles /P B: /C "cmd /c echo Arquivo > %temp%\arquivos.txt"
    
    find /i "Arquivo" %temp%\arquivos.txt
    if not %errorlevel%==0 (echo envia e-mail) else (echo nao envia e-mail)
    
    NET USE B: /DELETE


    Fábio de Paula Junior

    sexta-feira, 21 de dezembro de 2012 11:38
    Moderador