我有一个名为NonProd.txt的文本文件,每行包含一个服务器名称,即
c123abc
c234abc
c345abc
cfcd123
etc.
我还有一个批处理文件(如下所示),它从文本文件中读取每一行,从每行中提取3个字符,并将该值保存在变量中。然后,我想使用该变量替换XXX
变量中的mypath
个字符。
以下代码用于读取文本文件,提取服务器名称并提取所需的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
提取了3个字符。
有人可以提供建议吗?
HttpServeltRequest.getServletContext().getRealPath("META-INT/aop.xml");
答案 0 :(得分:2)
我不明白你使用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,servername:123,newpath:c:\ 123 \ sys \ exe \ folder \ folder \
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 \
已完成。
答案 1 :(得分:1)
使用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 作为命令的帮助 IF 解释延迟扩展通常必须在使用(
... )
定义的任何块中使用的示例。