好的,所以我创建了一个带有内置更新程序的脚本,它使用以下代码创建一个新文件并更新了几个变量,但由于某些原因,这不起作用,任何人都知道如何修复它或类似的脚本将做大致相同的事情。
@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
答案 0 :(得分:1)
此BAT中存在多个错误。
有些是明显的语法错误。
阅读help set
并更正所有set /p "this"="value"
(提示:请勿使用/ p选项并更正“变量名称中”的使用情况)
您尝试在CALLed标签中使用%1。这是一个传递的参数,你没有在你的CALL中传递它。阅读HELP CALL
。
有些是逻辑错误。
:updater代码将更新的字符串附加到输出文件。它这样做了三次,所以最终的代码是原始代码的三倍,字符串也改变了。
此外,代码确实试图找到一个完整的字符串,BAT文件中只包含“1”的行对我来说没有多大意义。您可能希望找到任何文本出现“1”。
此外,当您修复以前的问题,并且如果我正确理解代码的意图,您最终将所有“1”替换为“1.2.3”,然后将所有“2”替换为“ 2.3.4“,原来的”1“将被”1.2.3.4.3“取代......后来再次被取代,所以最终将是”1.2.3.4.5.4.3.4.5“。小心。