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 に答える