我有这个DOS批处理脚本找到/替换字符串值,但它在文件中的每一行上添加空格。我已经尝试修剪空格但文件最终完全空白。
SETLOCAL ENABLEEXTENSIONS
SETLOCAL DISABLEDELAYEDEXPANSION
set file="C:\Eclipse64\eclipse\configuration\.settings\org.eclipse.ui.ide.prefs"
set OldStr=XXXXXXX
set NewStr=%username%
if "!~OldStr!"=="" findstr "^::" "%~f0"&GOTO:EOF
for /f "tokens=1,* delims=]" %%A in ('"type %file% |find /n /v """') do (
set "line=%%B"
if defined line (
call set "line=echo.%%line:%OldStr%=%NewStr%%%"
for /f "delims=" %%X in ('"echo."%%line%%""') do %%~X >> %file%_new
) ELSE echo.
)
move /Y %file%_new %file% > nul
输入 - 文件中的行:
eclipse.preferences.version=1
RECENT_WORKSPACES=C\:\\Users\\XXXXXXX\\workspace
预期产出:
eclipse.preferences.version=1
RECENT_WORKSPACES=C\:\\Users\\jgemoll\\workspace
实际输出:
eclipse.preferences.version=1
RECENT_WORKSPACES=C\:\\Users\\jgemoll\\workspace
实际输出在每一行的末尾都有一个尾随空格。
答案 0 :(得分:0)
删除命令与此行中重定向之间的空格:
for /f "delims=" %%X in ('"echo."%%line%%""') do %%~X >> %file%_new
:: this one ^
另一方面,为什么这么多的输出复杂化?你可以替换它:
call set "line=echo.%%line:%OldStr%=%NewStr%%%"
for /f "delims=" %%X in ('"echo."%%line%%""') do %%~X >> %file%_new
只有这个:
call echo %%line:%OldStr%=%NewStr%%%>> %file%_new
或者您可以暂时启用延迟扩展(仅在此时)并使用不同的语法:
SETLOCAL ENABLEDELAYEDEXPANSION
echo !line:%OldStr%=%NewStr%!>> %file%_new
ENDLOCAL