草庐IT

windows - 查找和替换 IR 代码

coder 2024-06-08 原文

您好,我在使用下面的代码时遇到了一些问题。我想用 IR 代码替换 .txt 文件中的每个数字。我正在运行 Windows 10 64 位。

从数字 09 的 IR 代码。

REM 0 - 0x1067728D
REM 1 - 0x106742BD
REM 2 - 0x1067827D
REM 3 - 0x106702FD
REM 4 - 0x1067629D
REM 5 - 0x1067A25D
REM 6 - 0x106722DD
REM 7 - 0x106752AD
REM 8 - 0x1067926D
REM 9 - 0x106712ED

我从 here 中挖出了一个查找和替换脚本并为每个数字创建一个循环,但是 output.txt 看起来像这样:↓

 {00883}  {0080x106712ED-4}  {0080x106712ED-5}  {0080x106712ED-0x106712ED-}  {00887}  {00888}

而不是像这样:↓

 {0x1067728D-0x1067728D-0x1067926D-0x1067926D-0x106702FD}  {0x1067728D-0x1067728D-0x1067926D-0x1067926D-0x1067629D}  {0x1067728D-0x1067728D-0x1067926D-0x1067926D-0x1067A25D}  {0x1067728D-0x1067728D-0x1067926D-0x1067926D-0x106722DD}  {0x1067728D-0x1067728D-0x1067926D-0x1067926D-0x106752AD}  {0x1067728D-0x1067728D-0x1067926D-0x1067926D-0x1067926D}

输入文件如下所示:↓

{00883}  {00884}  {00885}  {00886}  {00887}  {00888}

这是我正在使用的代码,我们将不胜感激。

::CallScript
@echo off
CALL :Script0
CALL :Script1
CALL :Script2
CALL :Script3
CALL :Script4
CALL :Script5
CALL :Script6
CALL :Script7
CALL :Script8
CALL :Script9
pause
goto :eof

:Script0
@echo off
set "NewStr=0x1067728D-"
set "InFile=%USERPROFILE%\Desktop\MDVR IR numbers\In.txt"
set "OutPutFile=%USERPROFILE%\Desktop\MDVR IR numbers\Out.txt"
Call :FindReplace "" "%NewStr%" "%InFile%"
set "OldStr=0"
Call :FindReplace "%OldStr%" "%NewStr%" "%InFile%" "%OutPutFile%"

:FindReplace <OldStr> <NewStr> <InFile> <OutPutFile>
SETLOCAL ENABLEEXTENSIONS
SETLOCAL DISABLEDELAYEDEXPANSION
if "%~1"=="" findstr "^::" "%~f0"&GOTO:EOF
(
    for /f "tokens=1,* delims=]" %%A in ('"type %3|find /n /v """') do (
        set "line=%%B"
        if defined line (
            call set "line=echo.%%line:%~1=%~2%%"
            for /f "delims=" %%X in ('"echo."%%line%%""') do %%~X
        ) ELSE echo.
    )
)>%4
goto :eof

:Script1
@echo off
set "NewStr=0x106742BD-"
set "InFile=%USERPROFILE%\Desktop\MDVR IR numbers\In.txt"
set "OutPutFile=%USERPROFILE%\Desktop\MDVR IR numbers\Out.txt"
Call :FindReplace "" "%NewStr%" "%InFile%"
set "OldStr=1"
Call :FindReplace "%OldStr%" "%NewStr%" "%InFile%" "%OutPutFile%"

:FindReplace <OldStr> <NewStr> <InFile> <OutPutFile>
SETLOCAL ENABLEEXTENSIONS
SETLOCAL DISABLEDELAYEDEXPANSION
if "%~1"=="" findstr "^::" "%~f0"&GOTO:EOF
(
    for /f "tokens=1,* delims=]" %%A in ('"type %3|find /n /v """') do (
        set "line=%%B"
        if defined line (
            call set "line=echo.%%line:%~1=%~2%%"
            for /f "delims=" %%X in ('"echo."%%line%%""') do %%~X
        ) ELSE echo.
    )
)>%4
goto :eof

:Script2
@echo off
set "NewStr=0x1067827D-"
set "InFile=%USERPROFILE%\Desktop\MDVR IR numbers\In.txt"
set "OutPutFile=%USERPROFILE%\Desktop\MDVR IR numbers\Out.txt"
Call :FindReplace "" "%NewStr%" "%InFile%"
set "OldStr=2"
Call :FindReplace "%OldStr%" "%NewStr%" "%InFile%" "%OutPutFile%"

