我有一个名为NonProd.txt的文本文件,它包含每一行的服务器名,即
c123abc
c234abc
c345abc
cfcd123
etc.
我还有一个批处理文件(如下所示),它从文本文件中读取每一行,从每一行中提取3个字符,并将该值保存在变量中。然后,我想使用这个变量来替换XXX
变量中的mypath
字符。
下面的代码用于读取文本文件、提取服务器名称和提取所需的3个字符,但我无法使字符串替换工作,即用提取的3个字符替换mypath
中的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
发布于 2015-09-25 16:24:19
我不明白你为什么使用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,新路径: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\文件夹\文件夹\ 已完成。
发布于 2015-09-25 15:53:50
按照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 /?
包含在这个列表中,尽管,如果代码中没有使用作为命令的帮助,如果解释了对示例的延迟扩展,通常必须在用(
. )
定义的任何块中使用。
https://stackoverflow.com/questions/32784663
复制相似问题