バッチでn日前を求めるには

こちらのページに「バッチで前日の日付を求める」というものがあります。

じゃくさんのページ

じゃくさんのページにも「n日前の日付を求める」というものも紹介されていますが、

1つのバッチで行いたかったので、「バッチで前日の日付を求める」を加工しました。

処理の中で「バッチで前日の日付を求める」を指定回数だけリピートしています。

引数1に何日前か、引数2に日付を入れることで、指定日からn日前が求められます。

リピートしているので1000日や10000日とすると処理に時間がかかりますが、

30日くらいであればそんなにストレスなく、応答があるかと思います。

−−−−−−ここから−−−−−−

@echo off
REM −−−−−−−−−−−−−−−
REM 日付のn日前を求める
REM 引数1・・・n(数値)
REM 引数1がないときは1(前日)
REM 引数2・・・YYYY/MM/DD 形式
REM 引数2がないときは本日とする。
REM −−−−−−−−−−−−−−−

if "%1"=="" (
set n=1
) else (
set n=%1
)

if "%2"=="" (
for /F "tokens=1" %%a in ('date /t') do set orgdate=%%a
) else (
set orgdate=%2
)

:年月日の分割
set yy=%orgdate:~0,4%
set mm=%orgdate:~5,2%
set dd=%orgdate:~8,2%
set count=0

:Repeat

:月日の数値化(8進数対策)
set /a mm=1%mm%-100
set /a dd=1%dd%-100

set /a dd=%dd%-1

if %dd% NEQ 0 goto end

:月跨り処理
set /a mm=%mm%-1
if %mm% EQU 0 set mm=12&&set /a yy=%yy%-1

set /a dd=%dd%+31
if "%mm%"=="2" set /a dd=%dd%-3
if "%mm%"=="4" set /a dd=%dd%-1
if "%mm%"=="6" set /a dd=%dd%-1
if "%mm%"=="9" set /a dd=%dd%-1
if "%mm%"=="11" set /a dd=%dd%-1

:閏年処理
:4で割り切れるか?
set /a u=%yy% %% 4
if not %u%==0 goto end
:100で割り切れて、400で割り切れないか?
set /a u=%yy% %% 400
set /a v=%yy% %% 100
if %v%==0 if not %u%==0 goto end
:2月か?
if %mm% EQU 2 set /a dd=%dd%+1

:END
set mm=0%mm%
set mm=%mm:~-2%

set dd=0%dd%
set dd=%dd:~-2%
set /a count=%count%+1
set DT=%yy%/%mm%/%dd%

IF %count% NEQ %n% goto Repeat

echo %n%日前は%DT%です。

:EXIT

−−−−−−ここまで−−−−−−

サービスやプロセスを監視する@


「net start」で開始中を表示、「find」で監視するサービスがあるか検索する

「net start」でなくても「tasklist /svc」や「sc query サービス名」でも同じ

「sc ・・・・」は「RUNNING」を検索する。

これらのバッチをタスクから定期的に実行してあげればOK

−−−−ここから−−−−
@echo off
set service_name=監視したいサービス名

net start | find /i "%service_name%"
if %errorlevel%==0 (
開始しているときのコマンド
) Else (
停止しているときのコマンド
サービスを開始したり、メールを送信したり・・・
)

:End

exit

−−−−ここまで−−−−

サービスやプロセスを監視するA

「tasklist」で実行中のプロセスを表示、「find」で監視するプロセスがあるか検索する

−−−−ここから−−−−

@echo off
set process_name=監視したいプロセス名

tasklist | find /i "%process_name%"
if %errorlevel%==0 (
実行しているときのコマンド
) Else (
停止しているときのコマンド
プログラムを開始したり、メールを送信したり・・・
)

:End

exit

−−−−ここまで−−−−

サービスやプロセスを監視するB

@、Aを一緒にしたようなもの

事前に監視対象サービス一覧(service_list.txt、process_list.txt)を作成する必要あり。
リストにサービス名、プロセス名を記述する。

−−−−ここから−−−−

@echo off
setlocal enabledelayedexpansion