:FindReplace <OldStr> <NewStr> <InFile> <OutPutFile>
SETLOCAL ENABLEEXTENSIONS
SETLOCAL DISABLEDELAYEDEXPANSION
if "%~1"=="" findstr "^::" "%~f0"&GOTO:EOF
(
    for /f "tokens=1,* delims=]" %%A in ('"type %3|find /n /v """') do (
        set "line=%%B"
        if defined line (
            call set "line=echo.%%line:%~1=%~2%%"
            for /f "delims=" %%X in ('"echo."%%line%%""') do %%~X
        ) ELSE echo.
    )
)>%4
goto :eof

:Script3
@echo off
set "NewStr=0x106702FD-"
set "InFile=%USERPROFILE%\Desktop\MDVR IR numbers\In.txt"
set "OutPutFile=%USERPROFILE%\Desktop\MDVR IR numbers\Out.txt"
Call :FindReplace "" "%NewStr%" "%InFile%"
set "OldStr=3"
Call :FindReplace "%OldStr%" "%NewStr%" "%InFile%" "%OutPutFile%"

:FindReplace <OldStr> <NewStr> <InFile> <OutPutFile>
SETLOCAL ENABLEEXTENSIONS
SETLOCAL DISABLEDELAYEDEXPANSION
if "%~1"=="" findstr "^::" "%~f0"&GOTO:EOF
(
    for /f "tokens=1,* delims=]" %%A in ('"type %3|find /n /v """') do (
        set "line=%%B"
        if defined line (
            call set "line=echo.%%line:%~1=%~2%%"
            for /f "delims=" %%X in ('"echo."%%line%%""') do %%~X
        ) ELSE echo.
    )
)>%4
goto :eof

:Script4
@echo off
set "NewStr=0x1067629D-"
set "InFile=%USERPROFILE%\Desktop\MDVR IR numbers\In.txt"
set "OutPutFile=%USERPROFILE%\Desktop\MDVR IR numbers\Out.txt"
Call :FindReplace "" "%NewStr%" "%InFile%"
set "OldStr=4"
Call :FindReplace "%OldStr%" "%NewStr%" "%InFile%" "%OutPutFile%"

:FindReplace <OldStr> <NewStr> <InFile> <OutPutFile>
SETLOCAL ENABLEEXTENSIONS
SETLOCAL DISABLEDELAYEDEXPANSION
if "%~1"=="" findstr "^::" "%~f0"&GOTO:EOF
(
    for /f "tokens=1,* delims=]" %%A in ('"type %3|find /n /v """') do (
        set "line=%%B"
        if defined line (
            call set "line=echo.%%line:%~1=%~2%%"
            for /f "delims=" %%X in ('"echo."%%line%%""') do %%~X
        ) ELSE echo.
    )
)>%4
goto :eof

:Script5
@echo off
set "NewStr=0x1067A25D-"
set "InFile=%USERPROFILE%\Desktop\MDVR IR numbers\In.txt"
set "OutPutFile=%USERPROFILE%\Desktop\MDVR IR numbers\Out.txt"
Call :FindReplace "" "%NewStr%" "%InFile%"
set "OldStr=5"
Call :FindReplace "%OldStr%" "%NewStr%" "%InFile%" "%OutPutFile%"

:FindReplace <OldStr> <NewStr> <InFile> <OutPutFile>
SETLOCAL ENABLEEXTENSIONS
SETLOCAL DISABLEDELAYEDEXPANSION
if "%~1"=="" findstr "^::" "%~f0"&GOTO:EOF
(
    for /f "tokens=1,* delims=]" %%A in ('"type %3|find /n /v """') do (
        set "line=%%B"
        if defined line (
            call set "line=echo.%%line:%~1=%~2%%"
            for /f "delims=" %%X in ('"echo."%%line%%""') do %%~X
        ) ELSE echo.
    )
)>%4
goto :eof

:Script6
@echo off
set "NewStr=0x106722DD-"
set "InFile=%USERPROFILE%\Desktop\MDVR IR numbers\In.txt"
set "OutPutFile=%USERPROFILE%\Desktop\MDVR IR numbers\Out.txt"
Call :FindReplace "" "%NewStr%" "%InFile%"
set "OldStr=6"
Call :FindReplace "%OldStr%" "%NewStr%" "%InFile%" "%OutPutFile%"

