批量查找和替换字符串添加空行
Batch find and replace string adds blank line
我得到了这段代码(在这个 question 中),它查找并替换了字符串,但它在输出文件的末尾添加了一个空白的新行,使其无法使用。
@echo off &setlocal
set "Russian=g_language = Russian"
set "English=g_language = English"
set "textfile=user.cfg"
set "newfile=user.bak"
Call :SwapLang Russian
:search
Color 9B
@echo off&prompt :&mode con cols=60 lines=16
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo PLEASE RUN NOTEPAD
echo.
echo.
echo.
echo.
echo.
:search
TIMEOUT /T 2
TASKLIST|FIND "notepad.exe"
IF %ERRORLEVEL% equ 0 (GOTO found) ELSE (GOTO search)
:found
Call :SwapLang English
Goto :Eof
:SwapLang %1 byRef
( for /f "delims=" %%i in (%textfile%) do (
set "line=%%i"
setlocal EnableDelayedExpansion
If /I "!line:~0,12!" Equ "g_language =" (
echo(!%1!
) Else (
echo(!line!
)
endlocal
)) > "%newfile%"
del %textfile%
rename %newfile% %textfile%
Goto :Eof
输入文件: 它有 6 行,没有空行。
sys_usefrontline = 1
net_frontline_address = s1.gmru.net
net_frontline_port = 5050
g_language = Russian
cl_promoPageWidth = 820
cl_promoPageHeight = 726
OUTPUT1 FILE:它有7行,最后一行是空白的(这里不能显示)。
sys_usefrontline = 1
net_frontline_address = s1.gmru.net
net_frontline_port = 5050
g_language = Russian
cl_promoPageWidth = 820
cl_promoPageHeight = 726
OUTPUT2 FILE:它有7行,最后一行是空白的(这里不能显示)。
sys_usefrontline = 1
net_frontline_address = s1.gmru.net
net_frontline_port = 5050
g_language = English
cl_promoPageWidth = 820
cl_promoPageHeight = 726
有人可以帮我解决这个问题吗?
批处理不适合编辑文件。此批次使用 PowerShell 通过正则表达式进行编辑:
:: Q:\Test17\SO_45879928.cmd
@echo off &setlocal
set "textfile=user.cfg"
Call :SwapLang Russian
:search
Color 9B
@echo off&prompt :&mode con cols=60 lines=16
echo.
echo.
echo PLEASE RUN NOTEPAD
echo.
echo.
:search
TIMEOUT /T 2
TASKLIST|FIND "notepad.exe"
IF %ERRORLEVEL% equ 0 (GOTO found) ELSE (GOTO search)
:found
Call :SwapLang English
Goto :Eof
:SwapLang %1
Powershell -NoP -C "$txt=(gc %textfile% -raw) -replace '(?<=g_language = )(English|Russian)','%1';[IO.File]::WriteAllText('%textfile%', $txt)"
Goto :Eof
我已经解决了你的原始问题:Batch check and replace string then wait for a process 仅通过 2 个命令行使用 msr.exe
如下:(完整的消息在那里,彩色截图)
msr -p user.cfg -it "(g_language\s*=\s*)\w*" -o "Russian" -R
msr -p user.cfg -it "(g_language\s*=\s*)\w*" -o "English" -R
此外,对于您在这里的问题,还有 1 个删除尾部新行的命令:
msr -p your-files-dirs -S -t "[\r\n]+$" -o "" -R
或者删除尾部空格和新行:
msr -p your-files-dirs -S -t "\s+$" -o "" -R
根据Whosebug规则,这里再说一遍:msr.exe
/msr.gcc*
/msr.cygwin
等在我打开的项目https://github.com/qualiu/msrtools
目录,作为通用工具到Match/Search/R替换 files/pipe lines/blocks.
我得到了这段代码(在这个 question 中),它查找并替换了字符串,但它在输出文件的末尾添加了一个空白的新行,使其无法使用。
@echo off &setlocal
set "Russian=g_language = Russian"
set "English=g_language = English"
set "textfile=user.cfg"
set "newfile=user.bak"
Call :SwapLang Russian
:search
Color 9B
@echo off&prompt :&mode con cols=60 lines=16
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo PLEASE RUN NOTEPAD
echo.
echo.
echo.
echo.
echo.
:search
TIMEOUT /T 2
TASKLIST|FIND "notepad.exe"
IF %ERRORLEVEL% equ 0 (GOTO found) ELSE (GOTO search)
:found
Call :SwapLang English
Goto :Eof
:SwapLang %1 byRef
( for /f "delims=" %%i in (%textfile%) do (
set "line=%%i"
setlocal EnableDelayedExpansion
If /I "!line:~0,12!" Equ "g_language =" (
echo(!%1!
) Else (
echo(!line!
)
endlocal
)) > "%newfile%"
del %textfile%
rename %newfile% %textfile%
Goto :Eof
输入文件: 它有 6 行,没有空行。
sys_usefrontline = 1
net_frontline_address = s1.gmru.net
net_frontline_port = 5050
g_language = Russian
cl_promoPageWidth = 820
cl_promoPageHeight = 726
OUTPUT1 FILE:它有7行,最后一行是空白的(这里不能显示)。
sys_usefrontline = 1
net_frontline_address = s1.gmru.net
net_frontline_port = 5050
g_language = Russian
cl_promoPageWidth = 820
cl_promoPageHeight = 726
OUTPUT2 FILE:它有7行,最后一行是空白的(这里不能显示)。
sys_usefrontline = 1
net_frontline_address = s1.gmru.net
net_frontline_port = 5050
g_language = English
cl_promoPageWidth = 820
cl_promoPageHeight = 726
有人可以帮我解决这个问题吗?
批处理不适合编辑文件。此批次使用 PowerShell 通过正则表达式进行编辑:
:: Q:\Test17\SO_45879928.cmd
@echo off &setlocal
set "textfile=user.cfg"
Call :SwapLang Russian
:search
Color 9B
@echo off&prompt :&mode con cols=60 lines=16
echo.
echo.
echo PLEASE RUN NOTEPAD
echo.
echo.
:search
TIMEOUT /T 2
TASKLIST|FIND "notepad.exe"
IF %ERRORLEVEL% equ 0 (GOTO found) ELSE (GOTO search)
:found
Call :SwapLang English
Goto :Eof
:SwapLang %1
Powershell -NoP -C "$txt=(gc %textfile% -raw) -replace '(?<=g_language = )(English|Russian)','%1';[IO.File]::WriteAllText('%textfile%', $txt)"
Goto :Eof
我已经解决了你的原始问题:Batch check and replace string then wait for a process 仅通过 2 个命令行使用 msr.exe
如下:(完整的消息在那里,彩色截图)
msr -p user.cfg -it "(g_language\s*=\s*)\w*" -o "Russian" -R
msr -p user.cfg -it "(g_language\s*=\s*)\w*" -o "English" -R
此外,对于您在这里的问题,还有 1 个删除尾部新行的命令:
msr -p your-files-dirs -S -t "[\r\n]+$" -o "" -R
或者删除尾部空格和新行:
msr -p your-files-dirs -S -t "\s+$" -o "" -R
根据Whosebug规则,这里再说一遍:msr.exe
/msr.gcc*
/msr.cygwin
等在我打开的项目https://github.com/qualiu/msrtools
目录,作为通用工具到Match/Search/R替换 files/pipe lines/blocks.