首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在批处理脚本中替换字符串?

如何在批处理脚本中替换字符串?
EN

Stack Overflow用户
提问于 2022-08-31 21:02:33
回答 1查看 51关注 0票数 0

我的arqtext.txt有以下数据集:

代码语言:javascript
复制
A,B,C,
(123 or 456) and (789 or 012),1,5,
(456 or 654) and (423 or 947),3,6,
(283 or 335) and (288 or 552),2,56,

我希望将最后3行中的第1列更改为脚本中的新字符串集,其结果如下:

代码语言:javascript
复制
A,B,C,
roi1,1,5,
roi2,3,6,
roi3,2,56,

但是我的代码只输出标题"A,B,C ":

代码语言:javascript
复制
@echo off 
setlocal EnableDelayedExpansion EnableExtensions

set roi1="(123 or 456) and (789 or 012)"
set roi2="(456 or 654) and (423 or 947)"
set roi3="(283 or 335) and (288 or 552)"

set /p "header="<"arqtext.txt"
echo %header%>arqtextnovo.txt

for /f "skip=1 tokens=1,* delims=," %%a in ("arqtext.txt") do (
    if %%a=="roi1" (
        echo roi1,%%b>>arqtextnovo.txt
    )
    if %%a=="roi2" (
        echo roi2,%%b>>arqtextnovo.txt
    )
    if %%a=="roi3" (
        echo roi3,%%b>>arqtextnovo.txt
    )
)
rem EXIT /B
pause>nul
EN

回答 1

Stack Overflow用户

发布于 2022-09-01 02:04:45

我就是这样做的:

代码语言:javascript
复制
@echo off
setlocal EnableDelayedExpansion

set "roi[(123 or 456) and (789 or 012)]=1"
set "roi[(456 or 654) and (423 or 947)]=2"
set "roi[(283 or 335) and (288 or 552)]=3"

set /P "header=" < "arqtext.txt"

> arqtextnovo.txt (

   echo %header%

   for /f "usebackq skip=1 tokens=1,* delims=," %%a in ("arqtext.txt") do (
       echo roi!roi[%%a]!,%%b
   )

)

rem EXIT /B
pause>nul

如果文件名包含在引号中,则

  • for /F命令需要"usebackq“选项。否则,它将处理包含引号的文字字符串。
  • --(重定向整个输出)>到文件,而不是将>>添加到每一行新行中更有效。这也避免了以数字结尾的重定向行的问题。
  • 如果您有几个值并且希望根据第一个值选择一个结果值,那么使用一个数组而不是测试每个单独的值是更简单和更有效的。

让我们假设这个方法:

代码语言:javascript
复制
set /P "selector=Enter selector: "
if "%selector%" equ "nine" set result=9
if "%selector%" equ "seven" set result=7
if "%selector%" equ "five" set result=5

相反,您可以定义一个名为“value”的数组:

代码语言:javascript
复制
set "value[nine]=9"
set "value[seven]=7"
set "value[five]=5"

..。然后以这样的方式直接得到结果值:

代码语言:javascript
复制
set "result=!value[%selector%]!"

此代码中使用了相同的方法。但是,如果输入值不是数组元素之一,则没有指定会发生什么情况。

有关批处理文件中数组管理的进一步说明,请参阅this answer

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73561867

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档