您好,我在使用下面的代码时遇到了一些问题。我想用 IR 代码替换 .txt
文件中的每个数字。我正在运行 Windows 10 64 位。
从数字 0
到 9
的 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/