Rick0

#1_FAZER_BKP_HD

Oct 4th, 2019 (edited)
650
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Batch 5.19 KB | None | 0 0
  1. @ECHO off
  2. TITLE SCRIPT BACKUP HD EXTERNO
  3. :: Elevando privilegio para executar o Robocopy
  4. setlocal EnableDelayedExpansion
  5. pushd "%~dp0"
  6. SET "PSW=%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\powershell.exe"
  7. if not "%1"=="am_admin" (%PSW% start -verb runas '%0' am_admin & exit /b)
  8.  
  9. :USUARIO
  10. SETLOCAL
  11. SET "ID="
  12. TITLE SELECIONE A PASTA PARA REALIZAR O BACKUP
  13. CLS
  14. :: Interacao do USUARIO para selecionar a pasta de backup (PowerShell 2.0)
  15. set "psCommand="(new-object -COM 'Shell.Application')^.BrowseForFolder(0,'SELECIONE A PASTA:','^&H200','').Self.Path""
  16. for /f "usebackq delims=" %%I in (`%PSW% %psCommand%`) do set "ID=%%I"
  17. :: Checa se o valor informado e nulo, caso seja, solicita novamente. Caso nao, prossegue
  18. IF NOT DEFINED ID (GOTO USUARIO)
  19. IF NOT EXIST "%ID%" (GOTO USUARIO) ELSE (GOTO CONTINUE)
  20.  
  21. :CONTINUE
  22. :: === Logica de Deteccao de Raiz e Definicao de Variaveis (Simples e Universal) ===
  23. :: O PowerShell verifica se o caminho e estritamente igual a sua raiz (eliminando a medicao de tamanho).
  24. for /f "usebackq delims=" %%a in (`%PSW% -c "$Root = [System.IO.Path]::GetPathRoot('%ID%'); if ('%ID%' -eq $Root) { Write-Host 'IS_ROOT'} else { Write-Host 'NOT_ROOT'}"`) do set "ROOT_CHECK=%%a"
  25.  
  26. SET "ORIGEM=%ID%"
  27.  
  28. IF "%ROOT_CHECK%"=="IS_ROOT" (
  29.    :: 1. E Raiz do Drive: IDS e a letra (Ex: C, D, E)
  30.     SET "IDS=%ID:~0,1%"
  31.    
  32.     :: Se for a raiz de QUALQUER drive, aciona o aviso de confirmacao.
  33.     GOTO WARNING_ROOT_DRIVE
  34.    
  35. ) ELSE (
  36.    :: 2. E Subpasta: IDS e o nome da pasta, obtido via [System.IO.Path]::GetFileName()
  37.     for /f "usebackq delims=" %%a in (`%PSW% -c "[System.IO.Path]::GetFileName('%ORIGEM%')"`) do SET "IDS=%%a"
  38. )
  39. GOTO CONTINUE_END
  40.  
  41. :WARNING_ROOT_DRIVE
  42.    :: Aviso de seguranca para backup completo de QUALQUER drive raiz (C:, D:, E:, etc.)
  43.     CLS
  44.     TITLE ATENCAO: Backup de todo o Drive [%ORIGEM%]
  45.     ECHO =======================================================
  46.     ECHO VOCE SELECIONOU A RAIZ DO DRIVE: [%ORIGEM%]
  47.     ECHO O Backup sera criado na pasta: "%~d0\BACKUP\OK\%IDS%"
  48.     ECHO
  49.     ECHO ⚠️ Fazer backup de um drive inteiro pode ser MUITO lento
  50.     ECHO e consumir todo o espaco disponivel. Confirme se e um drive de dados.
  51.     ECHO =======================================================
  52.    
  53.     choice /c SN /T 10 /D N /m "Tem certeza que deseja **continuar** com o backup de todo o drive [%ORIGEM%]? (S/N)"
  54.    
  55.     IF %ERRORLEVEL% EQU 2 (
  56.         ECHO Voltando para selecao de pasta...
  57.         TIMEOUT 1
  58.         GOTO USUARIO
  59.     )
  60.  
  61. :CONTINUE_END
  62. TITLE Fazendo Backup de ["%ID%"]
  63. IF "%NEO%"=="1" (GOTO BACKUP)
  64.  
  65. :: Questiona o USUARIO se ele quer apagar bkps antigos ou nao e valida somente com S/N
  66. set "BASE_PATH=%~d0\BACKUP\OK\"
  67. IF NOT EXIST "%BASE_PATH%" md "%BASE_PATH%"
  68.  
  69. :: Verifica se existe algum backup antigo (pasta) para perguntar
  70. set "CHK="
  71. for /F %%d in ('dir "%BASE_PATH%" /O-D /B /A:D 2^>nul') do set "CHK=%%d"
  72.  
  73. IF NOT DEFINED CHK (GOTO BACKUP)
  74.  
  75. choice /c SN /T 10 /D N /m "Deseja Deletar bkps antigos da pasta %~d0\BACKUP\OK do hd externo?"
  76. IF %ERRORLEVEL% EQU 1 (forfiles /P "%~d0\BACKUP\OK" /M * /C "cmd /c if @isdir==TRUE rmdir /S /Q @file" & GOTO BACKUP)
  77. IF %ERRORLEVEL% EQU 2 (GOTO BACKUP)
  78.  
  79. :BACKUP
  80. IF NOT EXIST "%~d0\BACKUP\OK\" md "%~d0\BACKUP\OK\"
  81. SET "DESTINO=%~d0\BACKUP\OK\%IDS%"
  82. SET "LOGBKP=%~d0\backup\OK\copia.log"
  83. TITLE Fazendo Backup de ["%ORIGEM%"] para ["%DESTINO%"]
  84. ECHO Backup Sendo Efetuado para "%DESTINO%" Aguarde...
  85.  
  86. :: =====================================================================
  87. :: ROBOCOPY - MANTENDO SEUS PARAMETROS ORIGINAIS CONFORME SOLICITADO
  88. :: =====================================================================
  89. ::sem pasta vazia
  90. ::Robocopy "%ORIGEM%" "%DESTINO%" /S /ZB /DCOPY:T /FFT /DST /XA:SH /XJD /XJF /R:3 /XF "*.tmp *.tib" /XD "All Users" "DefaultAppPool" "Public" "administrator" "default" "Links" "WFMData" ".swt" "AppData" "Contacts" "Searches" /NP /TEE /FP /NJH /XX /LOG+:"%LOGBKP%"
  91. ::com pasta vazia
  92. Robocopy "%ORIGEM%" "%DESTINO%" /E /ZB /DCOPY:T /FFT /DST /XA:SH /XJD /XJF /R:3 /XF *.tmp *.tib /XD "All Users" "DefaultAppPool" "Public" "administrator" "default" "Links" "WFMData" ".swt" "AppData" "Contacts" "Searches" /NP /TEE /FP /NJH /XX /LOG+:"%LOGBKP%"
  93. :: =====================================================================
  94.  
  95. IF EXIST "%ID%\AppData\Roaming\Microsoft\Sticky Notes\*.snt" ECHO f|xcopy /R /S /H /D /V /Y /O /F "%ID%\AppData\Roaming\Microsoft\Sticky Notes\*.snt" "%DESTINO%\AppData\Roaming\Microsoft\Sticky Notes\*.snt"> nul
  96. IF EXIST "%ID%\AppData\Local\Packages\Microsoft.MicrosoftStickyNotes_8wekyb3d8bbwe\LocalState\plum.sqlite" ECHO f|xcopy /R /S /H /D /V /Y /O /F "%ID%\AppData\Local\Packages\Microsoft.MicrosoftStickyNotes_8wekyb3d8bbwe\LocalState\*.*" "%DESTINO%\AppData\Local\Packages\Microsoft.MicrosoftStickyNotes_8wekyb3d8bbwe\LocalState\*.*"> nul
  97. IF EXIST "%~d0\BACKUP\OK\%IDS%\AppData\" attrib +h +s "%~d0\BACKUP\OK\%IDS%\AppData" /S /D> nul
  98. CLS
  99.  
  100. :ESCOLHA
  101. choice /c SN /T 10 /D N /m "Deseja Realizar um novo Backup?"
  102. IF %ERRORLEVEL% EQU 1 (CLS & SET "NEO=1" & GOTO USUARIO)
  103. IF %ERRORLEVEL% EQU 2 (ECHO. & ECHO Backup Concluido... & ECHO. &ECHO #Backup %DESTINO% &ECHO #Log %LOGBKP% & EXPLORER %DESTINO% & TIMEOUT 3 & GOTO END)
  104. :END
  105. ENDLOCAL & POPD & EXIT
Add Comment
Please, Sign In to add comment