查找和替换不适用于批处理文件

时间:2012-06-14 10:56:35

标签: file batch-file replace find

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

@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

1 个答案:

答案 0 :(得分:1)

此BAT中存在多个错误。

有些是明显的语法错误。

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

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

  3. 有些是逻辑错误。

    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“。小心。