查找和替换字符串的DOS批处理脚本正在添加空格

时间:2013-01-04 17:04:39

标签: batch-file

我有这个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 

实际输出在每一行的末尾都有一个尾随空格。

1 个答案:

答案 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