【问题标题】:BAT Find text in line > Replace all line [closed]BAT在行中查找文本>替换所有行[关闭]
【发布时间】:2017-06-29 19:27:21
【问题描述】:

我的球棒有问题。

@echo off
setlocal enableextensions disabledelayedexpansion

set "search=time_upper_limit:"
set "replace=time_upper_limit: 9999999"

set "textFile=game.sii"

for /f "delims=" %%i in ('type "%textFile%" ^& break ^> "%textFile%" ') do (
    set "line=%%i"
    setlocal enabledelayedexpansion
    >>"%textFile%" echo(!line:%search%=%replace%!
    endlocal
)

如何制作 .bat ; 找到一行文字,然后替换整行; 文件有超过 24,000 行, 他花了将近 20 分钟 :( ; 能以更快的方式完成吗? ;

文件中只有一行要替换

替换开始测试的行“ time_upper_limit:”

【问题讨论】:

  • 你有什么问题?
  • 此脚本按设计工作。买一台更好的电脑。
  • 只是一行需要更换?或者可能是几行
  • 文件只有一行
  • 您确定您的game.sii 的解密版本与您正在执行的搜索替换完全兼容吗?

标签: batch-file replace find line


【解决方案1】:

我试图改变这段代码的行并覆盖一个文件

set findtext="time_upper_limit: "
set replace=time_upper_limit: 9999999"
set findfile="game.sii"
findstr %findtext% %findfile%

game.sii

【讨论】:

    【解决方案2】:

    我看不出您发布的脚本有什么问题会导致这种运行时间。 除非解密以某种方式与输入文件混淆

    如果您不需要保留空行并且game.sii 被正确解密,(没有尴尬/有毒的字符),这样的事情也应该起作用:

    @Echo Off
    Ren "game.sii" "game.bak"
    (For /F "UseBackQ EOL=: Tokens=1* Delims=:" %%A In ("game.bak"
    ) Do If "%%A"==" time_upper_limit" (Echo= time_upper_limit: 9999999
        ) Else If "%%B"=="" (Echo=%%A) Else Echo=%%A:%%B)>game.sii
    

    脚注:更改您保存的游戏设置是作弊。

    【讨论】:

    • 此代码无法正确处理我的文件
    • 我的代码与您提供的信息一样好。如果您有一个以time_upper_limit: 开头的行的“干净”文件,它将用time_upper_limit: 9999999 替换整行。您的初始代码执行字符串替换,此代码执行行替换。如果前者有效而不是后者,我建议您提供的信息不足。如果您认为我的代码有问题,请告诉我它有什么问题,如果结果或运行不正确,那么没有更多信息就无法调试。
    • 顺便说一句,在看到您的game.sii 文件之后,我已经相应地更新了我的代码。我是正确的,您的信息缺失,您正在搜索的行应该以一个空格开头
    • 感谢您的帮助,一切正常
    猜你喜欢
    • 1970-01-01
    • 2021-11-29
    • 2011-10-20
    • 1970-01-01
    • 2018-02-04
    • 1970-01-01
    • 2022-07-17
    • 1970-01-01
    • 2011-11-21
    相关资源
    最近更新 更多