Batch file 循环内部的批处理文件字符串替换
我试图在删除子字符串的情况下将一个变量设置为另一个变量的值。这发生在两个Batch file 循环内部的批处理文件字符串替换,batch-file,Batch File,我试图在删除子字符串的情况下将一个变量设置为另一个变量的值。这发生在两个for循环中,我将在下面说明 setlocal EnableDelayedExpansion for %%e in (a b c d) do ( set outerLoop=%%e echo Handling !outerLoop! dir *_!outerLoop! /S /B >inner-loop-files.txt for /F "tokens=*" %%A in (inne
for
循环中,我将在下面说明
setlocal EnableDelayedExpansion
for %%e in (a b c d) do (
set outerLoop=%%e
echo Handling !outerLoop!
dir *_!outerLoop! /S /B >inner-loop-files.txt
for /F "tokens=*" %%A in (inner-loop-files.txt) do (
set innerLoopFile=%%A
set search=_!outerLoop!
REM Not working!
REM set replacedFile=!innerLoopFile:search=!
echo !innerLoopFile!
echo !replacedFile!
)
)
我期望输出如下:
我知道最里面的循环中的标记行很接近,但我无法获得正确的扩展语法。当我这样做时,它适用于单个示例(尽管因为它没有使用变量,所以对于其他迭代是错误的):
对于搜索
,我需要对此表达式执行什么操作才能正确展开
set replacedFile=!innerLoopFile:search=!
如果
outerLoop
变量具有相同的%%e
可替换参数值,则可以直接使用它:set replacedFile=!innerLoopFile:\%%e=代码>。这种类型的管理已在中进行了详细解释。@Aacini谢谢,这确实有效,但我仍然想知道为什么它不能与您可以在(“!search!”)中为%%x使用的更具表现力的变量名一起使用()do set replacedFile=!innerLoopFile:%%~x=代码>。正如我所说,解释在给定的链接中……在您的示例中,单词搜索是一个字符串。不是一个变量。不管怎样,如果您尝试使用search作为变量,则需要使用延迟扩展来引用它。但您不能,因为您正在使用innerloopfile变量的延迟扩展。您不能执行双重延迟扩展。在我看来,更好的方法是将文件扩展名隔离到它自己的变量。如果outerLoop
变量具有相同的%%e
可替换参数值,那么您可以直接使用它:set replacedFile=!innerLoopFile:\%%e=代码>。这种类型的管理已在中进行了详细解释。@Aacini谢谢,这确实有效,但我仍然想知道为什么它不能与您可以在(“!search!”)中为%%x使用的更具表现力的变量名一起使用()do set replacedFile=!innerLoopFile:%%~x=代码>。正如我所说,解释在给定的链接中……在您的示例中,单词搜索是一个字符串。不是一个变量。不管怎样,如果您尝试使用search作为变量,则需要使用延迟扩展来引用它。但您不能,因为您正在使用innerloopfile变量的延迟扩展。您不能执行双重延迟扩展。在我看来,更好的方法是将文件扩展名隔离到它自己的变量。
set replacedFile=!innerLoopFile:_a=!
set replacedFile=!innerLoopFile:search=!