バッチファイルの記述メモ
はじめに
先日、業務でバッチファイルを作成した。今まで実行することばかりだったため興味はあったが、作成してみてすこぶる手こずってしまった。。
中でも独特だった記述についてメモ書き程度に記しておく。
forコマンド
forコマンド内での変数の扱い方に一癖あり。
バッチファイルのforコマンド内では変数の中身を都度更新してくれない。そのため以下の書き方ではエラーとなる。
command.bat
@echo off
rem ファイル内のデータを取得
for /f %%i in (test.txt) do (
set x=%%i
rem 実行結果でエラー発生
echo %x%
)
遅延環境変数なるものを使い、以下のような書き方で変数を扱うことで都度取得した情報が変数から参照できるようになる。
command.bat
@echo off
rem 遅延環境変数の使用を宣言
setlocal enabledelayedexpansion
rem ファイル内のデータを取得
for /f %%i in (test.txt) do (
set x=%%i
rem !で変数を囲むことで一行ずつ取得できる
echo !x!
)
トークンオプションの指定
今回は以下のトークンオプションを使用した。
tokens:何番目のトークンを指定するか
delims:トークンの区切り文字を指定
tokensは指定した個数分、宣言した変数のアルファベット順に値が格納される。
test.txt
1,2,3,4
a,b,c,d
A,B,C,D
command.bat
@echo off
setlocal enabledelayedexpansion
rem ファイル内のデータを一行ずつ取得
rem カンマ区切りで1,2,3番目のデータを取得
for /f "tokens=1,2,3 delims=," %%a in (test.txt) do (
rem アルファベット順に格納される
set x=%%a
set y=%%b
set z=%%c
echo !x!
echo !y!
echo !z!
)
上記のオプション、トークン以外にも存在するため、ケースに合わせて指定を変える。詳細は以下の記事を参照した。
https://qiita.com/plcherrim/items/67be34bab1fdf3fb87f9
文字列検索
command.bat
@echo off
rem 検索対象文字列
set str=abcdefg
rem 検索文字
set search=abc
rem 文字列の検索
echo "%str%" | find "%search%" > NUL
rem 検索結果確認(存在する:0, 存在しない:1)
if not %ERRORLEVEL% 0 (
echo 存在しました。
)
復習がてら、先ほどのforコマンドの中で扱うと以下のようになる。
command.bat
@echo off
rem 検索文字
set search=abc
rem 区切り文字を空にすることでファイル内のデータを一行ずつ取得
for /f "delims=" %%i in (test.txt) do (
set str=%%i
rem 文字列の検索
echo "!str!" | find "%search%" > NUL
if not !ERRORLEVEL! 0 (
echo 存在しました。
)
)
Author And Source
この問題について(バッチファイルの記述メモ), 我々は、より多くの情報をここで見つけました https://qiita.com/makiT/items/f8f2636e3a59df4cfad8著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .