質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.04%

Windowsのバッチファイルでシステム日付を元に今が7/1~12/30か判断するようなバッチ処理を作り、 その返り値を判定ジョブに与えて、後続のバッチが動かすか、受信ファイルの削除を行いたい。

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 2,665

いつもお世話になっております。 
当方、今月から日立のJP1というバッチ監視・管理ソフトを利用し、Windowsバッチの自動化処理の常駐監視を行うことになりました。

本日、さっそく会社プロパーの方からご要望があり、
「毎年下半期(7/1~12/31)中に更新のあるデータがテキスト形式で受信されてくるのですが、どうも上半期(1/1~6/30)に関しても、データの状態は12/31のままだが、データの受信が毎日行われてしまうようです。上層部もヘタにいじりたくないそうなので、上半期の内はこちらのサーバーで受信した際に、DBへのデータ取込を行わず、そのままテキストファイルをバッチ処理で削除して欲しいです。
ただし、毎年切り替えるのも嫌なので
 上半期(1/1~6/30)なら、テキストファイルを受信後そのまま削除
 下半期(7/1~12/31)なら、既存のバッチ処理(データ取込&ファイルバックアップ作成)を
 行うような判定処理を行うバッチを新規で書いてください。」
と言われました。

作成の方針として教えて頂いたことについては、
「システム日付を元に今が7/1~12/30か判断するようなバッチ処理を作り、
 その返り値を判定ジョブに与えて、後続が動くか否かを決めるようにしてください。」
 (別に定数定義用のバッチファイルを作成し、7/1~12/31の月日は定数定義ファイルに持たせて、引数毎に異なる値を取れるようにしておいてください。」
「あと、後続処理はノータッチでお願いします。」
 と言われたのですが、正直Windowsバッチを一から作成したことが皆無のため、困っております。

何より困っているのは、「類似処理だからこれ参考にして下さい」と言われてみせていだだいた
バッチファイルが、ksh(コーンシェル)というUnix?で書かれたもの?(別環境から持ってきたそうで、詳細がわかりません)であり、batファイルとはちょっと書き方が異なりちゃんと読めないので参考にならず、読めても「方針しか」参考にならない状態です。

皆様、大変お手数をお掛けしますが、
 ・ksh(コーンシェル) → Windowsバッチ(.bat)に書き直して頂き、その上で下半期の仕様に沿ったバッチファイルを作成したく、お力を貸していただきたく質問させて頂きました。

   大変まどろっこしい質問となってしまいましたが、ご協力お願いいたします。 

参考にしてほしいと言われたkshファイルは以下になります。

※もちろん、下を参考にしない書き方でWindowsバッチで仕様が満たせるのであれば、
 そちらを教えて頂いても大変ありがたく思います。
 そもそも、新人にkshバッチで書かれたものを参考にしてWindowsバッチ(.bat)を作成してね
 というのが、若干理不尽だと思っていますので...

---参考kshバッチ

#!/bin/ksh

# 引数チェック
if [ $# -ne 1 ]
then
    echo "`basename $0` : PARAMETER-ERROR" 1>&2
    exit 9
fi

# 環境変数定義ファイル読込
if [ "$KBS_ENV" = "" ]; then
    export KBS_ENV="/dev/fs/C/${FASE}/KBS/batch/env"
fi
. ${KBS_ENV}/COMMON.conf
. ${KBS_ENV}/IFCHECK.conf

# 初期設定
export SHELL_LOG=${LOG}/`echo $0 | awk -F. '{ print $1 }'`_${1}_`date "+%Y%m%d"`.log

# STARTログ出力
cmn_log_output $0 START

#-------------------------------------------------------------------------------
# rm: 使用期間を判定し範囲外の場合、一時フォルダのデータを削除
#-------------------------------------------------------------------------------
# システム日付
export SYS_DATE=`date +"%Y%m%d"`

export SYS_MD=`date +"%m%d"`

if [ $Y_CK_FLG -eq 1 ]; then
   if [[ $FROM_MD -le $SYS_MD && $TO_MD -ge $SYS_MD ]]; then
       echo '当年IF使用期間内' >> $SHELL_LOG
       chmod 777 ${IF_TEMP}/${FILE_NAME_RSV}
   else
       echo '当年IF使用期間外 一時フォルダ対象ファイル削除:' ${FILE_NAME_RSV} >> $SHELL_LOG
       rm ${IF_TEMP}/${FILE_NAME_RSV}
   fi
elif [ $Y_CK_FLG -eq 2 ]; then
   if [ $FROM_MD -le $SYS_MD ]; then
       echo '翌年初IF使用期間内' >> $SHELL_LOG
       chmod 777 ${IF_TEMP}/${FILE_NAME_RSV}
   elif [ $TO_MD -ge $SYS_MD ]; then
       echo '翌年初IF使用期間内' >> $SHELL_LOG
       chmod 777 ${IF_TEMP}/${FILE_NAME_RSV}
   else
       echo '翌年初IF使用期間外 一時フォルダ対象ファイル削除:' ${FILE_NAME_RSV} >> $SHELL_LOG
       rm ${IF_TEMP}/${FILE_NAME_RSV}
   fi
else
   echo '当年翌年初判定フラグが不正です。' >> $SHELL_LOG
   cmn_log_output $0 ABNORMAL-END
fi

RTN=$?
if [ $RTN -ne 0 ]; then
    cmn_log_output $0 ABNORMAL-END $RTN
    exit $ERROR
fi

# ENDログ出力
cmn_log_output $0 END $RTN

exit $NORMAL


以下は、上記ksh中で参照しているconfファイルになります
(参考にして欲しいのは 、rm: 使用期間~~、以降だから設定ファイルはあまり気にしなくて良いと言われましたが、一応記載しておきます)

-- COMMON.conf 

# シェルスクリプトデバッグオプション(必要であれば環境をONにする)
if [ ! -z ${SHELL_DEBUG_OPTION} ] && [ ${SHELL_DEBUG_OPTION} == "ON" ]; then
    set -x
else
    set +x
fi

#---------------------------------------
# 固有定義
#---------------------------------------
if [ "${SYSTM}" == "" ]; then
    export SYSTM="dwh"
fi
if [ "${FASE}" == "" ]; then
    export FASE="PROD"
fi
if [ "${KBS_ENV}" == "" ]; then
    export KBS_ENV="/dev/fs/C/${FASE}/KBS/batch/env"
fi

#---------------------------------------
# ドライブ定義
#---------------------------------------
export BATCH_DRIVE=/dev/fs/C
export DATA_DRIVE=/dev/fs/D
export BATCH_DRIVE_W="`/bin/unixpath2win ${BATCH_DRIVE}`"
export DATA_DRIVE_W="`/bin/unixpath2win ${DATA_DRIVE}`"

#---------------------------------------
# アプリケーションフォルダ
#---------------------------------------
export BATCH=${BATCH_DRIVE}/${FASE}/KBS/batch
export ENV=${BATCH}/env
export SHELL=${BATCH}/shell
export BIN=${BATCH}/bin
export SQL=${BATCH}/sql
export BCP=${BATCH}/bcp
export FTP=${BATCH}/ftp
export PRM=${BATCH}/prm
export BATCH_W="`/bin/unixpath2win ${BATCH}`"
export SQL_W="`/bin/unixpath2win ${SQL}`"
export BCP_W="`/bin/unixpath2win ${BCP}`"

#---------------------------------------
# データ格納フォルダ
#---------------------------------------
export DATA=${DATA_DRIVE}/${FASE}/KBS/data
export EXPORT=${DATA_DRIVE}/${FASE}/KBS/export
export EXPGDB=${EXPORT}/gdb
export EXPGDB2=${EXPORT}/gdb2
export EXPPCSS=${EXPORT}/pcss
export EXPSB=${EXPORT}/solarboard
export IMPORT=${DATA_DRIVE}/${FASE}/KBS/import
# 2012/09/13 追加開始
export EXPORT_GDB=${DATA_DRIVE}/${FASE}/GDB2/export/kbs
# 2012/09/13 追加終了
export LOG=${DATA}/${SYSTM}/log
export KEEP=${DATA}/${SYSTM}/keep
export TEMP=${DATA}/${SYSTM}/temp
export LOAD=${DATA}/${SYSTM}/load
export BAK=${DATA}/${SYSTM}/bak
export HOST=${DATA}/${SYSTM}/host
export PCSS=${DATA}/interface/pcss
export GDB_SEND=${DATA}/interface/gdb/send
export BAKSB=${DATA}/interface/solarboard/bak
export DATA_W="`/bin/unixpath2win ${DATA}`"
export EXPORT_W="`/bin/unixpath2win ${EXPORT}`"
export EXPGDB_W="`/bin/unixpath2win ${EXPGDB}`"
export EXPGDB2_W="`/bin/unixpath2win ${EXPGDB2}`"
export EXPPCSS_W="`/bin/unixpath2win ${EXPPCSS}`"
export IMPORT_W="`/bin/unixpath2win ${IMPORT}`"
export KEEP_W="`/bin/unixpath2win ${KEEP}`"
export TEMP_W="`/bin/unixpath2win ${TEMP}`"
export LOAD_W="`/bin/unixpath2win ${LOAD}`"
export BAK_W="`/bin/unixpath2win ${BAK}`"
export PCSS_W="`/bin/unixpath2win ${PCSS}`"
export GDB_SEND_W="`/bin/unixpath2win ${GDB_SEND}`"
export MAIL_PRM=/dev/fs/C/AUTO-MAIL/DATA/SEND/INI       # メールパラメータ格納フォルダ


#---------------------------------------
# 共通フォルダ
#---------------------------------------
export COMMON=${DATA}/common
export CMNTEMP=${COMMON}/temp

#---------------------------------------
# DB用
#---------------------------------------
### PROD用のDB接続設定 ###
if [ "${FASE}" == "PROD" ]; then
    export DB_USER=SDUSA001
    export DB_PASS=test001
    export DB_SERVER=140.68.1.152
    export DB_NAME=SDDP0001
fi

#---------------------------------------
# リターンコード設定用
#---------------------------------------
export NORMAL=0
export WARNING=5
export ERROR=9
export RTN=${NORMAL}

#---------------------------------------
# 共通ログ出力機能用
#---------------------------------------
export SYSLOG=${COMMON}/syslog
. ${KBS_ENV}/CMN_LOG_OUTPUT.conf

# シェル名称・ログ名称関連設定
export SHELL_CMD=`basename $0`
export SHELL_NAME=`echo ${SHELL_CMD} | awk -F. '{ print $1 }'`
if [ "${SHELL_LOG}" == "" ]; then
    export SHELL_LOG=${LOG}/${SHELL_NAME}_`date "+%Y%m%d"`.log
fi

#---------------------------------------
# SQL実行コマンドベース表記
#---------------------------------------
export SQL_BASE_CMD='osql.exe -U '${DB_USER}' -P '${DB_PASS}' -S '${DB_SERVER}' -d '${DB_NAME}' -b -h-1 -n -w 1000'

#---------------------------------------
# トレース用ファンクション定義
#---------------------------------------
function trace_file {
    if [ -e $2 ]; then
        if [ ! -z ${TRACE_OUTPUT_LEVEL} ] && [ ${TRACE_OUTPUT_LEVEL} -gt 0 ]; then
            cat $2 | tee -a $1
        else
            cat $2 >> $1
        fi
    fi
##    rm $2        ## 削除はここでは不要(プロセス終了時に削除するため)
}
function trace_message {
    if [ ! -z ${TRACE_OUTPUT_LEVEL} ] && [ ${TRACE_OUTPUT_LEVEL} -gt 0 ]; then
        echo "$2" | tee -a $1
    else
        echo "$2" >> $1
    fi
}

#---------------------------------------
# 一時ファイル削除用トラップ
#---------------------------------------
trap 'rm -f '${TEMP}/${SHELL_NAME}*.$$ 0

#---------------------------------------
# IFファイル受領状況判定値(到着なし時)
#---------------------------------------
export IF_CONNECT_NO_ARRIVAL=5
#export IF_CONNECT_NO_ARRIVAL=0

#---------------------------------------
# BackUP履歴数
#---------------------------------------
BCKUP_DDH4103H=10


--IFCHECK.conf 
(ロケーション番号が96なのは、他の取込対象ファイルは関係ないため記載していないためです。96はJP1で呼び出す際の引数だそうです。)

## シェルスクリプトデバッグオプション(必要であれば環境をONにする)
#if [ ! -z ${SHELL_DEBUG_OPTION} ] && [ ${SHELL_DEBUG_OPTION} == "ON" ]; then
#    set -x
#else
#    set +x
#fi

#---------------------------------------
# 固有定義
#---------------------------------------
if [ "${FASE}" == "" ]; then
    export FASE="PROD"
fi

#---------------------------------------
# ドライブ定義
#---------------------------------------
export BATCH_DRIVE=/dev/fs/C
export DATA_DRIVE=/dev/fs/D
export BATCH_DRIVE_W="`/bin/unixpath2win ${BATCH_DRIVE}`"
export DATA_DRIVE_W="`/bin/unixpath2win ${DATA_DRIVE}`"

#---------------------------------------
# データ格納フォルダ
#---------------------------------------
export DATA=${DATA_DRIVE}/${FASE}/KBS/data
export IMPORT=${DATA_DRIVE}/${FASE}/KBS/import
export PRM=${BATCH_DRIVE}/${FASE}/KBS/batch/prm
export TAB_TEMP=${DATA}/dwh/temp

export X2_IMP=${IMPORT}/X2                            
export X2=${DATA}/interface/x2
export X2_BAK=${X2}/bak
export X2_TEMP=${X2}/temp
export X2_ERR=${X2}/log

export X2_IMP_W="`/bin/unixpath2win ${X2_IMP}`"
export X2_W="`/bin/unixpath2win ${X2}`"
export X2_BAK_W="`/bin/unixpath2win ${X2_BAK}`"
export X2_TEMP_W="`/bin/unixpath2win ${X2_TEMP}`"
export X2_ERR_W="`/bin/unixpath2win ${X2_ERR}`"

#---------------------------------------
# IFファイルによるロケーション判断
#---------------------------------------
case "$1" in
   96)  FILE_NAME_RSV=X2P0370.csv                              
        IF_RSV=${X2_IMP}
        IF_BAK=${X2_BAK}
        IF_TEMP=${X2_TEMP}
        IF_TEMP_W=${X2_TEMP_W}
        IF_ERR_W=${X2_ERR_W}
        FROM_MD=9999
        TO_MD=9999
        Y_CK_FLG=1
        ;;

   *)   echo "`basename $0` : PARAMETER-ERROR" 1>&2
        exit 9;;
