Как: получить пакетный скрипт для регистрации нескольких робокопий - PullRequest
0 голосов
/ 13 июня 2018

За всю свою жизнь я не могу понять, как получить какую-либо форму вывода для входа в файл журнала из моего сценария.Я попытался войти ROBOCOPY с помощью "/ log +:".Я не мог получить какой-либо вывод для журнала таким образом.Так что теперь я подумал, что смогу использовать редирект «>» или «>>».Это также не работает для меня, и я еще не нашел решение, которое работает для меня.Любая помощь приветствуется.

@Echo OFF
setlocal EnableExtensions EnableDelayedExpansion
REM Backup Script from Windows 7 to Windows 10
REM Made By Adam Avila
REM Date: 6/7/2018
Set Destination="C:\Users\%Username%\BackupS2018"
Set LogFile="%Destination%\Log"

REM This part of the script sets the variables
Set Desktop=C:\Users\%Username%\Desktop\
Set Favorites=C:\Users\%Username%\Favorites\
Set ChromeBookmarks="C:\Users\%Username%\AppData\Local\Google\Chrome\User Data\Default"
Set FirefoxPath=C:\Users\%Username%\AppData\Roaming\Mozilla\Firefox\profiles\
Set UProof=C:\Users\%Username%\AppData\Roaming\Microsoft\Uproof\
Set Templates=C:\Users\%Username%\AppData\Roaming\Microsoft\Templates\
Set SSH=C:\Users\%Username%\AppData\Roaming\SSH\
Set Skype=C:\Users\%Username%\AppData\Roaming\Skype\
Set FileZilla=C:\Users\%Username%\AppData\Roaming\FileZilla\
Set Box=C:\Users\%Username%\AppData\Roaming\Box\
Set Snagit=C:\Users\%Username%\AppData\Local\TechSmith\SnagIt\
Set Cisco=C:\Users\%Username%\AppData\Local\Cisco\
Set StickyNotes="C:\Users\%Username%\AppData\Roaming\Microsoft\Sticky Notes"
Set NewStickyNotes=C:\Users\%Username%\AppData\Local\Packages\Microsoft.MicrosoftStickyNotes_8wekyb3d8bbwe\LocalState\Legacy\

REM This part of the script restores data.
If Exist %Destination% (
If Exist %Destination%\Desktop (ROBOCOPY %Destination%\Desktop %Desktop% /S)
If Exist %Destination%\Favorites (ROBOCOPY %Destination%\Favorites %Favorites% /S)
If Exist %Destination%\ChromeBookmarks (ROBOCOPY %Destination%\ChromeBookmarks %ChromeBookmarks% /S)
If Exist %Destination%\UProof (ROBOCOPY %Destination%\UProof %UProof% /S)
If Exist %Destination%\Templates (ROBOCOPY %Destination%\Templates %Templates% /S)
If Exist %Destination%\SSH (ROBOCOPY %Destination%\SSH %SSH% /S)
If Exist %Destination%\Skype (ROBOCOPY %Destination%\Skype %Skype% /S)
If Exist %Destination%\FileZilla (ROBOCOPY %Destination%\FileZilla %FileZilla% /S)
If Exist %Destination%\Cisco (ROBOCOPY %Destination%\Cisco %Cisco% /S)
If Exist %Destination%\Box (ROBOCOPY %Destination%\Box %Box% /S)
If Exist %Destination%\Snagit (ROBOCOPY %Destination%\Snagit %Snagit% /S)
If Exist %Destination%\StickyNotes (
taskkill /im Microsoft.Notes.exe /t /f
ROBOCOPY %Destination%\StickyNotes %NewStickyNotes% StickyNotes.snt /S)
Rename %NewStickyNotes%\StickyNotes.snt ThresholdNotes.snt
)

) > "%LogFile%\RestoreLog.txt" Else (

REM This part of the script backups data.
If Exist %Desktop% (ROBOCOPY %Desktop% %Destination%\Desktop /S)
If Exist %Favorites% (ROBOCOPY %Favorites% %Destination%\Favorites /S)
If Exist %ChromeBookmarks%\Bookmarks (ROBOCOPY %ChromeBookmarks% %Destination%\ChromeBookmarks Bookmarks /S)
If Exist %UProof% (ROBOCOPY %UProof% %Destination%\UProof /S)
If Exist %Templates% (ROBOCOPY %Templates% %Destination%\Templates /S)
If Exist %SSH% (ROBOCOPY %SSH% %Destination%\SSH /S)
If Exist %Skype% (ROBOCOPY %Skype% %Destination%\Skype /S)
If Exist %FileZilla% (ROBOCOPY %FileZilla% %Destination%\FileZilla /S)
If Exist %Box% (ROBOCOPY %Box% %Destination%\Box /S)
If Exist %Snagit% (ROBOCOPY %Snagit% %Destination%\Snagit /S)
If Exist %Cisco% (ROBOCOPY %Cisco% %Destination%\Cisco /S)
If Exist %StickyNotes% (ROBOCOPY %StickyNotes% %Destination%\StickyNotes /S)
If Exist %FirefoxPath% (for /F %%I in ('dir "%FirefoxPath%\!FileToFind!" /A-D /B /S 2^>nul') do (
set "FoundIt=%%~dpI"
goto FileFound
)
:FileFound
ROBOCOPY %FoundIt% %Destination%\FirefoxBookmarks places.sqlite /S
)
) > "%LogFile%\BackupLog.txt"
pause

