2013-01-04 46 views
1

我有这个DOS批处理脚本查找/替换字符串值,但它将空格添加到文件中的每一行。我试过修剪空格,但文件完全空白。查找并替换字符串的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

你能给我们一个输入,预期输出和你看到的实际输出的例子? – Mark

回答

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 
+0

您的天才!谢谢!!! –

+0

我试过你的第二个答案,但没有得到预期的输出。实际输出是!line:XXXXXXX = jygemoll! !line:XXXXXXX = jygemoll! –

+0

啊,我很抱歉!你实际上是*禁用*延迟扩展,而不是启用它。这对我来说非常粗心。我在编辑我的答案。 –

相关问题