1

好的,所以我正在使用内置更新程序创建一个脚本,它使用以下代码创建一个新文件并更新几个变量,但由于某种原因,这不起作用任何人都知道如何修复它或类似的脚本做大致相同的事情。

@echo off
setlocal enabledelayedexpansion

set /p "findthis"="1"
set /p "replacewith"="1.2.3"
call:updater
set /p "findthis"="2"
set /p "replacewith"="2.3.4"
call:updater
set /p "findthis"="3"
set /p "replacewith"="3.4.5"
call:updater
goto:eof

:updater
for /f "tokens=*" %%a in (updateme.bat) do (

   set write=%%a
   if %%a==%findthis% set write=%replacewith%

   echo !write! 
   echo !write! >>%~n1.replaced%~x1
)
goto:eof
4

1 回答 1

1

这个 BAT 有几个错误。

有些是明显的语法错误。

  1. 阅读help set并更正所有set /p "this"="value"(提示:不要使用 /p 选项并更正变量名中“的使用”)

  2. 您尝试在 CALLed 标签中使用 %1。这是一个传递的参数,您没有在 CALL 中传递它。阅读HELP CALL

有些是逻辑错误。

  1. :updater 代码将更新后的字符串附加到输出文件中。它这样做了三遍,所以最终的代码是更改字符串后的原始代码的三倍。

  2. 此外,代码确实尝试将字符串作为整行查找,BAT 文件中仅包含“1”的行对我来说没有太大意义。您可能希望找到任何出现“1”的文本。

  3. 另外,当你修复前面的问题时,如果我正确理解代码的意图,你最终会将所有“1”替换为“1.2.3”,然后将所有“2”替换为“2.3.4”,所以原来的 "1" 将被 "1.2.3.4.3" 取代.. 之后又会被 "1.2.3.4.5.4.3.4.5" 取代。小心点。

于 2012-06-14T12:18:27.367 回答