batch .cmd:我可以覆盖参数值%〜1并将其返回给函数吗?

时间:2019-02-08 12:00:55

标签: batch-file cmd

我当前正在运行一个批处理脚本,以搜索多个不同的文件以查找匹配的字符串。 当字符串 A(foobar) B + C(foo + bar)匹配时,提示用户输入 D(qux),替换< strong> A 和 B + D(foo + qux)

在搜索过程中,文件会遇到多个位置,脚本会多次替换相同的A,但是我不想每次都提示用户,只是第一次遇到。

尝试创建动态函数,我为函数提供了4个不同的参数:

  

B(字符串的第一部分): foo

     

C(字符串的第二部分,将被替换):

     

X(文件位置): C:\ application.properties

     

Y(旧存储的B + D): fooqux

Y 本质上仅作为参数提供,以便函数知道要覆盖哪个变量(在我的代码中: batchIp globalUnitName

Batch File: How can I have a function return a value when the parameter passed to that function contains spaces? 显示:

SET %2 = %L%

应该是可能的。

https://www.dostips.com/DtTutoFunctions.php 显示:

set "%~1=DosTips"

应该是可能的。

我的代码:

:replace_properties
    set batchIp =
    call :replace_string "batch.ip=http://" "192.168.68.132" C:\application.properties %batchIp%
    call :replace_string "batch_ip = " "192.168.68.132" C:\processor.cfg %batchIp%
    set globalUnitName =
    call :replace_string "unit.name=" "Global_Default" C:\application.properties %globalUnitName%

:replace_string
    @echo off
    findstr /m "%~1%~2" %~3 >nul 2>nul
    if %errorlevel%==0 (
        if "%~4"=="" (
            echo File: %~3
            echo   %~1%~2 was found, define new replacement:
            set /p applicationProperty="? %~1"
            IF NOT DEFINED applicationProperty SET "applicationProperty=%~2"
            echo before: %~4
            echo before: %batchIp%
            echo before: %globalUnitName%
            set %~4=!applicationProperty!
            echo after: %~4
            echo after: %batchIp%
            echo after: %globalUnitName%
        ) else (
            set applicationProperty="%~4"
        )
        powershell -Command "(gc %~3) -replace '%~1%~2' , '%~1!applicationProperty!' | Set-Content %~3"
        set applicationProperty=
    )
    exit /B 0

我希望:replace_properties 中的变量 batchIp 将替换为:replace_string applicationProperty 的内容em>运行 set%〜4 =!applicationProperty!时。

但是

echo before: %~4
echo before: %batchIp%
echo before: %globalUnitName%
set %~4=!applicationProperty!
echo after: %~4
echo after: %batchIp%
echo after: %globalUnitName%

变成:

  

之前:

     

之前:

     

之前:

     

该命令的语法不正确。

     

之后:

     

之后:

     

之后:

0 个答案:

没有答案