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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Windows 7

Microsoft Windows 7は過去にリリースされたMicrosoft WindowsのOSであり、Windows8の1代前です。2009年の7月にリリースされ販売されました。Windows7の前はWindowsVistaで、その更に3年前にリリースされました。

バッチファイル

バッチファイル(Batch File)は、Windowsのコマンドラインインタープリターによって複数のコマンドを実行させる事が出来るスクリプトファイルです。

Q&A

解決済

2回答

4915閲覧

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

mimipachi0133

総合スコア9

Windows 7

Microsoft Windows 7は過去にリリースされたMicrosoft WindowsのOSであり、Windows8の1代前です。2009年の7月にリリースされ販売されました。Windows7の前はWindowsVistaで、その更に3年前にリリースされました。

バッチファイル

バッチファイル(Batch File)は、Windowsのコマンドラインインタープリターによって複数のコマンドを実行させる事が出来るスクリプトファイルです。

0グッド

1クリップ

投稿2016/01/06 13:23

編集2016/01/06 14:31

いつもお世話になっております。
当方、今月から日立の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バッチ

lang

1 2#!/bin/ksh 3 4# 引数チェック 5if [ $# -ne 1 ] 6then 7 echo "`basename $0` : PARAMETER-ERROR" 1>&2 8 exit 9 9fi 10 11# 環境変数定義ファイル読込 12if [ "$KBS_ENV" = "" ]; then 13 export KBS_ENV="/dev/fs/C/${FASE}/KBS/batch/env" 14fi 15. ${KBS_ENV}/COMMON.conf 16. ${KBS_ENV}/IFCHECK.conf 17 18# 初期設定 19export SHELL_LOG=${LOG}/`echo $0 | awk -F. '{ print $1 }'`_${1}_`date "+%Y%m%d"`.log 20 21# STARTログ出力 22cmn_log_output $0 START 23 24#------------------------------------------------------------------------------- 25# rm: 使用期間を判定し範囲外の場合、一時フォルダのデータを削除 26#------------------------------------------------------------------------------- 27# システム日付 28export SYS_DATE=`date +"%Y%m%d"` 29 30export SYS_MD=`date +"%m%d"` 31 32if [ $Y_CK_FLG -eq 1 ]; then 33 if [[ $FROM_MD -le $SYS_MD && $TO_MD -ge $SYS_MD ]]; then 34 echo '当年IF使用期間内' >> $SHELL_LOG 35 chmod 777 ${IF_TEMP}/${FILE_NAME_RSV} 36 else 37 echo '当年IF使用期間外 一時フォルダ対象ファイル削除:' ${FILE_NAME_RSV} >> $SHELL_LOG 38 rm ${IF_TEMP}/${FILE_NAME_RSV} 39 fi 40elif [ $Y_CK_FLG -eq 2 ]; then 41 if [ $FROM_MD -le $SYS_MD ]; then 42 echo '翌年初IF使用期間内' >> $SHELL_LOG 43 chmod 777 ${IF_TEMP}/${FILE_NAME_RSV} 44 elif [ $TO_MD -ge $SYS_MD ]; then 45 echo '翌年初IF使用期間内' >> $SHELL_LOG 46 chmod 777 ${IF_TEMP}/${FILE_NAME_RSV} 47 else 48 echo '翌年初IF使用期間外 一時フォルダ対象ファイル削除:' ${FILE_NAME_RSV} >> $SHELL_LOG 49 rm ${IF_TEMP}/${FILE_NAME_RSV} 50 fi 51else 52 echo '当年翌年初判定フラグが不正です。' >> $SHELL_LOG 53 cmn_log_output $0 ABNORMAL-END 54fi 55 56RTN=$? 57if [ $RTN -ne 0 ]; then 58 cmn_log_output $0 ABNORMAL-END $RTN 59 exit $ERROR 60fi 61 62# ENDログ出力 63cmn_log_output $0 END $RTN 64 65exit $NORMAL

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

-- COMMON.conf

lang