:FindReplace <OldStr> <NewStr> <InFile> <OutPutFile>
SETLOCAL ENABLEEXTENSIONS
SETLOCAL DISABLEDELAYEDEXPANSION
if "%~1"=="" findstr "^::" "%~f0"&GOTO:EOF
(
    for /f "tokens=1,* delims=]" %%A in ('"type %3|find /n /v """') do (
        set "line=%%B"
        if defined line (
            call set "line=echo.%%line:%~1=%~2%%"
            for /f "delims=" %%X in ('"echo."%%line%%""') do %%~X
        ) ELSE echo.
    )
)>%4
goto :eof

:Script7
@echo off
set "NewStr=0x106752AD-"
set "InFile=%USERPROFILE%\Desktop\MDVR IR numbers\In.txt"
set "OutPutFile=%USERPROFILE%\Desktop\MDVR IR numbers\Out.txt"
Call :FindReplace "" "%NewStr%" "%InFile%"
set "OldStr=7"
Call :FindReplace "%OldStr%" "%NewStr%" "%InFile%" "%OutPutFile%"

:FindReplace <OldStr> <NewStr> <InFile> <OutPutFile>
SETLOCAL ENABLEEXTENSIONS
SETLOCAL DISABLEDELAYEDEXPANSION
if "%~1"=="" findstr "^::" "%~f0"&GOTO:EOF
(
    for /f "tokens=1,* delims=]" %%A in ('"type %3|find /n /v """') do (
        set "line=%%B"
        if defined line (
            call set "line=echo.%%line:%~1=%~2%%"
            for /f "delims=" %%X in ('"echo."%%line%%""') do %%~X
        ) ELSE echo.
    )
)>%4
goto :eof

:Script8
@echo off
set "NewStr=0x1067926D-"
set "InFile=%USERPROFILE%\Desktop\MDVR IR numbers\In.txt"
set "OutPutFile=%USERPROFILE%\Desktop\MDVR IR numbers\Out.txt"
Call :FindReplace "" "%NewStr%" "%InFile%"
set "OldStr=8"
Call :FindReplace "%OldStr%" "%NewStr%" "%InFile%" "%OutPutFile%"

:FindReplace <OldStr> <NewStr> <InFile> <OutPutFile>
SETLOCAL ENABLEEXTENSIONS
SETLOCAL DISABLEDELAYEDEXPANSION
if "%~1"=="" findstr "^::" "%~f0"&GOTO:EOF
(
    for /f "tokens=1,* delims=]" %%A in ('"type %3|find /n /v """') do (
        set "line=%%B"
        if defined line (
            call set "line=echo.%%line:%~1=%~2%%"
            for /f "delims=" %%X in ('"echo."%%line%%""') do %%~X
        ) ELSE echo.
    )
)>%4
goto :eof

:Script9
@echo off
set "NewStr=0x106712ED-"
set "InFile=%USERPROFILE%\Desktop\MDVR IR numbers\In.txt"
set "OutPutFile=%USERPROFILE%\Desktop\MDVR IR numbers\Out.txt"
Call :FindReplace "" "%NewStr%" "%InFile%"
set "OldStr=9"
Call :FindReplace "%OldStr%" "%NewStr%" "%InFile%" "%OutPutFile%"

:FindReplace <OldStr> <NewStr> <InFile> <OutPutFile>
SETLOCAL ENABLEEXTENSIONS
SETLOCAL DISABLEDELAYEDEXPANSION
if "%~1"=="" findstr "^::" "%~f0"&GOTO:EOF
(
    for /f "tokens=1,* delims=]" %%A in ('"type %3|find /n /v """') do (
        set "line=%%B"
        if defined line (
            call set "line=echo.%%line:%~1=%~2%%"
            for /f "delims=" %%X in ('"echo."%%line%%""') do %%~X
        ) ELSE echo.
    )
)>%4
goto :eof

最佳答案

起初,您的代码太长了。
您了解函数,但没有以正确的方式使用它们。

第二个问题是,您总是替换输入文件中的某些内容并创建一个新的输出文件,但您想要增量替换。

