Пакетное получение неизвестного количества переменных из INI-файла для копирования - PullRequest
0 голосов
/ 27 февраля 2019

У меня есть 3 файла:

  1. текстовый файл
  2. INI-файл
  3. командный файл

Это INI-файл:

[ABC]
COPYALL=YES
FILEFILTER1=ABS
FILEFILTER2=DEF
FILEFILTER3=SEFS
FILEFILTER4=CXC
FILEFILTER5=VFV
FILEFILTER6=WRE
FOLDERNAME1=123
FOLDERNAME2=321

[PDF]
COPYALL=NO
FILEFILTER1=GRE
FILEFILTER2=GA
FILEFILTER3=GC
FILEFILTER4=VF
FILEFILTER5=BFA
FILEFILTER6=FEW
FILEFILTER7=QWE
FOLDERNAME1=WDQ
FOLDERNAME2=ZXC

Текстовый файл содержит:

ID=ABC

Таким образом, пакетный файл будет знать, какой раздел нужно искать в .ini-файле:

@ECHO OFF
SETLOCAL
SET INIFile="configproto - Copy (2).ini"
SET "FLAG="

for /f "tokens=1*delims=:" %%G in ('findstr /n "^" POS_User.txt') do if %%G equ 2 (
    echo %%H
    set "posuser=%%H"
)
set posuser=%posuser:~13%
echo This is company ID %posuser%

:_AFTER
for /f "usebackq tokens=1,*eol=|delims==" %%a in (%INIFile%) do (
    IF "%%b"=="" (
        REM No "=" so section
        IF /i "%%a"=="[%posuser%]" (SET flag=Y) ELSE (SET "flag=")
    ) ELSE IF defined flag (
        REM data line - only if FLAG is defined
        REM set values defined
        SET "%%a=%%b"
        REM pick particular values
        if /i "%%a"=="COPYALL" set "COPYALL=%%b"
        if /i "%%a"=="FILEFILTER1" set "FILEFILTER1=%%b"
        if /i "%%a"=="FILEFILTER2" set "FILEFILTER2=%%b"
        if /i "%%a"=="FILEFILTER3" set "FILEFILTER3=%%b"
        if /i "%%a"=="FILEFILTER4" set "FILEFILTER4=%%b"
        if /i "%%a"=="FILEFILTER5" set "FILEFILTER5=%%b"
        if /i "%%a"=="FILEFILTER6" set "FILEFILTER6=%%b"
    )
)

echo %posuser%
goto :_COPYALL

::COPY ALL FOLDERS AND FILES EXCLUDE CERTAIN FILES

:_COPYALL
echo %FILEFILTER1%>test.txt
echo %FILEFILTER2%>>test.txt
echo %FILEFILTER3%>>test.txt
echo %FILEFILTER4%>>test.txt
echo %FILEFILTER5%>>test.txt
echo %FILEFILTER6%>>test.txt
if "%COPYALL%" EQU "YES" (
    if not exist C:\Users\GINNY\Desktop\experimentfolder\pic (
        mkdir C:\Users\GINNY\Desktop\experimentfolder\pic
    )
    del C:\Users\GINNY\Desktop\experimentfolder\pic\*.* /Q /F
    xcopy C:\Users\GINNY\Desktop\AllOutlets C:\Users\GINNY\Desktop\experimentfolder /exclude:test.txt /Y /S
    del C:\Users\GINNY\Desktop\AllOutlets /Q /F
    del test.txt /Q /F
) else ( 
    echo NO COPY ALL
)
exit /b

Как видите, текущий код может занять только 6 фильтров.Но если другой раздел имеет 7 фильтров, он не займет 7-й.Как мне кодировать, чтобы пакетный файл получал Х-количество фильтров, чтобы пользователи могли просто фильтровать, сколько файлов они хотят?Использование Windows 7, если это поможет.

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