Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Variables 在循环的批处理文件中的子字符串操作中使用变量_Variables_Batch File_For Loop - Fatal编程技术网

Variables 在循环的批处理文件中的子字符串操作中使用变量

Variables 在循环的批处理文件中的子字符串操作中使用变量,variables,batch-file,for-loop,Variables,Batch File,For Loop,我试图在FOR循环中使用FIXED_LENGTH变量 在循环中直接使用字符串的长度可以得到正确的结果,但是尝试使用变量是行不通的。有什么想法吗 提供正确结果的代码段 无法生成正确结果的代码段: 我试过了 SET FOLDER_NAME=!CUR_LINE:~!!FIXED_LENGTH!!! SET FOLDER_NAME=!CUR_LINE:~!FIXED_LENGTH!! SET FOLDER_NAME=!CUR_LINE:~%FIXED_LENGTH%! SVN_url_List.txt

我试图在FOR循环中使用FIXED_LENGTH变量

在循环中直接使用字符串的长度可以得到正确的结果,但是尝试使用变量是行不通的。有什么想法吗

提供正确结果的代码段

无法生成正确结果的代码段:

我试过了

SET FOLDER_NAME=!CUR_LINE:~!!FIXED_LENGTH!!!
SET FOLDER_NAME=!CUR_LINE:~!FIXED_LENGTH!!
SET FOLDER_NAME=!CUR_LINE:~%FIXED_LENGTH%!
SVN_url_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%!
几乎,语法分析可以处理这种语法,但行为不好。由于变量(
FIXED_LENGTH
)在
代码块的
中被赋值,并且在变量赋值之前,解析器在解析时用变量的值替换了对变量的读取操作(没有用于读取变量值的延迟扩展语法),操作将失败

在您的情况下,您可以在
for
循环之前定义变量,而不是在
for
循环中定义
固定长度
变量。因此,当解析
for
命令的
do
子句中的行块时,变量将具有相应的值

如果您喜欢/需要在
for
循环中声明变量,则必须使用

for %%a in (!FIXED_LENGTH!) do SET FOLDER_NAME=!CUR_LINE:~%%a!
这样,
FIXED_LENGTH
上的读取操作被延迟,分配给
for
循环的
可替换参数,并且在子字符串操作中使用该参数代替变量引用

SET FOLDER_NAME=!CUR_LINE:~!!FIXED_LENGTH!!!
SET FOLDER_NAME=!CUR_LINE:~!FIXED_LENGTH!!
SET FOLDER_NAME=!CUR_LINE:~%FIXED_LENGTH%!
for %%a in (!FIXED_LENGTH!) do SET FOLDER_NAME=!CUR_LINE:~%%a!