Batch file Windows批处理集语法

Batch file Windows批处理集语法,batch-file,cmd,set,windows-scripting,Batch File,Cmd,Set,Windows Scripting,我在这里采用了一些代码: 我遇到的问题是关于这一行: Set "Up2Sub=%Line:*page[ %~2 ]=%" 变量%2未正确连接 在[]之间,将%2变量的这个值添加到此SET语句的语法是什么 谢谢 示例text.txt .... page[0]={*****}; page[1]={*****}; page[2]={*****}; page[3]={*****}; page[4]={*****}; .... 要拆分字符串,还可以使用for/f循环: @Echo Off for

我在这里采用了一些代码:

我遇到的问题是关于这一行:

Set "Up2Sub=%Line:*page[ %~2 ]=%"
变量%2未正确连接

在[]之间,将%2变量的这个值添加到此SET语句的语法是什么

谢谢

示例text.txt

....

page[0]={*****};
page[1]={*****};
page[2]={*****};
page[3]={*****};
page[4]={*****};

....

要拆分字符串,还可以使用
for/f
循环:

@Echo Off
for /l %%x in (0, 1, 4) do (
   For /F "Delims=" %%A In ('FindStr /I "page\[%%x\]=.*;" "test.txt"') Do (
     for /f "tokens=2 delims=;=" %%s in ("%%A") do echo %%x: %%s
   )
)
Pause
这将字符串(
%%A
)拆分为标记,用
分隔
=
。使用
页面[0]={******}
,第一个标记是
页面[0]
,然后
=
是分隔符。第二个令牌是
{******}
,第三个令牌(在
之后;
)是空的。我们只包括“;”把它交给熟食店处理

只需对文件进行一点分析,并正确选择令牌和delims,您甚至可以将代码简化为一个
,用于

For /F "tokens=2,4 delims=[]{}" %%A In ('FindStr /I "page\[[0-4]\]=.*;" "test.txt"') Do echo {%%B}>test%%A.json

请添加
test.txt
的示例内容,并充分解释您试图从中捕获的字符串和子字符串。此外,您似乎正在处理诸如
页面[0]=*
页面[1]=*
页面[2]=*
页面[3]=*
页面[4]=*
之类的行内容,但随后尝试删除所有字符串,直到
页面[0]
页面[1]
页面[2]
页面[3]
、以及
页面[4]
,由于空格的原因,它们显然不在那里。谢谢你对空格的提示。我移除了它们,但它仍然不起作用。我假设
Set“Up2Sub=%Line:*页面[%~2]=%”
的语法不正确。如果我像
Set“Up2Sub=%Line:*page[0]=%”那样硬编码,它工作正常。我在上面添加了一个示例test.txt。提前谢谢!您是正确的:
%line%
中的
=
(相应的
%~1
相应的
%%A
)破坏了
集的语法。是您想要的输出(
{******}
或只是
*******
?)。想要的输出是{******}-谢谢StephanSomething是错误的。使用第一种方法会导致不可靠的结果。有时某些事件未被拾取。似乎因输入文件而异。即使格式完全相同。这有可能与任何隐藏编码或EOL或类似的东西有关吗?很高兴与大家分享一个导致不可靠结果的示例test.txt。我认为这与{******}中字符串的总长度有关。线路长度限制似乎是原因。有没有办法防止这种情况@StephanLine的长度不应该是个问题。Dbenham说,
指定为命令行参数或通过/F:FILE选项的文件没有已知的行长度限制。
。我学会了相信他的这种说法。(搜索字符串有限制,但此处不适用)。行结尾(有
LF
CR
CRLF
)可能与文件编码一样重要。此外,行中的任何特殊字符都可能产生问题。这是一个会产生这种部分失败的文件:(只找到了
page[n]
的某些情况。)
For /F "tokens=2,4 delims=[]{}" %%A In ('FindStr /I "page\[[0-4]\]=.*;" "test.txt"') Do echo {%%B}>test%%A.json