1# シェルスクリプトデバッグオプション(必要であれば環境をONにする) 2if [ ! -z ${SHELL_DEBUG_OPTION} ] && [ ${SHELL_DEBUG_OPTION} == "ON" ]; then 3 set -x 4else 5 set +x 6fi 7 8#--------------------------------------- 9# 固有定義 10#--------------------------------------- 11if [ "${SYSTM}" == "" ]; then 12 export SYSTM="dwh" 13fi 14if [ "${FASE}" == "" ]; then 15 export FASE="PROD" 16fi 17if [ "${KBS_ENV}" == "" ]; then 18 export KBS_ENV="/dev/fs/C/${FASE}/KBS/batch/env" 19fi 20 21#--------------------------------------- 22# ドライブ定義 23#--------------------------------------- 24export BATCH_DRIVE=/dev/fs/C 25export DATA_DRIVE=/dev/fs/D 26export BATCH_DRIVE_W="`/bin/unixpath2win ${BATCH_DRIVE}`" 27export DATA_DRIVE_W="`/bin/unixpath2win ${DATA_DRIVE}`" 28 29#--------------------------------------- 30# アプリケーションフォルダ 31#--------------------------------------- 32export BATCH=${BATCH_DRIVE}/${FASE}/KBS/batch 33export ENV=${BATCH}/env 34export SHELL=${BATCH}/shell 35export BIN=${BATCH}/bin 36export SQL=${BATCH}/sql 37export BCP=${BATCH}/bcp 38export FTP=${BATCH}/ftp 39export PRM=${BATCH}/prm 40export BATCH_W="`/bin/unixpath2win ${BATCH}`" 41export SQL_W="`/bin/unixpath2win ${SQL}`" 42export BCP_W="`/bin/unixpath2win ${BCP}`" 43 44#--------------------------------------- 45# データ格納フォルダ 46#--------------------------------------- 47export DATA=${DATA_DRIVE}/${FASE}/KBS/data 48export EXPORT=${DATA_DRIVE}/${FASE}/KBS/export 49export EXPGDB=${EXPORT}/gdb 50export EXPGDB2=${EXPORT}/gdb2 51export EXPPCSS=${EXPORT}/pcss 52export EXPSB=${EXPORT}/solarboard 53export IMPORT=${DATA_DRIVE}/${FASE}/KBS/import 54# 2012/09/13 追加開始 55export EXPORT_GDB=${DATA_DRIVE}/${FASE}/GDB2/export/kbs 56# 2012/09/13 追加終了 57export LOG=${DATA}/${SYSTM}/log 58export KEEP=${DATA}/${SYSTM}/keep 59export TEMP=${DATA}/${SYSTM}/temp 60export LOAD=${DATA}/${SYSTM}/load 61export BAK=${DATA}/${SYSTM}/bak 62export HOST=${DATA}/${SYSTM}/host 63export PCSS=${DATA}/interface/pcss 64export GDB_SEND=${DATA}/interface/gdb/send 65export BAKSB=${DATA}/interface/solarboard/bak 66export DATA_W="`/bin/unixpath2win ${DATA}`" 67export EXPORT_W="`/bin/unixpath2win ${EXPORT}`" 68export EXPGDB_W="`/bin/unixpath2win ${EXPGDB}`" 69export EXPGDB2_W="`/bin/unixpath2win ${EXPGDB2}`" 70export EXPPCSS_W="`/bin/unixpath2win ${EXPPCSS}`" 71export IMPORT_W="`/bin/unixpath2win ${IMPORT}`" 72export KEEP_W="`/bin/unixpath2win ${KEEP}`" 73export TEMP_W="`/bin/unixpath2win ${TEMP}`" 74export LOAD_W="`/bin/unixpath2win ${LOAD}`" 75export BAK_W="`/bin/unixpath2win ${BAK}`" 76export PCSS_W="`/bin/unixpath2win ${PCSS}`" 77export GDB_SEND_W="`/bin/unixpath2win ${GDB_SEND}`" 78export MAIL_PRM=/dev/fs/C/AUTO-MAIL/DATA/SEND/INI # メールパラメータ格納フォルダ 79 80 81#--------------------------------------- 82# 共通フォルダ 83#--------------------------------------- 84export COMMON=${DATA}/common 85export CMNTEMP=${COMMON}/temp 86 87#--------------------------------------- 88# DB用 89#--------------------------------------- 90### PROD用のDB接続設定 ### 91if [ "${FASE}" == "PROD" ]; then 92 export DB_USER=SDUSA001 93 export DB_PASS=test001 94 export DB_SERVER=140.68.1.152 95 export DB_NAME=SDDP0001 96fi 97 98#--------------------------------------- 99# リターンコード設定用 100#--------------------------------------- 101export NORMAL=0 102export WARNING=5 103export ERROR=9 104export RTN=${NORMAL} 105 106#--------------------------------------- 107# 共通ログ出力機能用 108#--------------------------------------- 109export SYSLOG=${COMMON}/syslog 110. ${KBS_ENV}/CMN_LOG_OUTPUT.conf 111 112# シェル名称・ログ名称関連設定 113export SHELL_CMD=`basename $0` 114export SHELL_NAME=`echo ${SHELL_CMD} | awk -F. '{ print $1 }'` 115if [ "${SHELL_LOG}" == "" ]; then 116 export SHELL_LOG=${LOG}/${SHELL_NAME}_`date "+%Y%m%d"`.log 117fi 118 119#--------------------------------------- 120# SQL実行コマンドベース表記 121#--------------------------------------- 122export SQL_BASE_CMD='osql.exe -U '${DB_USER}' -P '${DB_PASS}' -S '${DB_SERVER}' -d '${DB_NAME}' -b -h-1 -n -w 1000' 123 124#--------------------------------------- 125# トレース用ファンクション定義 126#--------------------------------------- 127function trace_file { 128 if [ -e $2 ]; then 129 if [ ! -z ${TRACE_OUTPUT_LEVEL} ] && [ ${TRACE_OUTPUT_LEVEL} -gt 0 ]; then 130 cat $2 | tee -a $1 131 else 132 cat $2 >> $1 133 fi 134 fi 135## rm $2 ## 削除はここでは不要(プロセス終了時に削除するため) 136} 137function trace_message { 138 if [ ! -z ${TRACE_OUTPUT_LEVEL} ] && [ ${TRACE_OUTPUT_LEVEL} -gt 0 ]; then 139 echo "$2" | tee -a $1 140 else 141 echo "$2" >> $1 142 fi 143} 144 145#--------------------------------------- 146# 一時ファイル削除用トラップ 147#--------------------------------------- 148trap 'rm -f '${TEMP}/${SHELL_NAME}*.$$ 0 149 150#--------------------------------------- 151# IFファイル受領状況判定値(到着なし時) 152#--------------------------------------- 153export IF_CONNECT_NO_ARRIVAL=5 154#export IF_CONNECT_NO_ARRIVAL=0 155 156#--------------------------------------- 157# BackUP履歴数 158#--------------------------------------- 159BCKUP_DDH4103H=10 160

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