esac

それでは、よろしくお願いいたします。
疑問点、不足箇所が考えられる際は、質問をお願いいたします(できる範囲で、補完してみます)。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

回答 2

checkベストアンサー

0

分岐条件が「月」だけのようなので、環境変数%DATE%を利用した処理の例を挙げておきます。
参考になると良いのですが。

尚、この例は「ECHO %DATE%」を実行した時、「2016/01/06」と表示される場合のみで正常終了します。
もし、上記の表示にならない場合、コントロールパネル内の地域の設定を変更する方法か、"/"をデミリタにFor文で切り出す(この方法は少し複雑)方法のどちらかを取る必要があります。

SETLOCAL ENABLEEXTENSIONS
REM 月を取得.
SET MONTH=%DATE:~-5,2%

REM 日を取得(今回未使用).
SET DAY=%DATE:~-2,2%

REM 上半期(1~6)か下半期(7~12)かをチェックするためにMONTHから6を引く.
SET /A M_CHECK=MONTH-6

IF M_CHECK LEQ 0 ( GOTO UNDER_MONTH ) ELSE ( GOTO UPPER_MONTH )

:UNDER_MONTH
@ECHO 入力の月は%MONTH%で前半期です。
REM ここに前半期で処理したいコードを記入。
GOTO END

:UPPER_MONTH
@ECHO 入力の月は%MONTH%で後半期です。
REM ここに後半期で処理したいコードを記入。
GOTO END

:END
ENDLOCAL
@ECHO ON

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/01/07 02:27

    これだと、MONTHが、08 と 09 の時に駄目ですね。先頭ゼロは8進数とみなされるので要注意です。
    単に、IF %MONTH% LEQ 06 で良い。

    キャンセル

  • 2016/01/07 08:06

     ご指摘ありがとうございました。
     otnさんのご指摘もっともです。

    キャンセル

0

イメージ説明

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/01/06 23:34

    機能を把握しておりませんでした、修正いたしました。ありがとうございます。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.04%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • トップ
  • Windows 7に関する質問
  • Windowsのバッチファイルでシステム日付を元に今が7/1~12/30か判断するようなバッチ処理を作り、 その返り値を判定ジョブに与えて、後続のバッチが動かすか、受信ファイルの削除を行いたい。