【发布时间】:2013-11-17 16:41:04
【问题描述】:
我是第一次编写一个 bactch 文件,但我遇到了一个我还不能解决的问题。 (我不是程序员,只是机械工程师,所以请原谅我的笨拙……还有我的英语:我不是母语人士……)
我想编写一个批处理文件 (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
第二个块似乎工作。或者可以说:这些变量被移交给 callreadlist。但那些只是手动设置的测试变量......
但是第一个块不起作用,我不知道为什么......
我如何管理所有读入的变量在 readlist.bat 完成后保留?因为在批处理文件方面我绝对是新手,如果您不仅给我提示而且给我代码,我会很高兴;-)
提前谢谢你。
罗伊
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 文件:
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以来对变量的任何更改。在您的 readlist.bat 中删除setlocal和endlocal。将它们放入您的 callreadlist.bat 中。 -
就是这样!非常感谢你!问题解决了我会说。但我不得不说:对我来说看起来很不合逻辑......我的意思是 setlocal 然后静止打开,甚至更早的一个脚本......
-
不是那么不合逻辑:子进程在母进程的环境中运行 - 所以两者共享相同的变量。除非你明确告诉女儿使用
setlocal的自己的环境
标签: batch-file