【问题标题】:Batch, replace a delay expansion string with delay expansion parameters批量,用延迟扩展参数替换一个延迟扩展字符串
【发布时间】:2017-05-21 22:53:43
【问题描述】:

基本上我只是使用这块来替换我的 var 中的一个字符串,但我无法让嵌套延迟扩展正常工作。这甚至可能吗?

set replace=!replace:!search!=!replaceVal!!

我知道当它被执行时会发生什么。它在第一个完整集之后停止,这将是 set replace=!replace:!,然后它尝试执行最后一部分,但是有没有办法逃脱它们以便正确地得到我的结果?

【问题讨论】:

    标签: batch-file replace cmd window


    【解决方案1】:

    我认为最安全的方法如下:

    for /F "delims=" %%S in (^""!search!"^") do (
        for /F "delims=" %%R in (^""!replaceVal!"^") do (
            set "replace=!replace:%%~S=%%~R!"
        )
    )
    

    所以唯一剩下的限制是那些无论如何都适用于子字符串替换语法的限制。


    一个更简单但同样安全的方法是这样的:

    for /F "delims=" %%S in (^""!search!=!replaceVal!"^") do (
        set "replace=!replace:%%~S!"
    )
    

    如您所见,甚至不需要将搜索和替换字符串分隔到最后。

    【讨论】:

      【解决方案2】:

      只要searchreplace 值没有空格,此方法就可以工作:

      for /F "tokens=1,2" %%a in ("!search! !replaceVal!") do set replace=!replace:%%a=%%b!
      

      如果这些变量有空格,只需插入适当的分隔符:

      for /F "tokens=1,2 delims==" %%a in ("!search!=!replaceVal!") do set replace=!replace:%%a=%%b!
      

      【讨论】:

        【解决方案3】:

        [示例]

        @ECHO OFF
        SETLOCAL ENABLEDELAYEDEXPANSION
        
        SET "search=aaa"
        SET "replace=jjj"
        IF DEFINED search (
         SET "replace=xxxbbbyyybbbhhh"
         SET "search=bbb"
         SET "replaceval=kkk"
         SET REPLACE
         ECHO after...
         CALL SET "replace=%%replace:!search!=!replaceval!%%"
         SET replace
        )
        
        GOTO :EOF
        

        【讨论】:

        • 问题是我的搜索和替换值是基于将从脚本执行中获得的值。设置命令在一个块中。
        • 所以?该示例显示searchreplacevalreplace 的值是在一个块中设置的。请注意,对于第一个 set replace(显示从 replace 开始的每个变量的值),值既不是 aaa 也不是 jjj。它们已被块内分配的值替换。 after 情况显示替换后,仍然看不到 aaajjj,并且在块 xxxbbbyyybbbhhh 内分配的值已将在块 bbb 内分配的字符串替换为分配的 replaceval在 kkk 块内。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多