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=!