• ベストアンサー

batファイルの空白を判別

いつもお世話になっております。 今回、以下のような条件のbatファイルを流して、あるデータのバックアップのエクスポートと削除を行おうとしています。 1)今の日付、時間をファイル名として作成する (YYYYMMDDHHNNSS.dmpというような) 2)今日より2日前以降のファイルは削除する 2の方は出来たのですが、1がうまく出来ません。 日付はDATEで、時間はTIMEを使っています。 Set YYYY=%Date:~0,4% Set MM=%Date:~5,2% Set DD=%Date:~8,2% Set HH=%Time:~0,2% Set NN=%Time:~3,2% Set SS=%Time:~6,2% Set TODAY=%YYYY%%MM%%DD%%HH%%NN%%SS% しかしこの方法ですと、AM10時以前は" 9"というような、ゼロではなく空白が頭に入ってしまいます。 10時以降であれば、"12"や"23"と2桁ですが… 空白ではIFで判別するのが出来ないのではないかと思案中です。 うまく判別できるのであれば、 Set HH=0%Time:~1,2% として、頭に0入れを行いたいです。 どのようにして空白を判別するか、もしくは他に良い方法がありましたらよろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.1

set /A で、一旦数値にして10時以前か判別する。

LipTrek
質問者

お礼

そうですね! ほとんど忘れていました。 Set /A HH=%Time:~0,2% If %HH% LSS 10 Set HH=0%HH% で出来ました。 ありがとうございます。

その他の回答 (1)

  • catby
  • ベストアンサー率65% (50/76)
回答No.2

空白を判断するのではなく、10以上かを判断してみてはいかがでしょうか? 10未満だったら、頭に0を足すとった形です。 以下を実行したらうまくいきましたが、これでどうでしょうか? Set YYYY=%Date:~0,4% Set MM=%Date:~5,2% Set DD=%Date:~8,2% Set HH=%Time:~0,2% Set NN=%Time:~3,2% Set SS=%Time:~6,2% IF %HH% GEQ 10 GOTO SET_TODAY Set HH=0%Time:~1,1% :SET_TODAY Set TODAY=%YYYY%%MM%%DD%%HH%%NN%%SS% 環境変数の取得にこんな方法があったなんて知りませんでした。 以後参考にさせてもらいます!

LipTrek
質問者

お礼

おお!見方の違いでした。 私は「より小さい」を条件に LSS 10 と比べていましたが、 「以上」の GEQ 10 としてもいいんですね。 でも2日以降の日付取得でGotoをかなり頻繁に使ってしまいましたので、さらに混乱を招いてしまいそうです(笑) こんなもので良かったら、参考にして下さいね。 ありがとうございました。

