LoginSignup
1
1

More than 5 years have passed since last update.

DOSで環境定義ファイルを使うぞ

Posted at

環境定義(=設定値)は、スクリプトファイルとは別ファイルで管理したいですよね。 当たり前です。
Unixシェルならsourceコマンドで簡単に実現できます。
これをDOSでも実現できないものか? というお話。

結論

forコマンドでできるよ。

DOSの場合

for /fでファイルの内容を環境変数%iに読み込んで、%iを実行するだけです。
%iはDOSコマンドとして解釈されるため、下記は実行が必要な命令としては扱われずにスキップされます。

  • remによるコメント行
  • 空白行

スクリプトを配置するディレクトリパスに空白を含む可能性がある場合は、下記修正のいずれかが必要になります。

  • スクリプトの先頭でcdまたはpushdにより作業ディレクトリを%~dp0に変更する。 かつfor /fではファイル名だけ(=相対パス)を指定する
  • for /fusebackqオプションを追加する。 かつ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
1
1
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
1
1