batch-file - 批量编程 : read txt and keep variables with a subroutine

标签 batch-file

我是第一次写一个 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 

第二个 block 似乎工作。或者说:那些变量被移交给callreadlist。但是那些只是手动设置的测试变量...

但是第一个 block 不起作用,我不知道为什么......

如何管理在 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

最佳答案

好东西:

@echo off
for /f %%a in ('^< Text.txt find /c /v ""') do set /a lines=%%a
<Text.txt (
for /l %%a in (1 1 %lines%) do (
    set "line="
    set /p "line="
    for /f "tokens=1-3delims=;" %%d in ('call echo %%line%%') do (
        set "job%%afld=%%d"&set "job%%asat=%%e"&set "job%%akyw=%%f"
    )
))
set "line="&set "lines="
set "job"

这很简单,真正的挑战是在没有延迟扩展的情况下给每个作业变量一个唯一的数字(这里是 1-117)。

关于batch-file - 批量编程 : read txt and keep variables with a subroutine,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20033293/

相关文章:

c# - 如何在 C#/.Net 中模拟结束进程树

windows - 在一行中使用多个命令

git - bat 文件发出 git pull 命令并保持 git bash 窗口打开

batch-file - 如何在批处理文件中输出中文单词?

command-line - 命令提示符/Bat 文件 - 创建以今天的日期命名的新文件夹

iis - 如果 CPU 使用率高于 90%,则执行 IISRESET

batch-file - 重命名批处理文件中的文件路径

batch-file - ffmpeg 来自多个源的输出文件名

windows - '__COMPAT_LAYER' 实际上是做什么的?

batch-file - 设置和检查错误级别无法按批处理方式按预期工作