命名って難しい

変数、関数、クラスなどなど実装より命名に毎回悩むタイプの人間による技術についてのメモ。

タスクスケジューラのタスクの名称変更をするバッチ

概要

タスクスケジューラのタスク名変えられないかゆい所に手が届くと素敵だと思いませんか。

実際はエクスポートして新しい名前でインポートして古い方を削除してます。

実装

ソースコード

@echo off

setlocal
set tempTask=%temp%\tmptask
set oldName=%1
set newName=%2

rem 引数チェック
set result=エラー: 引数不正[空文字]
if "%oldName%" == "" ( goto :EchoResult )
if "%newName%" == "" ( goto :EchoResult )

if %oldName% == %newName% (
  set result=エラー: 引数不正[変更前後が同一名称]
  goto :EchoResult
)

rem クエリによる出力
schtasks /Query /XML /TN %oldName% > %tempTask%
if not %errorlevel% == 0 (
  set result=エラー: タスクのXMLエクスポート失敗
  goto :EchoResult
)

rem 新規タスクのインポート
schtasks /Create /XML %tempTask% /TN %newName%
if not %errorlevel% == 0 (
  set result=エラー: タスクのXMLインポート失敗
  goto :EchoResult
)

rem 命名変更前のタスクの削除
schtasks /Delete /F /TN %oldName%
if not %errorlevel% == 0 (
  set result=エラー: 名称変更前のタスクの削除失敗
  goto :EchoResult
)

set result=タスクの名称変更完了

:EchoResult
echo %result%

endlocal
exit

使い方(RenameTask.batというファイルで作った前提)

RenameTask.bat  *変更対象のタスク名* *変更後のタスク名*
  • 変更対象のタスク名

    • 変更対象のタスク名。
    • タスクスケジューラの直下で作ればそのままの名前。
    • フォルダを作った中のタスクの場合はフォルダ名も含めて指定すること。
    • 例:Automations\すこし自動化するタスク
  • 変更後のタスク名

    • 変更後のタスク名。
    • 変更対象のタスク名と同様、フォルダを考慮した指定をしてください。
    • 例:Automations\すごく自動化するタスク

参考(technet)

タスクをエクスポートする

タスクをインポートする

タスクを削除する

適当感想

こういう作ったバッチのコマンドライン引数とかを説明する時の定石っていうかうまい書き方ってあるのかなぁ。
ちょっとスタイル出来上がってないので既存のベストプラクティスが欲しい。

以上!