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

问题描述:

我有称为NonProd.txt每行包含一个服务器名称的文本文件,即如何在FOR循环中替换字符串中的字符?

c123abc 
c234abc 
c345abc 
cfcd123 
etc. 

我也有一个批处理文件(以下给出),其读取从文本文件中的每一行,提取3个字符从每一行,并将该值保存在变量中。然后我想用变量替换mypath变量中的XXX字符。

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

任何人都可以建议吗?

@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 
+0

您需要DelayedExpansion:'呼叫建立mypath中= %% mypath中:!XXX = SID %%'和'也叫ECHO NEWPATH = %% mypath中%%' – Aacini

+0

这也可以不DelayedExpansion(未经测试)工作= 'CALL CALL set mypath = %%%% mypath:XXX = %% SID %%%%%%'' – Aacini

使用延迟扩展的代码,如Aacini所示。

@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 /?包括在这个名单虽然IF代码不被用作命令的帮助,如果解释延迟Ë xpansion上的示例经常必须用于任何使用(定义的块... )

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

@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,NEWPATH:C:\ 123 \ SYS \ EXE \文件夹\文件夹\
SID:c234abc ,servername:234,newpath:c:\ 234 \ sys \ exe \ folder \ folder \
sid:c345abc,servername:345,newpath:c:\ 345 \ sys \ exe \ folder \ folder \
sid:cfcd123 ,servername:fcd,newpath:c:\ fcd \ sys \ exe \ folder \ folder \
已完成。