kurukuru-papaのブログ

主に、ソフトウェア開発に関連したメモを書き溜めたいと思います。

Windowsバッチファイルのひな形を生成するジェネレーターを作ってみた

よく、CSSジェネレーターとか、HTMLジェネレーターとか、ボタンジェネレーターとか、アイコンジェネレーターのページを見かけることがあります。特に、アイコンジェネレーターは、急にアイコンが欲しくなった事があり、大変重宝した覚えがあります。インストールレスで手軽に使えることが嬉しかったですね。

そんなジェネレーターを自分で作ってみたいと思いました。簡単なところから、Windowsのバッチファイルのひな形を生成するようなジェネレーターを題材にしました。個人的に、使い捨てになるようなバッチファイルを書く機会が時々あり、ひな形があればいいのにと思っていました。

作成したジェネレーター

作成したジェネレーターは、次のURLで公開しました。名前は「Windowsバッチファイルジェネレーター」です。そのまんまです。

現状では機能が少ないですが、今後、必要に応じて、作り込んで行けばいいかなと思います。コメント欄にご要望頂ければ、対応したいとも考えています。

作成方法

使用した技術は、HTML, CSS, JavaScript, jQuery, Windowsバッチコマンドです。特に難しいことはなく、作る上でのポイントも特になく、淡々と作る感じでした。以下、ざっくりとした作成手順です。

1.Twitter Bootstrapひな形準備
必須ではありませんが、多少見た目を良くするために、Twitter Bootstrapを使いました。次のサイトからダウンロードしました。HTMLのひな形には、「Getting Twitter Bootstrap」ページで取得できる「Starter template」(starter-template.html)を使いました。

ダウンロードしたファイルを、自分の環境に配置して、次のような構成にしました。

winbatchgen/
  ├── assets/
  │   ├── css/
  │   │   ├── bootstrap-responsive.css
  │   │   ├── bootstrap-responsive.min.css
  │   │   ├── bootstrap.css
  │   │   └── bootstrap.min.css
  │   ├── img/
  │   │   ├── glyphicons-halflings.png
  │   │   └── glyphicons-halflings-white.png
  │   └── js/
  │       ├── bootstrap.js
  │       ├── bootstrap.min.js
  │       └── win_batch_gen.js ※とりあえず空ファイルを作成
  └── www/
      └── win_batch_gen.html ※starter-template.htmlをリネーム

2.画面の見た目を作成
上記1で作成したひな形(win_batch_gen.html)に、必要な部品をコーディングしました。Windowsバッチファイルの生成内容を切り替えるための、テキストボックスやチェックボックス、生成結果のWindowsバッチファイルを表示するテキストエリアです。さらに、win_batch_gen.jsを読み込むための記述を追加しました。

3.画面の動作を作成
win_batch_gen.jsに処理を作成しました。難しいことはありません。Windowsバッチファイルとして扱われることになる、文字列を書き込んでいるだけです。

以上で完成です。

もし、プログラムを見たい場合は、Windowsバッチファイルジェネレーターを表示し、ブラウザ機能でソースを表示して頂ければ、全プログラムを見ることが出来ます。

動作確認環境

  • OS:Mac OS X 10.7.4 Lion
  • ブラウザ:Safari 6.0
  • 生成したバッチファイル動作確認環境:Windows 7 64bit

日時を文字列で取得する

バッチファイルを書いていて、ファイル名などにタイムスタンプを入れたくなる事があります。そんなときのために、日付(YYYYMMDD)、時刻(HHMMSS)、タイムスタンプ(YYYYMMDD-HHMMSS)の取得方法をメモしておきます。

set datestr=%DATE:/=%
set timestrtmp=%TIME: =0%
set timestr=%timestrtmp:~0,2%%timestrtmp:~3,2%%timestrtmp:~6,2%
set timestamp=%datestr%-%timestr%
echo %timestamp%

TrueCryptでファイル変更できない時の対処法

