Массивы в пакетном скрипте - PullRequest
0 голосов
/ 15 февраля 2019

Все,

Я пытаюсь сделать разностное резервное копирование с помощью svnadmin dump --incremental commmand.Моя идея настолько проста: прочитать несколько репозиториев SVN с помощью команды dir и поместить в текстовый файл с именем «input», читать его построчно и помещать в переменные.
Получить последнюю ревизию репозиториев с помощьюполный сценарий резервного копирования и запись в текстовый файл с именем «output» и помещение в переменные.
Все сделано, но я не могу использовать дамп svnadmin, потому что мне нужны переменные (массивы) внутри циклов.Как мне это сделать?Пожалуйста, помогите мне, я пробовал так много раз и до сих пор не работает):

@echo off
cls
:: =================== CONFIG ============================================
:: Path of the dir containing your repos [Note Trailing slash]
SET repodir=E:\svn\repositorios

:: Path of the dir in which to create you dumps [Note Trailing slash]
SET repodump=E:\Backup\SVN

:: File to read (multiple directories)
SET "File2ReadInput=E:\Backup\SVN\input.txt"
SET "File2ReadOutput=E:\Backup\SVN\output.txt
SET "File2ReadOutputNew=E:\Backup\SVN\New\output_new.txt



:: =================== CONFIG ============================================
:: =================== SCRIPT ============================================

rem deleting old file output.txt
del E:\Backup\SVN\output.txt

rem deleting old file output_new.txt
del E:\Backup\SVN\New\output_new.txt

rem creating new file output.txt
for /f "delims=" %%f in ("E:\Backup\SVN\*.data") do type %%f >> E:\Backup\SVN\output.txt


rem creating input file
dir %repodir% /ad /b > E:\Backup\SVN\input.txt 

rem reading input file
setlocal EnableExtensions EnableDelayedExpansion
for /f "delims=" %%a in ('Type "%File2ReadInput%"') do (
    set /a count+=1
    set "Line[!count!]=%%a"
)

For /L %%i in (1,1,%Count%) do (
    echo "Var%%i" is assigned to ==^> "!Line[%%i]!"
    echo E:\svn\repositorios\!Line[%%i]!
    set REPO_NAME=!Line[%%i]!


:: getting new transactions to compare
    for /F "delims=" %%g in ('svnlook youngest E:\svn\repositorios\!Line[%%i]!') do ( 
        echo %%~g 

    ) > E:\Backup\SVN\New\last_rev_!Line[%%i]!_new.data

)

:: creating a new file with new datas
for /f "delims=" %%h in ("E:\Backup\SVN\New\*.data") do type %%h >> E:\Backup\SVN\New\output_new.txt

rem reading output file (dento do segundo for porque eu preciso do !Line[%%i]!)

setlocal EnableExtensions EnableDelayedExpansion
for /f "delims=" %%b in ('Type "%File2ReadOutput%"') do (
    set /a out_count+=1
    set "Output[!out_count!]=%%b"

)



for /L %%n in (1,1,%out_count%) DO ( 
    echo "Var%%n" is assigned to ==^> "!Output[%%n]:~0,-1!"
    set PREVIOUS=!Output[%%n]!
)   

for /F "delims=" %%u in ('svnadmin dump -r!Output[%%n]:~0,-1!:HEAD E:\svn\repositorios\!Line[%%i]! --incremental') do ( 
        echo %%~u 
)> > E:\Backup\SVN\svn_backup_diff_!Line[%%i]!.dmp

1 Ответ

0 голосов
/ 15 февраля 2019

Не просматривая полностью весь код IMO, строки 47..50 имеют неправильную настройку скобок, попробуйте изменить на:

(for /F "delims=" %%g in ('svnlook youngest E:\svn\repositorios\!Line[%%i]!') do echo %%~g  
) > E:\Backup\SVN\New\last_rev_!Line[%%i]!_new.data

Редактор, такой как Notepad ++, помогает находить / визуализировать соответствующие пары скобок.

...