下一个问题是,将数字替换为其他数字的顺序不起作用,因为您将所有 0 替换为 0x1067728D 然后尝试替换所有1 替换为 0x106742BD,但这也将替换之前 0x1067728D 中的 1

您必须首先将所有数字替换为其他数字,这不会出现在您的替换表达式中(我选择 MNOPQRSTUV)。
然后您可以用您想要的表达式替换字母。

@echo off
set "InFile=In.txt"
set "OutPutFile=Out.txt"

copy "%InFile%" "%OutPutFile%"
CALL :replace   0   M
CALL :replace   1   N
CALL :replace   2   O
CALL :replace   3   P
CALL :replace   4   Q
CALL :replace   5   R    
CALL :replace   6   S
CALL :replace   7   T
CALL :replace   8   U
CALL :replace   9   V

CALL :replace   M   "0x1067728D,"
CALL :replace   N   "0x106742BD,"
CALL :replace   O   "0x1067827D,"
CALL :replace   P   "0x106702FD,"
CALL :replace   Q   "0x1067629D,"
CALL :replace   R   "0x1067A25D,"
CALL :replace   S   "0x106722DD,"
CALL :replace   T   "0x106752AD,"
CALL :replace   U   "0x1067926D,"
CALL :replace   V   "0x106712ED,"
CALL :replace   ",}"   }
goto :eof

:replace
@echo off
set "OldStr=%~1"
set "NewStr=%~2"
Call :FindReplace "%OldStr%" "%NewStr%" "%OutPutFile%"
exit /b

