DOS(bat)文字列置換の原理

2309 ワード

文字列「c:/test/1」の「/」をすべて「//」に置き換える原理:
(「C:/TEST/1」文字列が既にVAR変数に存在すると仮定する:)
C:/WINDOWS>set "var=C:/TEST/1"
(var変数の文字列"/"の文字をすべて"//"に置き換えます)
C:/WINDOWS>set "var=%var:/=//%"
(var変数の内容を表示)
C:/WINDOWS>echo %var% C://TEST//1
結果:C://TEST//1、全て置換完了.
他のネットユーザーがあげた例をいくつかあげます.
ファイル文字列の置換

@echo off

echo ***** Replace "abcd" as "ABCD" *****
set strFilePath=C:\Users\Leez\Desktop\TestBat\TestSource.txt
set strOld=abcd
set strNew=ABCD

setlocal enabledelayedexpansion
for /f "tokens=*" %%i in (%strFilePath%) do (
  set "var=%%i"
  if not !var!.==. (
    set "var=!var:%strOld%=%strNew%!"
    echo !var!!>>%strFilePath%.bk
  )
)

move /y %strFilePath%.bk %strFilePath%

pause

例2:

@echo off 
setlocal enabledelayedexpansion 
set file= 
set /p file=            (     ): 
set "file=%file:"=%" 
for %%i in ("%file%") do set file=%%~fi 
echo. 
set replaced= 
set /p replaced=            : 
echo. 
set all= 
set /p all=         : 
for /f "delims=" %%i in ('type "%file%"') do ( 
set str=%%i 
set "str=!str:%replaced%=%all%!" 
echo !str!>>"%file%"_tmp.txt 
) 
copy "%file%" "%file%"_bak.txt >nul 2>nul 
move "%file%"_tmp.txt "%file%" 
start "" "%file%"

筆者はそれを変更して16を17に変更した.

@echo off 
setlocal enabledelayedexpansion 
set file=c:\Program Files\hndsclient\ds\GetFile.ini
set "file=%file:"=%" 
for %%i in ("%file%") do set file=%%~fi 
echo. 
set replaced=16 
echo. 
set all=17
for /f "delims=" %%i in ('type "%file%"') do ( 
  set str=%%i 
  set "str=!str:%replaced%=%all%!" 
  echo !str!>>"%file%"_tmp.txt 
) 
copy "%file%" "%file%"_bak.txt >nul 2>nul 
move "%file%"_tmp.txt "%file%" 
start "" "%file%"