1 Ответ

0 голосов
/ 13 июня 2018
@echo off
setlocal enableextensions enabledelayedexpansion
REM Backup Script from Windows 7 to Windows 10
REM Made By Adam Avila
REM Date: 6/7/2018
Set "Destination=%UserProfile%\BackupS2018"
Set "LogDir=%Destination%\Log"

REM Determine function and set logfile path.
If exist "%Destination%" (
    set "function=restore"
    set "LogFile=%LogDir%\RestoreLog.txt%"
) else (
    set "function=backup"
    set "LogFile=%LogDir%\BackupLog.txt"
)

if not exist "%LogDir%" md "%LogDir%"

REM Each argument of "name|target" is split at the pipe to make 2 arguments.
for %%A in (
 "Desktop|%UserProfile%\Desktop"
 "Favorites|%UserProfile%\Favorites"
 "ChromeBookmarks|%LocalAppData%\Google\Chrome\User Data\Default"
 "FirefoxPath|%AppData%\Mozilla\Firefox\profiles"
 "UProof|%AppData%\Microsoft\Uproof"
 "Templates|%AppData%\Microsoft\Templates"
 "SSH|%AppData%\SSH"
 "Skype|%AppData%\Skype"
 "FileZilla|%AppData%\FileZilla"
 "Box|%AppData%\Box"
 "Snagit|%LocalAppData%\TechSmith\SnagIt"
 "Cisco|%LocalAppData%\Cisco"
 "StickyNotes|%AppData%\Microsoft\Sticky Notes"
) do for /f "tokens=1,2 delims=|" %%B in ("%%~A") do call :%function% "%%~B" "%%~C"

REM Remove any possible empty folders so rerun chooses correct function.
for %%A in (
 "%LogDir%"
 "%Destination%"
) do if exist "%%~A" rd "%%~A" 2>nul

exit /b


:restore
setlocal
set "name=%~1"
set "target=%~2"

if "%name%" == "StickyNotes" (
    2>nul taskkill /im Microsoft.Notes.exe /t /f
    set "NewStickyNotes=%LocalAppData%\Packages\Microsoft.MicrosoftStickyNotes_8wekyb3d8bbwe\LocalState\Legacy"
    robocopy "%Destination%\%name%" "!NewStickyNotes!" StickyNotes.snt /S /np /log+:"%LogFile%"
    if exist "%NewStickyNotes%\StickyNotes.snt" (
        rename "%NewStickyNotes%\StickyNotes.snt" ThresholdNotes.snt
    )
    exit /b 0
)

robocopy "%Destination%\%name%" "%target%" /S /log+:"%LogFile%"
exit /b 0


:backup
setlocal
set "name=%~1"
set "target=%~2"

if not exist "%target%" exit /b 0

if "%name%" == "ChromeBookmarks" (
    if not exist "%target%\Bookmarks" exit /b 0
    robocopy "%target%" "%Destination%\%name%" Bookmarks /S /np /log+:"%LogFile%"
    exit /b 0
)

if "%name%" == "FirefoxPath" (
    set "FileToFind=*"

    for /f %%I in ('dir "%target%\!FileToFind!" /A-D /B /S 2^>nul') do (
        set "firefox_profile=%%~dpI"
        if "!firefox_profile:~-1!" == "\" set "firefox_profile=!firefox_profile:~,-1!"

        robocopy "!firefox_profile!" "%Destination%\FirefoxBookmarks" places.sqlite /S /np /log+:"%LogFile%"
        exit /b 0
    )
    exit /b 0
)

robocopy "%target%" "%Destination%\%name%" /S /np /log+:"%LogFile%"
exit /b 0

Вы использовали хороший шаблон с именами, поэтому я создал этот код, чтобы минимизировать дублирование имен и т. Д.

В начальном цикле for используется шаблон name|target, который разделяется на | на 2 аргумента и передается call.То, какой ярлык вызывается, зависит от того, существует ли место назначения.

robocopy использует аргумент логирования добавления и аргумент отсутствия прогресса.robocopy аргументы могут экранировать двойные кавычки с обратной косой чертой, т.е. \" - это литерал ".Таким образом, я избегал использования пути с обратной косой чертой.

Не уверен, что значение FileToFind не определено, поэтому я установил его на *.Цикл for получает первую папку профиля и запускает на ней robocopy.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...