Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- @ECHO off
- TITLE SCRIPT BACKUP HD EXTERNO
- :: Elevando privilegio para executar o Robocopy
- setlocal EnableDelayedExpansion
- pushd "%~dp0"
- SET "PSW=%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\powershell.exe"
- if not "%1"=="am_admin" (%PSW% start -verb runas '%0' am_admin & exit /b)
- :USUARIO
- SETLOCAL
- SET "ID="
- TITLE SELECIONE A PASTA PARA REALIZAR O BACKUP
- CLS
- :: Interacao do USUARIO para selecionar a pasta de backup (PowerShell 2.0)
- set "psCommand="(new-object -COM 'Shell.Application')^.BrowseForFolder(0,'SELECIONE A PASTA:','^&H200','').Self.Path""
- for /f "usebackq delims=" %%I in (`%PSW% %psCommand%`) do set "ID=%%I"
- :: Checa se o valor informado e nulo, caso seja, solicita novamente. Caso nao, prossegue
- IF NOT DEFINED ID (GOTO USUARIO)
- IF NOT EXIST "%ID%" (GOTO USUARIO) ELSE (GOTO CONTINUE)
- :CONTINUE
- :: === Logica de Deteccao de Raiz e Definicao de Variaveis (Simples e Universal) ===
- :: O PowerShell verifica se o caminho e estritamente igual a sua raiz (eliminando a medicao de tamanho).
- 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"
- SET "ORIGEM=%ID%"
- IF "%ROOT_CHECK%"=="IS_ROOT" (
- :: 1. E Raiz do Drive: IDS e a letra (Ex: C, D, E)
- SET "IDS=%ID:~0,1%"
- :: Se for a raiz de QUALQUER drive, aciona o aviso de confirmacao.
- GOTO WARNING_ROOT_DRIVE
- ) ELSE (
- :: 2. E Subpasta: IDS e o nome da pasta, obtido via [System.IO.Path]::GetFileName()
- for /f "usebackq delims=" %%a in (`%PSW% -c "[System.IO.Path]::GetFileName('%ORIGEM%')"`) do SET "IDS=%%a"
- )
- GOTO CONTINUE_END
- :WARNING_ROOT_DRIVE
- :: Aviso de seguranca para backup completo de QUALQUER drive raiz (C:, D:, E:, etc.)
- CLS
- TITLE ATENCAO: Backup de todo o Drive [%ORIGEM%]
- ECHO =======================================================
- ECHO VOCE SELECIONOU A RAIZ DO DRIVE: [%ORIGEM%]
- ECHO O Backup sera criado na pasta: "%~d0\BACKUP\OK\%IDS%"
- ECHO
- ECHO ⚠️ Fazer backup de um drive inteiro pode ser MUITO lento
- ECHO e consumir todo o espaco disponivel. Confirme se e um drive de dados.
- ECHO =======================================================
- choice /c SN /T 10 /D N /m "Tem certeza que deseja **continuar** com o backup de todo o drive [%ORIGEM%]? (S/N)"
- IF %ERRORLEVEL% EQU 2 (
- ECHO Voltando para selecao de pasta...
- TIMEOUT 1
- GOTO USUARIO
- )
- :CONTINUE_END
- TITLE Fazendo Backup de ["%ID%"]
- IF "%NEO%"=="1" (GOTO BACKUP)
- :: Questiona o USUARIO se ele quer apagar bkps antigos ou nao e valida somente com S/N
- set "BASE_PATH=%~d0\BACKUP\OK\"
- IF NOT EXIST "%BASE_PATH%" md "%BASE_PATH%"
- :: Verifica se existe algum backup antigo (pasta) para perguntar
- set "CHK="
- for /F %%d in ('dir "%BASE_PATH%" /O-D /B /A:D 2^>nul') do set "CHK=%%d"
- IF NOT DEFINED CHK (GOTO BACKUP)
- choice /c SN /T 10 /D N /m "Deseja Deletar bkps antigos da pasta %~d0\BACKUP\OK do hd externo?"
- IF %ERRORLEVEL% EQU 1 (forfiles /P "%~d0\BACKUP\OK" /M * /C "cmd /c if @isdir==TRUE rmdir /S /Q @file" & GOTO BACKUP)
- IF %ERRORLEVEL% EQU 2 (GOTO BACKUP)
- :BACKUP
- IF NOT EXIST "%~d0\BACKUP\OK\" md "%~d0\BACKUP\OK\"
- SET "DESTINO=%~d0\BACKUP\OK\%IDS%"
- SET "LOGBKP=%~d0\backup\OK\copia.log"
- TITLE Fazendo Backup de ["%ORIGEM%"] para ["%DESTINO%"]
- ECHO Backup Sendo Efetuado para "%DESTINO%" Aguarde...
- :: =====================================================================
- :: ROBOCOPY - MANTENDO SEUS PARAMETROS ORIGINAIS CONFORME SOLICITADO
- :: =====================================================================
- ::sem pasta vazia
- ::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%"
- ::com pasta vazia
- 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%"
- :: =====================================================================
- 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
- 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
- IF EXIST "%~d0\BACKUP\OK\%IDS%\AppData\" attrib +h +s "%~d0\BACKUP\OK\%IDS%\AppData" /S /D> nul
- CLS
- :ESCOLHA
- choice /c SN /T 10 /D N /m "Deseja Realizar um novo Backup?"
- IF %ERRORLEVEL% EQU 1 (CLS & SET "NEO=1" & GOTO USUARIO)
- IF %ERRORLEVEL% EQU 2 (ECHO. & ECHO Backup Concluido... & ECHO. &ECHO #Backup %DESTINO% &ECHO #Log %LOGBKP% & EXPLORER %DESTINO% & TIMEOUT 3 & GOTO END)
- :END
- ENDLOCAL & POPD & EXIT
Add Comment
Please, Sign In to add comment