Usuário com melhor resposta
Script que verifique simplesmente se uma pasta de rede tem ficheiros ou nao ..

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 ???
- Editado Francisco Ascençao quinta-feira, 20 de dezembro de 2012 16:57
- Editado Fábio JrModerator sexta-feira, 21 de dezembro de 2012 11:40 Título
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
- Marcado como Resposta Francisco Ascençao sexta-feira, 21 de dezembro de 2012 17:47
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
Fábio de Paula Junior
-
-
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
-
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 /P "%DIRECTORIO%" /C "cmd /c echo Arquivo > %temp%\arquivos.txt"find /i "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.
-
É 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
-
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"
-
-
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
-
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
-
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
-
@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
- Marcado como Resposta Francisco Ascençao sexta-feira, 21 de dezembro de 2012 17:47