1

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

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

4

1 回答 1

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
于 2013-01-04T18:13:39.923 回答