![](/img/trans.png)
[英]How to generate a dummy variable in Stata based on a sub-string of an existing string variable?
[英]Using variable in sub-string operation in batch file FOR loop
我正在尝试在FOR循环中使用FIXED_LENGTH变量。
直接在循环中使用字符串的长度会得到正确的结果,但是尝试使用变量无效。 有任何想法吗?
提供正确结果的代码段
SETLOCAL ENABLEDELAYEDEXPANSION
REM Loop through the input file and read each line.
FOR /F %%G IN (SVN_URLs_List.txt) DO (
SET CUR_LINE=%%G
REM Make sure the variable CUR_LINE is surrounded with ! instead of % to ensure delayed variable expansion.
@ECHO Processing the line: !CUR_LINE!
REM Set fixed length of "https://projects.abcdefg.com/subversion/"
SET FIXED_LENGTH=40
REM Get the sub-string of CUR_LINE to get the folder name.
SET FOLDER_NAME=!CUR_LINE:~40!
@ECHO !FOLDER_NAME!
)
ENDLOCAL
无法产生正确结果的代码段:
SETLOCAL ENABLEDELAYEDEXPANSION
REM Loop through the input file and read each line.
FOR /F %%G IN (SVN_URLs_List.txt) DO (
SET CUR_LINE=%%G
REM Make sure the variable CUR_LINE is surrounded with ! instead of % to ensure delayed variable expansion.
@ECHO Processing the line: !CUR_LINE!
REM Set fixed length of "https://projects.abcdefg.com/subversion/"
SET FIXED_LENGTH=40
REM Get the sub-string of CUR_LINE to get the folder name.
SET FOLDER_NAME=!CUR_LINE:~!!FIXED_LENGTH!!!
@ECHO !FOLDER_NAME!
)
ENDLOCAL
我努力了
SET FOLDER_NAME=!CUR_LINE:~!!FIXED_LENGTH!!!
SET FOLDER_NAME=!CUR_LINE:~!FIXED_LENGTH!!
SET FOLDER_NAME=!CUR_LINE:~%FIXED_LENGTH%!
SVN_URLs_List.txt中的输入如下所示:
https://projects.abcdefg.com/subversion/svnrepo1
https://projects.abcdefg.com/subversion/svn_repo_2
https://projects.abcdefg.com/subversion/another repo 3
我期待结果:
svnrepo1
svn_repo_2
another repo 3
第一个片段产生正确的结果。 但是,使用第二个代码段会产生类似以下内容:
https://projects.abcdefg.com/subversion/svnrepo1FIXED_LENGTH
https://projects.abcdefg.com/subversion/svn_repo_2FIXED_LENGTH
https://projects.abcdefg.com/subversion/another repo 3FIXED_LENGTH
SET FOLDER_NAME=!CUR_LINE:~!!FIXED_LENGTH!!!
SET FOLDER_NAME=!CUR_LINE:~!FIXED_LENGTH!!
语法错误。 变量引用在哪里开始/结束? 解析器无法确定它。
SET FOLDER_NAME=!CUR_LINE:~%FIXED_LENGTH%!
解析几乎可以处理此语法,但行为不佳。 由于变量( FIXED_LENGTH
)在for
代码块内分配了其值,并且解析器在解析之前用变量的值替换了对变量的读取操作(没有延迟的扩展语法来读取变量值)。分配其值后,该操作将失败。
在您的情况下,您可以在for
循环之前定义变量,而FIXED_LENGTH
在for
循环内部定义FIXED_LENGTH
变量。 因此,当解析for
命令的do
子句中的行块时,变量将具有赋值。
如果您希望/需要在for
循环中声明变量,则必须使用类似
for %%a in (!FIXED_LENGTH!) do SET FOLDER_NAME=!CUR_LINE:~%%a!
这样,对FIXED_LENGTH
的读取操作FIXED_LENGTH
被延迟,并分配给for
循环的可替换参数,并且该参数将代替子字符串操作中的变量引用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.