嗨 - 我正在尝试使用3个变量类建立嵌套循环。 如果我正在使用“普通”变量,嵌套循环工作正常,但我想要做的是组合所有变量。 它应该贯穿所有Markets-Variables,然后查找和替换一些与市场相关的文本。 问题是在for循环中连接变量 - 需要一些帮助!
非常感谢!
:: set market array variables
SET MARKET[1]=DE
:: 14 more variables ...
:: set find text array variables
SET %MARKET[1]%FTEXT[1]=_1_
:: 29 more variables ...
:: set replace text array variables
SET %MARKET[1]%RTEXT[1]=_2_
:: 29 more variables ...
FOR /L %%M IN (1,1,15) DO (
ECHO ==================
ECHO Renaming market !MARKET[%%M]!
ECHO ==================
FOR /L %%T IN (1,1,30) DO (
ECHO Renaming text from !MARKET[%%M]!!FTEXT[%%T]! to !MARKET[%%M]!!RTEXT[%%T]!
:: ACTION FOR RENAMING
PAUSE
)
)
答案 0 :(得分:0)
您的find
个变量的名称与DEFTEXT [1]相同,因此!MARKET[%%M]!!FTEXT[%%T]!
错误,因为它分别扩展为DE
和FTEXT[1]
,因为您没有{ {1}}没有任何用处。
解决方案:构造正确的变量名,然后展开它,我已经使用了FTEXT[1]
技巧,这是你最里面的循环:
call set
请注意,setlocal enableDelayedExpansion
call set "from=%%!MARKET[%%M]!FTEXT[%%T]%%"
call set "to=%%!MARKET[%%M]!RTEXT[%%T]%%"
ECHO Renaming text from !from! to !to!
rem ACTION FOR RENAMING
...................
...................
endlocal
和from
变量仅存在于to
... setlocal
上下文中。同样在括号内的avoid using ::
comments内,请使用endlocal
代替。
答案 1 :(得分:0)
你需要另一层扩张:
call ECHO Renaming text from %%!MARKET[%%M]!FTEXT[%%T]%% to %%!MARKET[%%M]!RTEXT[%%T]%%
(当然也是setlocal enabledelayedexpansion
- 未在您的问题中显示,但您可能在原始代码中有此内容)
答案 2 :(得分:0)
您需要在之前使用它们来扩展构成旧名称和新名称的三个变量,以获取名称。我使用FOR /F
来做到这一点;此方法比CALL
:
FOR /L %%M IN (1,1,15) DO (
ECHO ==================
ECHO Renaming market !MARKET[%%M]!
ECHO ==================
FOR /L %%T IN (1,1,30) DO (
FOR /F "TOKENS=1-3" %%A IN ("!MARKET[%%M]! !FTEXT[%%T]! !RTEXT[%%T]!") DO (
ECHO Renaming text from !%%A%%B! to !%%A%%C!
:: ACTION FOR RENAMING
)
PAUSE
)
)
另外,请注意,第一个变量只需要在外部循环中展开:
FOR /L %%M IN (1,1,15) DO FOR /F %%A IN ("!MARKET[%%M]!") DO (
ECHO ==================
ECHO Renaming market !MARKET[%%M]!
ECHO ==================
FOR /L %%T IN (1,1,30) DO (
FOR /F "TOKENS=1-2" %%B IN ("!FTEXT[%%T]! !RTEXT[%%T]!") DO (
ECHO Renaming text from !%%A%%B! to !%%A%%C!
:: ACTION FOR RENAMING
)
PAUSE
)
)
Arrays, linked lists and other data structures in cmd.exe (batch) script
的详细信息答案 3 :(得分:0)
虽然你的问题不是很清楚,但我试着提供一个合适的答案(我希望我提取了剧本的正确用意)......
SETLOCAL EnableDelayedExpansion
遗失了(可能你在最后的代码中也有它)。MARKET[1]FTEXT[1]
/ MARKET[1]RTEXT[1]
,...(在您的代码中,第一对将被命名为DEFTEXT[1]
/ {{1}其中DERTEXT[1]
是变量DE
)的值。MARKET[1]
扩展语法(请参阅VARIABLE:find=replace
)。但是,当set /?
和find
字符串部分都包含在变量中时,这有点棘手。我实现了两个变体 - 请参阅下面代码中的相关备注replace
。以下代码应该完成您要完成的任务:
REM