【问题标题】:Find and Replace not working for batch file查找和替换不适用于批处理文件
【发布时间】:2012-06-17 09:34:09
【问题描述】:

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

@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

【问题讨论】:

    标签: file batch-file replace find


    【解决方案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”。小心点。

    【讨论】:

      猜你喜欢
      • 2018-04-16
      • 2012-10-14
      • 2016-01-18
      • 2013-09-08
      • 1970-01-01
      • 1970-01-01
      • 2012-07-22
      • 2013-07-01
      • 2022-06-22
      相关资源
      最近更新 更多