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
Batch file 在Windows批处理中使用变量替换循环中另一个变量的子字符串_Batch File_Cmd - Fatal编程技术网

Batch file 在Windows批处理中使用变量替换循环中另一个变量的子字符串

Batch file 在Windows批处理中使用变量替换循环中另一个变量的子字符串,batch-file,cmd,Batch File,Cmd,假设以下代码在每次迭代中用变量var的值替换变量dir中的col3子字符串,但它没有这样做。有人知道这个代码有什么问题吗 代码: 输出: col1 col2 col4 col5 col6 col7 col8 col1 col2 col4 col5 col6 col7 col8 col1 col2 col4 col5 col6 col7 col8 col1 col2 col4 col5 col6 col7 col8 col1 col2 col4 col5 col6 col7 col8

假设以下代码在每次迭代中用变量var的值替换变量dir中的col3子字符串,但它没有这样做。有人知道这个代码有什么问题吗

代码:

输出:

col1 col2  col4 col5 col6 col7 col8
col1 col2  col4 col5 col6 col7 col8
col1 col2  col4 col5 col6 col7 col8
col1 col2  col4 col5 col6 col7 col8
col1 col2  col4 col5 col6 col7 col8
期望输出:

col1 col2 v1 col4 col5 col6 col7 col8
col1 col2 v2 col4 col5 col6 col7 col8
col1 col2 v3 col4 col5 col6 col7 col8
col1 col2 v4 col4 col5 col6 col7 col8
col1 col2 v5 col4 col5 col6 col7 col8

经过数小时的搜索,我发现更换线路

SET dir=!dir:col3=%var%!


解决了问题。

您需要双延迟扩展:
对于(!var!)中的%%V,请设置“dir=!dir:col3=%%V!”
不,这完全是错误的,您需要延迟扩展,因为您处于循环中,必须先扩展内部变量(
var
),然后再扩展外部变量(
dir
)!一种可能的方法是:
调用集“dir=%%dir:col3=!var!%%”
对不起,我不得不收回我之前的评论,因为在您的特定情况下,您的答案确实提供了解决方案(偶然?),因为:对于每个循环迭代,
dir
由于立即(
%%/code>-)扩展而扩展到其原始值,将
col3
替换为文本字符串
!瓦尔;延迟扩展然后执行其余操作并扩展
!瓦尔
的当前值…但是,在第一次循环迭代中,我的代码建议正确地将
col3
替换为
v1
;但对于每一次进一步的迭代,
dir
由于延迟扩展而扩展到其修改的值,因此字符串中不再有
col3
,因此与第一次迭代相同的值将再次返回。很抱歉得出了一个仓促而错误的结论!
SET dir=!dir:col3=%var%!
SET dir=%dir:col3=!var!%