Я пишу файл bactch в первый раз, и у меня есть проблема, которую я еще не смог решить. (Я не программист, а просто инженер-механик, поэтому, пожалуйста, простите меня за мою неуклюжесть .. И мой английский: я не носитель языка ...)Пакетное программирование: чтение txt и сохранение переменных с помощью подпрограммы
Я хочу написать командный файл (readlist.bat), который среди прочего следует читать в txt-файле (Text.txt). Затем этот пакетный файл должен быть вызван в другом пакетном файле с номером «call readlist.bat». Для меня ясно следующее: мне нужно определить переменные в readlist.bat не только локально, если я хочу, чтобы они сохранялись после readlist.bat заканчивается. Я попытался реализовать это в прикрепленных файлах, по крайней мере, для некоторых переменных. (Конечно, конечная цель - сохранить все переменные, считываемые из txt-файла.) Но я не могу это сделать.
text.txt содержит только «тестовые переменные» readlist.btat должны прочитать во всех строках в столбцах (это работает). Но переменные должны быть определены «не локально». Поэтому по причинам тестирования я добавил следующие команды:
endlocal
set "job1fld=%job1fld%"
set "job1dat=%job1dat%"
set "job1kyw=%job1kyw%"
set "job2fld=%job2fld%"
set "job2dat=%job2dat%"
set "job2kyw=%job2kyw%"
set "job3fld=%job3fld%"
set "job3dat=%job3dat%"
set "job3kyw=%job3kyw%"
set vartest1=test1
set vartest2=test2
set vartest3=test3
set vartest4=test4
set vartest5=test5
set vartest5=test6
set vartest6=test7
Второй блок, похоже, работает. Или давайте скажем: эти переменные передаются в список запросов. Но это только вручную установить тест-переменные ...
Первый блок, однако, не работает, и я не могу figureout почему ...
Как управлять, что все переменные читать сохраняются после . readlist.bat отделка? Поскольку я абсолютный greenhorn, когда дело доходит до пакетных файлов, я был бы рад, если бы вы не только дали мне подсказки, но и коды ;-)
Спасибо заранее.
Рой
CALLREADLIST.BAT:
@echo off
call readlist.bat
set
pause
READLIST.BAT:
REM =================================
REM =================================
REM READ TXT
@echo off
setlocal ENABLEDELAYEDEXPANSION
REM START: Read 1. Column (Ordner)
set ColNo=1
set cntr1=0
for /F "delims=; tokens=%ColNo%" %%A in (Text.txt) do (
set /a cntr1=!cntr1! + 1
set job!cntr1!fld=%%A
)
REM END: Read 1. Column (Ordner)
REM START: Read 2. Column (Ordner)
set ColNo=2
set cntr2=0
for /F "delims=; tokens=%ColNo%" %%A in (Text.txt) do (
SET /A cntr2=!cntr2! + 1
set job!cntr2!dat=%%A
)
REM END: Read 2. Column (Ordner)
REM START: Read 3. Column (Ordner)
set ColNo=3
set cntr3=0
for /F "delims=; tokens=%ColNo%" %%A in (Text.txt) do (
SET /A cntr3=!cntr3! + 1
set job!cntr3!kyw=%%A
)
REM END: Read 3. Column (Ordner)
endlocal
set "job1fld=%job1fld%"
set "job1dat=%job1dat%"
set "job1kyw=%job1kyw%"
set "job2fld=%job2fld%"
set "job2dat=%job2dat%"
set "job2kyw=%job2kyw%"
set "job3fld=%job3fld%"
set "job3dat=%job3dat%"
set "job3kyw=%job3kyw%"
set vartest1=test1
set vartest2=test2
set vartest3=test3
set vartest4=test4
set vartest5=test5
set vartest5=test6
set vartest6=test7
TXT-FILE:
Ordner1;Job1;Input1
Ordner2;Job2;Input2
Ordner3;Job3;Input3
Ordner4;Job4;Input4
Ordner5;Job5;Input5
Ordner6;Job6;Input6
Ordner7;Job7;Input7
Ordner8;Job8;Input8
Ordner9;Job9;Input9
Ordner10;Job10;Input10
Ordner11;Job11;Input11
Ordner12;Job12;Input12
Ordner13;Job13;Input13
Ordner14;Job14;Input14
Ordner15;Job15;Input15
Ordner16;Job16;Input16
Ordner17;Job17;Input17
Ordner18;Job18;Input18
Ordner19;Job19;Input19
Ordner20;Job20;Input20
Ordner21;Job21;Input21
Ordner22;Job22;Input22
Ordner23;Job23;Input23
Ordner24;Job24;Input24
Ordner25;Job25;Input25
Ordner26;Job26;Input26
Ordner27;Job27;Input27
Ordner28;Job28;Input28
Ordner29;Job29;Input29
Ordner30;Job30;Input30
Ordner31;Job31;Input31
Ordner32;Job32;Input32
Ordner33;Job33;Input33
Ordner34;Job34;Input34
Ordner35;Job35;Input35
Ordner36;Job36;Input36
Ordner37;Job37;Input37
Ordner38;Job38;Input38
Ordner39;Job39;Input39
Ваша проблема - 'endlocal'. это возвращает любые изменения к переменным с 'setlocal'. Избавьтесь от 'setlocal' и' endlocal' в вашем readlist.bat. Вместо этого поместите их в ваш callreadlist.bat. – Stephan
Вот оно! Большое спасибо! Проблема решена, я бы сказал. Но я должен сказать: выглядит довольно нелогично для меня ... Я имею в виду, что setlocal затем выключен, только один skript ранее ... – user3001971
не так уж и нелогично: дочерний процесс работает в среде матери -process - так что оба имеют одни и те же переменные. Если вы не сообщите дочерней явной использовать собственную среду с 'setlocal' – Stephan