LoginSignup
22
17

More than 5 years have passed since last update.

windowsの.batバッチファイルで文字列を置換する

Last updated at Posted at 2018-01-19

windowsの.batバッチファイルで文字列を置換する

論よりコード

replace.bat
echo off
set tikan1=りんご
set tikan2=みかん
echo 置換開始
setlocal enabledelayedexpansion
for /f "delims=" %%A in (C:\copy_base\hoge.txt) do (
    set line0=%%A
    set line1=!line0:copy_base1=%tikan1%!
    set line2=!line1:copy_base2=%tikan2%!
    echo !line2!>>C:\after\hoge.txt
)
endlocal
echo 置換完了
pause
C:\copy_base\hoge.txt
Hello World
私はcopy_base1よりもcopy_base2が好きです
C:\after\hoge.txt
Hello World
私はりんごよりもみかんが好きです

解説

C:\copy_base\hoge.txtのファイルの中の
copy_base1をりんご
copy_base2をみかんに置換して
C:\after\hoge.txtとする

やってることはファイルを読み込んで1行ずつ置き換えて
echoで新規ファイルに書き込む。
echo off は必須

注意点

これだけのコードだと
echoの都合で
・空行はなかったことにされる
・半角スペースしか無い行は echo off が出力される
それらをどうにかするにはifなどで制御が必要かと思われる
今回は割愛

また、enabledelayedexpansionより
!マークが遅延演算子になるため無視され
!マークで囲まれていると消えてなくなる

つまり以下のようなjavaScriptコードだと

C:\copy_base\hoge.js
var a = 100
var b = 200
var c = 100
if (a !== b && a !== c){
 alert("true")
} else {
 alert("false")
} 
C:\after\hoge.js
var a = 100
var b = 200
var c = 100
if (a == c){
 alert("true")
} else {
 alert("false")
} 

となってしまう。!== b && a !が演算子となって消えてしまう。
たちの悪いことに上記例だとシンタックスエラーにはならないから気が付きづらい

こういう場合もとのファイルにかかれている!マークを^でエスケープしておくのが一番楽そうである

C:\copy_base\hoge.js
var a = 100
var b = 200
var c = 100
if (a ^!== b && a ^!== c){
 alert("true")
} else {
 alert("false")
} 

文字化けしてしまう時

コンソールの設定がデフォルトの932(Shift-JIS)で
コピー元のファイルが65001(UTF-8)である時にありがち
chcp 65001
で文字コードを変えてしまえば良い

replace.bat
echo off
set tikan1=りんご
set tikan2=みかん
echo 置換開始
chcp 65001
setlocal enabledelayedexpansion
for /f "delims=" %%A in (C:\copy_base\hoge.txt) do (
    set line0=%%A
    set line1=!line0:copy_base1=%tikan1%!
    set line2=!line1:copy_base2=%tikan2%!
    echo !line2!>>C:\after\hoge.txt
)
endlocal
chcp 932
echo 置換完了
pause
22
17
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
22
17