:Start

IF Not Exist service_list.txt goto Process_check
:Service_check
for /f "delims=, tokens=*" %%A in (service_list.txt) do (
net start | find /I "%%A"
if not !errorlevel!==0 停止しているときのコマンド
)

:Process_check
if not exist process_list.txt goto END
for /f "delims=, tokens=*" %%A in (process_list.txt) do (
tasklist | find /i "%%A"
if not !errorlevel!==0 停止しているときのコマンド
)

endlocal

:END

exit

−−−−ここまで−−−−

コマンドでメールを送信するには


コマンドラインからメールを送信するのに「smail」というツールをよく使っています。

テキストファイルの内容を本文にできたり、複数のファイルを添付できたり、送信先を複数指定できるのはもちろん、CCやBCCも指定できます。

smailの説明、ダウンロードはこちらのサイトへ

日付をファイル名につけるには


まず、日付を取得します。

以下の@、A、Bどのやり方でも「DT」にyyyymmddの形でセットされます。

@set DT=%date:~0,4%%date:~5,2%%date:~8,2%

Aset DT=%DATE:/=%

Bfor /f "tokens=1-3 delims=/" %a in ('date /t') do set DT=%a%b%c

注意:Aをバッチ内で使用するには%%aと%を2つ付ける必要があります。


年、月、日をばらばらにしたいのであれば、

set yyyy=%date:~0,4%

set mm=%date:~5,2%

set dd=%date:~8,2%

としてあげれば、それぞれ「yyyy」に年、「mm」に月、「dd」に日がセットされます。


コピーや移動先のファイル名を「%yyyy%-%mm%-%dd%元ファイル名」としてあげれば、

ファイル名の先頭にハイフンで区切った形で年月日が追加されます。


copy test.txt %yyyy%-%mm%-%dd%test.txt

とすれば「test.txt」を年月日入りでコピーできます。

ネットワーク設定を切り替える@

IPアドレスを変更するには

netsh interface ip set address "ローカル エリア接続" static address mask gateway 1

とする。

IPアドレス・・・192.168.1.101
サブネットマスク・・・255.255.255.0
デフォルト ゲートウェイ・・・192.168.1.254
に変更するには

netsh interface ip set address "ローカル エリア接続" static 192.168.1.101 255.255.255.0 192.168.1.254 1

とすれば良い。

IPアドレスとMACアドレスを調べる

やっていることは簡単でarpのキャッシュをクリアし、ネットワーク内のIPアドレスにひたすらPINGを実行。
PING実行後、arpキャッシュからtypeが「dynamic」のものをファイルに書き込むというもの。

−−−−−−ここから−−−−−−
@echo off

arp -d *

for /l %%a in (0,1,254) do (ping -w 1 -n 1 10.1.1.%%a)

arp -a | find "10.1.1." | find "dynamic" > mac-address.txt

exit
−−−−−−ここまで−−−−−−

「10.1.1.」を環境に合わせて書き換える

ネットワーク設定を切り替えるA

DNS、WINSを切り替えるには

まずは設定を削除する。

netsh interface ip delete dns "ローカル エリア接続" all
netsh interface ip delete wins "ローカル エリア接続" all

次に、新しいDNS、WINSのアドレスを登録する。

netsh interface ip set dns "ローカル エリア接続" static DNS@
netsh interface ip add dns "ローカル エリア接続" static DNSA

netsh interface ip set wins "ローカル エリア接続" static WINS@
netsh interface ip add wins "ローカル エリア接続" static WINSA

プライマリを登録する場合は「set」、セカンダリを登録する場合は「add」を使用する。

プライマリ・・・10.1.1.11
セカンダリ・・・10.1.1.12
で登録するには以下のようにする。

netsh interface ip set dns "ローカル エリア接続" static 10.1.1.11
netsh interface ip add dns "ローカル エリア接続" static 10.1.1.12

netsh interface ip set wins "ローカル エリア接続" static 10.1.1.11
netsh interface ip add wins "ローカル エリア接続" static 10.1.1.12
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。