Marumaru's TinyPlaza
(2011.06.14)(tips)DOSバッチで古いバックアップファイルを削除する方法
覚書
データをバックアップするDOSコマンドのバッチファイルを作って毎週流しています。
データはYYYYMMDDの名前のフォルダに格納されるんですが、しばらく放っておくと日付のフォルダがいっぱい溜まってしまいHDDを圧迫するので、気づいた時に古いのを消していたのですが、面倒なので古いバックアップフォルダを消す処理をバッチの追加しました。
- カレントディレクトリのYYYYMMDD形式(20??????)のフォルダを新しい方から2個残して消します。
- 更新日ではなく、フォルダ名順で見ています。
- 残す数はLEAVE_DIR_NUMBERで設定。
@echo off
setlocal enabledelayedexpansion
set /a LEAVE_DIR_NUMBER=2
set /a cnt=0
for /f %%A in ('dir 20?????? /b /o-n') do (
if !cnt! GEQ %LEAVE_DIR_NUMBER% (
echo "削除するフォルダ>>" %%A
rd %%A /s/q
)
set /a cnt+=1
)
これで、バックアップバッチの機能が
- 古いバックアップフォルダを削除する
- 指定したファイルを日付のフォルダコピーする
- コピーしたファイルをログに書き出す
- FTPからサイトのデータをダウンロードする
と言う結構高機能なものになって一人で悦に入ってます。 ファイル操作するならWSHを使った方が楽なんですけど、レガシーなDOSバッチファイルでするところに格好良さを感じてしまう懐古厨なのでした。
実際、DOSのバッチってシンプルだから簡単な操作をするには便利なんですよね。慣れないと可読性が悪いところはあるけれど。
(2011.06.14)(tips)WSHによるプロセスの二重起動防止スクリプト
覚書用
スケジューラソフトを二重起動してしまって予定を上書きして困る事が多かった為、二重起動防止のスクリプトをWHSで作ってみました。
WSHってタスクマネージャの起動プロセス一覧なんて拾えるんだ……。
-
特定のプロセスが未起動なら指定のプログラムを実行するスクリプト(二重起動防止)
- 貼りつけて、拡張子をvbsで実行。(起動するプログラムと同じフォルダに置くのが望ましい)
- 起動プログラムのショート代わりにこのスクリプトを使うと便利かもしれない。
Option Explicit
On Error Resume Next
Const ZERO = 0
Const ERR_MSG_ALREADY_STARTED = "このアプリケーションは既に起動されています。"
Dim objProcessList
Dim objProcess
Dim objWshShell
Dim strProcessName
Dim strExecuteCmd
Dim isAlreadyStarted
'起動状態を確認したいプロセス名
strProcessName = "(タスクマネージャに表示されるプロセス名)"
'プロセスが未起動状態の際に実行するファイル(フルパス)
strExecuteCmd = "(起動するファイル名)"
isAlreadyStarted = false
Set objWshShell = WScript.CreateObject("WScript.Shell")
Set objProcessList = GetObject("winmgmts:").InstancesOf("win32_process")
For Each objProcess In objProcessList
If StrComp(LCase(objProcess.Name),strProcessName,vbTextCompare) = ZERO Then
If Err.Number = ZERO Then
isAlreadyStarted = true
Exit For
Else
WScript.Echo Err.Description
End If
End If
Next
If isAlreadyStarted Then
WScript.Echo ERR_MSG_ALREADY_STARTED
Else
objWshShell.Run strExecuteCmd
End If
Set objProcessList = Nothing
Set objWshShell = Nothing