環境定義(=設定値)は、スクリプトファイルとは別ファイルで管理したいですよね。 当たり前です。
Unixシェルならsource
コマンドで簡単に実現できます。
これをDOSでも実現できないものか? というお話。
結論
for
コマンドでできるよ。
DOSの場合
for /f
でファイルの内容を環境変数%i
に読み込んで、%i
を実行するだけです。
%i
はDOSコマンドとして解釈されるため、下記は実行が必要な命令としては扱われずにスキップされます。
-
rem
によるコメント行 - 空白行
スクリプトを配置するディレクトリパスに空白を含む可能性がある場合は、下記修正のいずれかが必要になります。
- スクリプトの先頭で
cd
またはpushd
により作業ディレクトリを%~dp0
に変更する。 かつfor /f
ではファイル名だけ(=相対パス)を指定する -
for /f
にusebackq
オプションを追加する。 かつfor ... in
で指定するファイルパスを逆引用符
で囲んだ絶対パスにする
僕の好みは前者です。
これにより、DOSスクリプトをすべて相対パスで記述できます。
⇒ 作業ディレクトリを意識しないで実行することができます
例
env.bat
rem ========================================
rem ENV_A ... 設定値A. hoge:ほげ, fuga:ふが
rem ========================================
set ENV_A=hoge
exec.bat
@echo off
rem env.batのロード
for /f "tokens=*" %%i in (%~dp0env.bat) do (
%%i
)
rem env.batの設定値を出力
echo %ENV_A%
DOS
DOS> exec.bat
hoge
Bシェルの場合(参考)
env
# ========================================
# ENV_A ... 設定値A. hoge:ほげ, fuga:ふが
# ========================================
ENV_A=hoge
exec.sh
#!/bin/bash
# envのロード
. `dirname $0`/env
# envの設定値を出力
echo $ENV_A
stdout
$ ./exec.sh
hoge