windows - 查找和替换 IR 代码

标签 windows batch-file replace

您好,我在使用下面的代码时遇到了一些问题。我想用 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/

相关文章:

java - Java中的RegEx替换字符串

windows - 尝试使用批处理将文件从当前目录复制到另一个目录

Windows命令提示符删除文件夹中的文件

google-chrome - 谷歌浏览器不从任务计划程序运行

batch-file - 如何在cmd中设置命令的超时时间

batch-file - 递归删除目录

java - 从 java 应用程序中获取用户名 (windows)

wpf - 在Windows XP上显示汉字

java - 替换 100 数组中的整数

c# - 如何用斜杠 '\' 替换反斜杠 '/' ?