lang

1## シェルスクリプトデバッグオプション(必要であれば環境をONにする) 2#if [ ! -z ${SHELL_DEBUG_OPTION} ] && [ ${SHELL_DEBUG_OPTION} == "ON" ]; then 3# set -x 4#else 5# set +x 6#fi 7 8#--------------------------------------- 9# 固有定義 10#--------------------------------------- 11if [ "${FASE}" == "" ]; then 12 export FASE="PROD" 13fi 14 15#--------------------------------------- 16# ドライブ定義 17#--------------------------------------- 18export BATCH_DRIVE=/dev/fs/C 19export DATA_DRIVE=/dev/fs/D 20export BATCH_DRIVE_W="`/bin/unixpath2win ${BATCH_DRIVE}`" 21export DATA_DRIVE_W="`/bin/unixpath2win ${DATA_DRIVE}`" 22 23#--------------------------------------- 24# データ格納フォルダ 25#--------------------------------------- 26export DATA=${DATA_DRIVE}/${FASE}/KBS/data 27export IMPORT=${DATA_DRIVE}/${FASE}/KBS/import 28export PRM=${BATCH_DRIVE}/${FASE}/KBS/batch/prm 29export TAB_TEMP=${DATA}/dwh/temp 30 31export X2_IMP=${IMPORT}/X2 32export X2=${DATA}/interface/x2 33export X2_BAK=${X2}/bak 34export X2_TEMP=${X2}/temp 35export X2_ERR=${X2}/log 36 37export X2_IMP_W="`/bin/unixpath2win ${X2_IMP}`" 38export X2_W="`/bin/unixpath2win ${X2}`" 39export X2_BAK_W="`/bin/unixpath2win ${X2_BAK}`" 40export X2_TEMP_W="`/bin/unixpath2win ${X2_TEMP}`" 41export X2_ERR_W="`/bin/unixpath2win ${X2_ERR}`" 42 43#--------------------------------------- 44# IFファイルによるロケーション判断 45#--------------------------------------- 46case "$1" in 47 96) FILE_NAME_RSV=X2P0370.csv 48 IF_RSV=${X2_IMP} 49 IF_BAK=${X2_BAK} 50 IF_TEMP=${X2_TEMP} 51 IF_TEMP_W=${X2_TEMP_W} 52 IF_ERR_W=${X2_ERR_W} 53 FROM_MD=9999 54 TO_MD=9999 55 Y_CK_FLG=1 56 ;; 57 58 *) echo "`basename $0` : PARAMETER-ERROR" 1>&2 59 exit 9;; 60esac

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tanat

2016/01/06 19:37

こちらの質問が他のユーザから「質問の範囲が広すぎる」という評価を受けています わからない点を明確にし、調査したこと・試したことと共に記入していただくと、回答が得られやすくなります。
guest

回答2

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/06 15:44

Takeda_Kazuhito

総合スコア369

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

otn

2016/01/06 17:27

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

2016/01/06 23:06

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

0

イメージ説明

投稿2016/01/06 14:18

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mimipachi0133

2016/01/06 14:34

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問