関連するQ&A

  • バッチファイル 時間変数 短縮化

    バッチファイル 時間変数 短縮化 お世話になっております。 WindowsXP環境にて下記のバッチファイルがあります。 コード-------------------------------------------------------------------------------- set BAT_FILE=TIME.bat set LOG_DIR=D:\test set LOG_FILE=LOG.txt set LOG_FILENAME=%LOG_DIR%\%LOG_FILE% set yyyy=%date:~-10,2% set yy=%date:~-8,2% set mm=%date:~-5,2% set dd=%date:~-2,2% set HH=%TIME:~0,2% set MM2=%TIME:~3,2% set SS=%TIME:~6,2% echo %BAT_FILE% 処理日 = %yyyy%%yy%/%mm%/%dd% 第一処理開始時間= %HH%:%MM2%:%SS%>> %LOG_FILENAME% echo. >> %LOG_FILENAME% 処理A(プログラムは省略) set yyyy=%date:~-10,2% set yy=%date:~-8,2% set mm=%date:~-5,2% set dd=%date:~-2,2% set HH=%TIME:~0,2% set MM2=%TIME:~3,2% set SS=%TIME:~6,2% echo %BAT_FILE% 処理日 = %yyyy%%yy%/%mm%/%dd% 第一処理終了時間= %HH%:%MM2%:%SS%>> %LOG_FILENAME% echo. >> %LOG_FILENAME% set yyyy=%date:~-10,2% set yy=%date:~-8,2% set mm=%date:~-5,2% set dd=%date:~-2,2% set HH=%TIME:~0,2% set MM2=%TIME:~3,2% set SS=%TIME:~6,2% echo %BAT_FILE% 処理日 = %yyyy%%yy%/%mm%/%dd% 第二処理開始時間= %HH%:%MM2%:%SS%>> %LOG_FILENAME% echo. >> %LOG_FILENAME% 処理B(プログラムは省略) set yyyy=%date:~-10,2% set yy=%date:~-8,2% set mm=%date:~-5,2% set dd=%date:~-2,2% set HH=%TIME:~0,2% set MM2=%TIME:~3,2% set SS=%TIME:~6,2% echo %BAT_FILE% 処理日 = %yyyy%%yy%/%mm%/%dd% 第二処理終了時間= %HH%:%MM2%:%SS%>> %LOG_FILENAME% echo. >> %LOG_FILENAME% コード-------------------------------------------------------------------------------- 上記プログラム内の処理A及び、処理Bは比較的長い処理である為、その前後の処理時間帯を上記のように時間変数で取ってログに出力されています。 しかし、上記のように最新の処理時間帯をわざわざ何行もある各時間変数を宣言して取得するのはプログラム的に長くなってしまい、かつ醜いです。 上記方法以外に時間変数のスッキリとした取得方法は無いのでしょうか? ご存知の方がいれば、ご教授願いますでしょうか? 何卒宜しくお願い致します。

  • バッチファイル 2つのログに出力 短縮版

    お世話になっております。 WindowsXP環境にて下記のバッチファイルがあります。 コード-------------------------------------------------------------------------------- rem === 変数設定 =============================================================== rem --- 時間変数 --- set yyyy=%date:~-10,2% set yy=%date:~-8,2% set mm=%date:~-5,2% set dd=%date:~-2,2% set HH=%TIME:~0,2% set MM2=%TIME:~3,2% set SS=%TIME:~6,2% rem --- フォルダ変数 --- set LOG_DIR1=D:\test rem --- ファイル変数 --- set LOG_FILE1=LOG.txt set LOG_FILE2=LOG_ALL.txt set LOG_FILENAME1=%LOG_DIR1%\%LOG_FILE1% set LOG_FILENAME2=%LOG_DIR1%\%LOG_FILE2% set BAT_FILE1=test.bat rem コマンド拡張機能有効化 setlocal ENABLEEXTENSIONS rem === 変数設定 =============================================================== REM <開始処理>=============== call :TIME echo %BAT_FILE1% 処理日 = %yyyy%%yy%/%mm%/%dd% 処理開始時間= %HH%:%MM2%:%SS%>> %LOG_FILENAME1% echo. >> %LOG_FILENAME1% echo %BAT_FILE1% 処理日 = %yyyy%%yy%/%mm%/%dd% 処理開始時間= %HH%:%MM2%:%SS%>> %LOG_FILENAME2% echo. >> %LOG_FILENAME2% rem 現在の日付/時間を取得 :TIME set yyyy=%date:~-10,2% set yy=%date:~-8,2% set mm=%date:~-5,2% set dd=%date:~-2,2% set HH=%TIME:~0,2% set MM2=%TIME:~3,2% set SS=%TIME:~6,2% exit /b コード-------------------------------------------------------------------------------- 上記プログラムは日付を2つのログに出力していますが、 echo %BAT_FILE1% 処理日 = %yyyy%%yy%/%mm%/%dd% 処理開始時間= %HH%:%MM2%:%SS%>> %LOG_FILENAME1% echo. >> %LOG_FILENAME1% echo %BAT_FILE1% 処理日 = %yyyy%%yy%/%mm%/%dd% 処理開始時間= %HH%:%MM2%:%SS%>> %LOG_FILENAME2% echo. >> %LOG_FILENAME2% と二重になっている無駄なコードとなり、見栄えが良くないです。 これを1つのコードで2つのログファイルに出力可能な短縮プログラムは可能でしょうか? ご存知の方がいましたら、ご教授願いますでしょうか? 何卒宜しくお願い致します。

  • バッチファイルを使用したsql@plusの実行及びログ出力について

    バッチファイルを使用したsql@plusの実行及びログ出力について Windows Server 2003上で動作しているOracle10gのDBに対して Windows XP上に配置したバッチファイルをタスクで起動させ、 sql@plusを使用してデータを削除する処理を行いたいと考えています。 ---data_delete.bat--- @echo %date% %time% データ削除開始 >> log.txt sqlplus -S USER/PASS@TNSNAME @data_delete.sql >> log.txt @echo %date% %time% データ削除終了 >> log.txt ---data_delete.sql--- DELETE FROM TABLE WHERE FLG = 1; EXIT; data_delete.batを実行するとlog.txtが出力されます。 ---log.txt--- yyyy/mm/dd hh:nn:ss.xx データ削除開始 XXX行が削除されました。 yyyy/mm/dd hh:nn:ss.xx データ削除終了 この時、log.txtの内容を下記のように変更したいのですが、 その方法が分りません。 ---log.txt--- yyyy/mm/dd hh:nn:ss.xx データ削除開始 yyyy/mm/dd hh:nn:ss.xx データ削除終了 XXX行が削除されました。 できれば[削除件数 XXX 件]と表示させたかったのですが、 自分の調べた限りではできそうにないので、 フィードバックされる文字列をそのまま使う方向で進めています。 上記ログの出力方法ができるようでしたら、 その方法を教えて頂けると嬉しいです。 宜しくお願いします。

  • MS-DOSでの日付表示

    MS-DOSコマンドで、日付や時刻の%date% %time%ですと、 yyyy/mm/dd hh:mm:ssの表示になります。 バッチファイルを作成して、フォルダ名の頭に日付時刻をつけたいんですが、 yyyymmdd hhmmss の表示形式にする方法が分かりません。 よろしかったら教えて頂けませんでしょうか。

  • ファイル名を今日の日付、時刻で保存する

    マクロについて教えてください エクセル(2003?)でマクロを使って ファイルを保存するボタンをつくろうと思います。 「ファイル名を今の月-日-時-分で保存する」 という内容を書きたいと思います。 保存するところまではできるのですが、 今日の月-日-時-分を自動的にファイル名に入れる ところをどうしたらよいかわかりません。 Filename = Format(Date, "yyyy-mm-dd") と入れれば日付が入るのはわかったのですが、 時刻も入れたいです Filename = Format(Date,"yyyy-mm-dd",Time,"hh-mm-ss") こんな風に書いてみたのですが、うまく機能しませんでした ご存知の方、ご教授ください。

  • VBS サブルーチン化

    いつもお世話になっております。 WindowsXP環境にある下記のようなVBSがあります。 コード------------------------------------------------------------------ '********変数強制宣言******** Option Explicit '********フォルダ変数宣言************ Dim LOG_DIR '********ファイル変数宣言************ Dim LOG_FILE , LOG_FILENAME LOG_DIR = "D:\LOG" LOG_FILE = "CHECK_LOG.txt" LOG_FILENAME = LOG_DIR & "\" & LOG_FILE '********オブジェクト変数定義******** Dim FSO , LOG Set FSO = WScript.CreateObject("Scripting.FileSystemObject") Set LOG = FSO.OpenTextFile(LOG_FILENAME, 2, True) '********時間変数宣言******** Dim YYYY , MM1 , DD , HHMMSS , HH , MM2 , SS '********処理開始時間******** YYYY = Year(Date) MM1 = MONTH(Date) DD = DAY(Date) HH = Right("0" & Hour(Time), 2) MM2 = Right("0" & Minute(Time), 2) SS = Right("0" & Second(Time), 2) LOG.WriteLine("★★★************** 処理日 = " & YYYY & "/" & MM1 & "/" & DD & " 処理開始時間= " & HH & ":" & MM2 & ":" & SS & " ***************★★★") LOG.WriteBlankLines(1) 処理1(省略) '********処理終了時間******** YYYY = Year(Date) MM1 = MONTH(Date) DD = DAY(Date) HH = Right("0" & Hour(Time), 2) MM2 = Right("0" & Minute(Time), 2) SS = Right("0" & Second(Time), 2) LOG.WriteLine("★★★************** 処理日 = " & YYYY & "/" & MM1 & "/" & DD & " 処理終了時間= " & HH & ":" & MM2 & ":" & SS & " ***************★★★") LOG.WriteBlankLines(1) コード------------------------------------------------------------------ 上記VBSは処理1(省略)の前後に開始時間と終了時間をログに出力しています。 ただ、開始と終了時間を取得するのにログ出力直前に現在の【YYYY , MM1 , DD , HHMMSS , HH , MM2 , SS】を取得して ログを出力するのでコードが増えてしまい、スッキリしません。 もっとシンプルに、現在の時間・時刻等をVBSサブルーチンとかで(出来れば同じVBS内に)随時取得したいのですが なかなかコードが書けません。バッチファイルでは無く、VBSだけで実現したいです。 ご存知の方がいれば、ご教授願いませんでしょうか? 何卒、宜しくお願い致します。

  • 一番古い更新日付をチェックする

    OS:RedHatLinuxES3.0 下記についてご存知お方がいらっしゃいましたら教えてください。 [file.log]と言うファイルがあります。 このファイルは、5MBになると、5MBに達した時の、年月日時分秒を付けたファイル名[file-YYYY_MM_DD-hh_mm_ss.log]になります。 また、このファイルは5世代管理とするので、[file.log]が一つ、残り4つは[file-YYYY_MM_DD-hh_mm_ss.log]となります。 そこで、質問ですが、この5つのファイルの中で一番古い更新日付を持つファイルのみを他のディレクトリにコピーしようと思っています。 つまり、[file-YYYY_MM_DD-hh_mm_ss.log]ファイル名の一番古い日付を持つファイルを選択したいのですが、いい方法がありましたら教えて下さい。

  • ACCESS 日付型でEXCEL出力 

    日付/時刻型の項目に yyyy/mm/dd hh:mm:ss(2007/01/11 12:10:33)の形で入っているのですが、 以下のような処理でEXCELにエクスポートすると・・・ strSQL = "SELECT Time AS 日時 FROM T_TIME" Set qryBuf = CurrentDb.CreateQueryDef(Q_Time, strSQL) DoCmd.TransferSpreadsheet acExport, , Q_Time, txtFileName, True EXCELの表示は「2007/01/11」と表示されてしまいます。 表示形式を変更すれば「2007/01/11 12:10:33」で表示されるのですが その手間は省きたいと思っています。 一発で「yyyy/mm/dd hh:mm:ss」の形式で出力する方法は無いでしょうか?

  • SQL*Loader  フォーマット変換について

    SQL*Loaderの制御ファイル内で、 以下のような日付データを変換するにはどうしたらよいでしょうか? ・2010-12-06 00:00:00.000 以前は'2010-12-06 00:00:00'の形式だったので "to_char(to_date(:DENPYO_DATE,'YYYY-MM-DD HH24:MI:SS'),'YYYYMMDD')" のようにして変換が可能だったのですが、仕様変更がありましてこれに対応しなければいけなくなりました。 ちなみに安易な考えで以下のようにしたのですがさすがにだめでした... "to_char(to_date(:DENPYO_DATE,'YYYY-MM-DD HH24:MI:SS.000'),'YYYYMMDD')" 方法をご存知の方がいれば是非、ご教示いただきたく存じます。 よろしくお願いいたします。

  • [vbScript]ファイルの日付

    任意のファイルの作成日付を取得するまでは下記の記述でできたのですが、「YYYY/MM/DD hh:mm:ss」で取得します。 --------------------------- Set fso = CreateObject("Scripting.FileSystemObject") Set src = fso.Getfile(ckFile) WScript.Echo src.DateCreated --------------------------- YYYYMMDD形式で取得したい場合は、どうすればよいでしょうか?

専門家に質問してみよう