如何将文本文档批量拆分为变量
Posted
技术标签:
【中文标题】如何将文本文档批量拆分为变量【英文标题】:How to split text document into variables in batch 【发布时间】:2021-08-31 10:43:14 【问题描述】:所以我想知道是否有一种方法可以让批处理文件读取单独的文本文档并将特定的代码行转换为具有相同值的变量,就像来自文档一样。所以让批处理脚本读取文本文档,并使用其中的信息来创建它自己的变量。 例如。
TEXT.txt:
test==a
test2==b
test3==c
然后批处理脚本会读取该文本并将其转换为与 TEXT.txt 文档中给出的值相同的可用变量
像这样: 可用的批处理变量:
%test% is "a"
%test2% is "b"
%test3% is "c"
等等
此外,批处理文件是否可以使用set /p opt= Userinput:
读取用户输入,然后获取用户输入并将输入的每个字母转换为单独的单独变量?
例如。
当提示set /p opt= Userinput:
时,用户输入:“hello”,批处理脚本将用户输入转换为:
%letter1% is "h"
%letter2% is "e"
%letter3% is "l"
%letter4% is "l"
%letter5% is "o"
批处理脚本是否也可以读取用户输入中的空格,例如用户输入是“大家好”,然后批处理脚本会说
%letter1% is "h"
%letter2% is "i"
%letter3% is "0"
%letter4% is "a"
%letter5% is "l"
%letter6% is "l"
【问题讨论】:
每个条目是否单独一行?你能摆脱那个多余的等号吗? @Squashman 是的,每个条目都在单独的行上。抱歉,由于某种原因,我无法让它正确显示代码 好吧,我修复了一次,所以在你再次覆盖之前,你应该看看我是如何做到的。无论如何,您希望%test%
的内容是==a
、=a
还是a
?
@Compo 我希望 %test% 在本例中为“a”
【参考方案1】:
要获取示例 TEXT.txt
中显示的内容,您可以使用 For /F
循环并使用 =
字符作为分隔符:
@For /F "Tokens=1*Delims==" %%G In ('find "=" ^<"TEXT.txt"')Do @Set "%%G=%%H"
不过,我不想依赖%PATH%
和%PATHEXT%
:
@For /F "Tokens=1,* Delims==" %%G In ('%SystemRoot%\System32\find.exe "="
0^<"TEXT.txt"') Do @Set "%%G=%%H"
至于您更有趣的问题,下面的batch-file 尝试将用户输入的每个字符保存到单独的变量中。
@Echo Off
SetLocal EnableExtensions DisableDelayedExpansion
:GetInput
Set "Input="
Set /P "Input=Enter your string here>"
If Not Defined Input GoTo GetInput
For /F "Delims==" %%G In ('"(Set Char[) 2> NUL"') Do Set "%%G="
Set "i=0" & For /F Delims^=^ EOL^= %%G In ('(%SystemRoot%\System32\cmd.exe /V /U
/S /D /C "(Echo=!Input!)"^) ^| %SystemRoot%\System32\find.exe /V ""') Do (
Set /A i += 1 & SetLocal EnableDelayedExpansion
For %%H In (!i!) Do EndLocal & Set "Char[%%H]=%%G")
(Set Char[) 2>NUL
Pause
添加最后两行只是为了给您一些已完成的视觉反馈,您显然会在那里使用自己的代码......
【讨论】:
那么在前 2 个示例中究竟是什么设置了变量?因为我似乎无法弄清楚这些变量的设置是什么。在包含以下文本a = hi
的文件上运行脚本后,我尝试了 echo %%G
、echo %%H
和 echo %Delims%
对不起,哈哈,我不是最擅长批处理
它完全符合您对@Gabrielnigme20 的期望!鉴于您提交的TEXT.txt
内容,您应该能够在提供的示例代码之后的任何位置打印以下内容!例如@Echo %%test%% is "%test%"
、@Echo %%test2%% is "%test2%"
、@Echo %%test3%% is "%test3%"
。但是,您在上面的评论中提供的示例与您提出的问题不匹配,因此提供的代码未提供您期望的结果。我只回答了你最初提出的问题!该评论将创建一个变量%a %
,其内容为<space>hi
。
哦,我明白了。是的,现在我得到了它,它工作得很好。很抱歉给您带来不便以上是关于如何将文本文档批量拆分为变量的主要内容,如果未能解决你的问题,请参考以下文章