TrueCryptを使用していてちょっと問題が発生しました。今までTrueCryptを使用していたユーザがいたのですが、今回、別のユーザでファイルにアクセスすると、ファイルを変更することができませんでした。(ただし、フォルダやファイルの追加は出来ました。)

原因

Windows機能によるファイルやフォルダへの権限設定の問題のようです。ファイルを作成した時のユーザと、今回アクセスしたユーザが異なるので、ファイル変更する権限がありませんでした。

対策

ボリュームをマウントして割り当てられたディクスのプロパティダイアログを開き、セキュリティタブから、今回操作するユーザをフルコントロール権限で追加すると、ファイル変更ができるようになりました。

動作環境

  • Windows 7 Home Edition 64bit
  • TrueCrypt Version 7.1

Windowsにおけるよく使うネットワーク系コマンド

Windowsを使っていてネットワーク絡みに問題があったときに、よく使うコマンドのメモ。

Ping

ping [-t] target_name

"-t"をつけると、Ctrl+Cを押すまで処理を繰り返す。

Tracert

tracert target_name

tracertでネットワークの経路を調査する − @IT
http://www.atmarkit.co.jp/fwin2k/win2ktips/290tracert/tracert.html

traceroute - ネットワークの経路を調査する
http://www.atmarkit.co.jp/fnetwork/netcom/traceroute/traceroute.html

プリンタ設定でスプール使用時は印刷順序が順不同となる

一度に数百件のスプールをプリンタに送るようなソフトウェアを使っていました。何度か動かしていて気づいたのですが、スプールに送っているはずの印刷順序と、実際に印刷される順序が時々異なるようです。原因は、Windowsの印刷ドキュメントのスプール機能にありました。スプール機能では印刷順序が保証されないようです。
スプール機能を使わずに、直接プリンタに印刷データを送るようにすると、ソフトウェアで出力した順序で印刷されるようになりました。

Windowsのインストーラー(*.msi)を、インストールなしで、ファイル展開する方法

Windowsの標準コマンドでできました。

start /wait msiexec /a setup.msi targetdir="\\server\dir" /qn

setup.msi:ファイル展開対象のインストーラー
\\server\dir:ファイル展開先ディレクトリ。ネットワーク上のディレクトリのみ指定できるようです。

ネタ元

リモート接続でアカウントロック発生

Windows XP SP3同士のPCで、リモート接続を使用としたら、アカウントロック発生し、ロック解除しても、数秒で再度ロックされてしまう現象が発生しました。
よくわからない現象でしたが、解決したのでメモしておきます。

現象

  • Windows XP SP3のPCから、別のWindows XP SP3のPCへリモート接続を試みました。リモート接続される側のPCは、リモート接続設定済みです。
  • リモート接続時、IDとパスワードの入力を求められ、何度か失敗しましたが、正常に接続し、リモート接続できました。
  • リモート接続を切断し、再度、リモート接続しようとすると、アカウントがロックされている旨、エラー表示され、リモート接続できなくなっていました。

原因

原因1:操作の中で、IDとパスワード入力時に何度か失敗しましたが、このとき、不正なパスワードが、リモート接続元のWindowsに登録されてしまったようです。

原因2:よくわからないですが、Windowsがバックグラウンドで、不正に登録されたパスワードを使用して、リモート接続先へのアクセスを頻繁に行っていたようです。不正なパスワードなので認証失敗になります。リモート接続先では認証失敗回数を数えていて、事前に設定された失敗回数を超えたため、該当アカウントをロック状態にさせていました。

対応

対応1:リモート接続先のWindowsで、該当アカウントのロックを解除しました。管理ツール>コンピュータの管理から、該当アカウントの設定画面を開き、ロック設定のチェックを外しました。

対応2:ァイル名を指定して実行から、「control keymgr.dll」を実行し、間違って登録された、IDとパスワードのログイン情報を削除しました。

以上で解決しました。