首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在FOR循环中替换变量字符串中的字符?

如何在FOR循环中替换变量字符串中的字符?
EN

Stack Overflow用户
提问于 2015-09-25 14:38:31
回答 2查看 1.2K关注 0票数 0

我有一个名为NonProd.txt的文本文件,它包含每一行的服务器名,即

代码语言:javascript
运行
复制
c123abc
c234abc
c345abc
cfcd123
etc.

我还有一个批处理文件(如下所示),它从文本文件中读取每一行,从每一行中提取3个字符,并将该值保存在变量中。然后,我想使用这个变量来替换XXX变量中的mypath字符。

下面的代码用于读取文本文件、提取服务器名称和提取所需的3个字符,但我无法使字符串替换工作,即用提取的3个字符替换mypath中的mypath

有人能告诉我吗?

代码语言:javascript
运行
复制
@echo off

SET mypath=C:\XXX\SYS\exe\folder\folder\

FOR /F %%X IN (NonProd.txt) DO (
  echo ServerName = %%X
  Call Set "SID=%%X"
  Call Set "SID=%%SID:~1,3%%"
  Call Echo SID = %%SID%%

  ECHO mypath = %mypath%

  CALL set mypath=%mypath:XXX=%SID%%

  ECHO newpath = %mypath%
  ECHO.
)

@echo Completed.
pause
EN

回答 2

Stack Overflow用户

发布于 2015-09-25 16:24:19

我不明白你为什么使用call而不是enabledelayedexpansion。无论如何,请参见以下代码:

代码语言:javascript
运行
复制
@echo off
cls
setlocal
(
echo c123abc
echo c234abc
echo c345abc
echo cfcd123
)>%temp%\_file.tmp

set mypath=c:\xxx\sys\exe\folder\folder\
echo:
setlocal enabledelayedexpansion
for /f "delims=" %%a in (%temp%\_file.tmp) do (
    set "sid=%%a"
    rem :: set "sid=!sid:~1,3!"
    set mypath=%mypath:xxx=!sid:~1,3!%
    echo sid: !sid!, servername: !sid:~1,3!, newpath: !mypath!
)
endlocal
echo Completed.
exit /b 0

产出:

sid: c123abc,服务器名: 123,新路径:C:\123\sys\exe\文件夹\文件夹\ sid: c234abc,服务器名: 234,新路径:C:\234\sys\exe\文件夹\文件夹\ sid: c345abc,服务器名: 345,新路径:C:\345\sys\exe\文件夹\文件夹\ sid: cfcd123,服务器名: fcd,新路径:C:\fcd\sys\exe\文件夹\文件夹\ 已完成。

票数 2
EN

Stack Overflow用户

发布于 2015-09-25 15:53:50

按照Aacini的建议使用延迟展开的代码。

代码语言:javascript
运行
复制
@echo off
setlocal EnableDelayedExpansion
set "mypath=C:\XXX\SYS\exe\folder\folder\"

for /F %%X IN (NonProd.txt) do (
  echo ServerName = %%X
  set "SID=%%X"
  set "SID=!SID:~1,3!"
  echo SID = !SID!

  set newpath=%mypath:XXX=!SID!%

  echo newpath = !newpath!
  echo.
)

echo Completed.
endlocal
pause

要了解所使用的命令及其工作方式,请打开命令提示符窗口,在那里执行以下命令,并非常仔细地读取为每个命令显示的所有帮助页。

  • for /?
  • if /?
  • set /?
  • setlocal /?

if /?包含在这个列表中,尽管,如果代码中没有使用作为命令的帮助,如果解释了对示例的延迟扩展,通常必须在用( . )定义的任何块中使用。

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

https://stackoverflow.com/questions/32784663

复制
相关文章

相似问题

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