:FindReplace <OldStr> <NewStr> <InFile> <OutPutFile>
SETLOCAL ENABLEEXTENSIONS, DisableDelayedExpansion
rem if "%~1"=="" findstr "^::" "%~f0"&GOTO:EOF
(
    for /f "tokens=*" %%A in ('findstr /n "^" %3') do (
        set "line=%%A"
        setlocal EnableDelayedExpansion
        set "line=!line:*:=!"
        if defined line (
            set "line=!line:%~1=%~2!"
        )
        (echo(!line!)
        endlocal
    )
) > TEMPFILE.tmp
del "%~3"
move TEMPFILE.tmp "%~3"
goto :eof

关于windows - 查找和替换 IR 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41118105/

有关windows - 查找和替换 IR 代码的更多相关文章

  1. ruby - 在 Ruby 程序执行时阻止 Windows 7 PC 进入休眠状态 - 2

    我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大备份文件)。问题是如果启用sleep,它会中断应用程序。否则,计算机将持续运行数周,直到我下次访问为止。有什么方法可以防止执行期间休眠并让Windows在执行后休眠吗?欢迎任何疯狂的想法;-) 最佳答案 Here建议使用SetThreadExecutionStateWinAPI函数,使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入休眠状态或关闭显示。像这样的东西:require'Win32API'ES_AWAYMODE_REQUIRED=0x0

  2. ruby - 如何在 buildr 项目中使用 Ruby 代码? - 2

    如何在buildr项目中使用Ruby?我在很多不同的项目中使用过Ruby、JRuby、Java和Clojure。我目前正在使用我的标准Ruby开发一个模拟应用程序,我想尝试使用Clojure后端(我确实喜欢功能代码)以及JRubygui和测试套件。我还可以看到在未来的不同项目中使用Scala作为后端。我想我要为我的项目尝试一下buildr(http://buildr.apache.org/),但我注意到buildr似乎没有设置为在项目中使用JRuby代码本身!这看起来有点傻,因为该工具旨在统一通用的JVM语言并且是在ruby中构建的。除了将输出的jar包含在一个独特的、仅限ruby​​

  3. ruby-on-rails - Rails 源代码 : initialize hash in a weird way? - 2

    在rails源中:https://github.com/rails/rails/blob/master/activesupport/lib/active_support/lazy_load_hooks.rb可以看到以下内容@load_hooks=Hash.new{|h,k|h[k]=[]}在IRB中,它只是初始化一个空哈希。和做有什么区别@load_hooks=Hash.new 最佳答案 查看rubydocumentationforHashnew→new_hashclicktotogglesourcenew(obj)→new_has

  4. ruby 正则表达式 - 如何替换字符串中匹配项的第 n 个实例 - 2

    在我的应用程序中,我需要能够找到所有数字子字符串,然后扫描每个子字符串,找到第一个匹配范围(例如5到15之间)的子字符串,并将该实例替换为另一个字符串“X”。我的测试字符串s="1foo100bar10gee1"我的初始模式是1个或多个数字的任何字符串,例如,re=Regexp.new(/\d+/)matches=s.scan(re)给出["1","100","10","1"]如果我想用“X”替换第N个匹配项,并且只替换第N个匹配项,我该怎么做?例如,如果我想替换第三个匹配项“10”(匹配项[2]),我不能只说s[matches[2]]="X"因为它做了两次替换“1fooX0barXg

  5. ruby-on-rails - 在 ruby​​ 中使用 gsub 函数替换单词 - 2

    我正在尝试用ruby​​中的gsub函数替换字符串中的某些单词,但有时效果很好,在某些情况下会出现此错误?这种格式有什么问题吗NoMethodError(undefinedmethod`gsub!'fornil:NilClass):模型.rbclassTest"replacethisID1",WAY=>"replacethisID2andID3",DELTA=>"replacethisID4"}end另一个模型.rbclassCheck 最佳答案 啊,我找到了!gsub!是一个非常奇怪的方法。首先,它替换了字符串,所以它实际上修改了

  6. ruby - 当使用::指定模块时,为什么 Ruby 不在更高范围内查找类? - 2

    我刚刚被困在这个问题上一段时间了。以这个基地为例:moduleTopclassTestendmoduleFooendend稍后,我可以通过这样做在Foo中定义扩展Test的类:moduleTopmoduleFooclassSomeTest但是,如果我尝试通过使用::指定模块来最小化缩进:moduleTop::FooclassFailure这失败了:NameError:uninitializedconstantTop::Foo::Test这是一个错误,还是仅仅是Ruby解析变量名的方式的逻辑结果? 最佳答案 Isthisabug,or

  7. ruby-on-rails - 浏览 Ruby 源代码 - 2

    我的主要目标是能够完全理解我正在使用的库/gem。我尝试在Github上从头到尾阅读源代码,但这真的很难。我认为更有趣、更温和的踏脚石就是在使用时阅读每个库/gem方法的源代码。例如,我想知道RubyonRails中的redirect_to方法是如何工作的:如何查找redirect_to方法的源代码?我知道在pry中我可以执行类似show-methodmethod的操作,但我如何才能对Rails框架中的方法执行此操作?您对我如何更好地理解Gem及其API有什么建议吗?仅仅阅读源代码似乎真的很难,尤其是对于框架。谢谢! 最佳答案 Ru

  8. ruby - 模块嵌套代码风格偏好 - 2

    我的假设是moduleAmoduleBendend和moduleA::Bend是一样的。我能够从thisblog找到解决方案,thisSOthread和andthisSOthread.为什么以及什么时候应该更喜欢紧凑语法A::B而不是另一个,因为它显然有一个缺点?我有一种直觉,它可能与性能有关,因为在更多命名空间中查找常量需要更多计算。但是我无法通过对普通类进行基准测试来验证这一点。 最佳答案 这两种写作方法经常被混淆。首先要说的是,据我所知,没有可衡量的性能差异。(在下面的书面示例中不断查找)最明显的区别,可能也是最著名的,是你的

  9. ruby - 寻找通过阅读代码确定编程语言的ruby gem? - 2

    几个月前,我读了一篇关于ruby​​gem的博客文章,它可以通过阅读代码本身来确定编程语言。对于我的生活,我不记得博客或gem的名称。谷歌搜索“ruby编程语言猜测”及其变体也无济于事。有人碰巧知道相关gem的名称吗? 最佳答案 是这个吗:http://github.com/chrislo/sourceclassifier/tree/master 关于ruby-寻找通过阅读代码确定编程语言的rubygem?,我们在StackOverflow上找到一个类似的问题:

  10. ruby - 查找字符串中的内容类型(数字、日期、时间、字符串等) - 2

    我正在尝试解析一个CSV文件并使用SQL命令自动为其创建一个表。CSV中的第一行给出了列标题。但我需要推断每个列的类型。Ruby中是否有任何函数可以找到每个字段中内容的类型。例如,CSV行:"12012","Test","1233.22","12:21:22","10/10/2009"应该产生像这样的类型['integer','string','float','time','date']谢谢! 最佳答案 require'time'defto_something(str)if(num=Integer(str)rescueFloat(s

随机推荐