•   Login
  •  
  •   Rss
  •   Rss2.0
  •   ATOM1.0
  •   Admin
  •   Top
  •   Home

どうやって、VBAを学んだか?




この人の動画を視聴して、私もこのブログに書くヒントを得たので残しておこうと思います。
私の場合、仕事柄と言うのもありますが、そもそも、Excel VBAは入社して5年後くらいに会社の研修で学んだのが最初です。
当時私はロータス1-2-3(平成生まれには知らん罠)を使いこなしていて、関数を使いまくっていたのですがマクロはちんぷんかんで組めなかったんです。
そこで、会社から当時大型汎用機を学んでいる社員を、時代がこれから蔵鯖クラサバの時代になると読んで強制的に受けさせられたんです。
当時、研修で2週間?くらい学びましたがサッパリわかりませんでした(苦笑)


それから更に2年後に担当異動で、クラサバの世界へ放り込まれたんですね。
汎用機でのデータベースは理解していても、クライアントコンピューティングのデータベースはまるっきり違っていたので右往左往したんです。
それで、私に与えられたミッションとして、OracleのデータベースサーバーからAccessへの取込を定期的に行うツールを作る。
と言う事を始めました。
Excel(表計算)ソフトではなく、Access(データベース)ソフトのVBAを本気で学んだんですよ。
と言っても、誰も教えてくれる人はおらず、当時はどうしていたかというと参考書やYahoo検索で必死に調べまして、ODBCという素晴らしい翻訳機を知りまして、それを私のマシンに入れて手動でコピペしたのが始まりでした。


しかし、だんだんそのデータ量が多くなってきて手作業するのが面倒というか、もしも違ったものになったら大変な事になる!と言う事で、汎用機で培った自動化ツールを作成したのがAccess VBAの始まりです。
そこでも、検索しまくって情報を仕入れてとにかくトライ&エラーで何度も何度もやってはやり直して、デバッグ作業を繰り返した結果、半年くらいで完成しました。
(仕事の合間に作っていたのでけっこうな時間がかかったんですよ。)
本当に、DAOとADOの違いに苦労しましたよ。


そして、データベース担当から外れて今度は(プログラムの)ソース管理人に着任。
これがねぇ、当時LANの速度が10Mbpsしかなくて、そこに数百本のソースが一気に納品されてきて、ソース管理サーバーに依頼書とにらめっこしながらコピペしていたんですよ(笑)
もうスピードが遅くて遅くて、当時の残業時間が過労死ラインを軽く超えるくらいを年中やっていて、コピペがなっかなか終わらなかったんですよ。
当然貸出もあったり、開発が二重三重四重と併走し始めて、さすがに脳がパンクしそうになって初めて上司に訴えたんですよ。


「もう、頭が変になる。だから、1人では出来ないから要員を増やしてくれ!」
と。そして、紆余曲折があって2人来てくれて、私は温めていた自動化ツールを始めたんですよ。
それが、ExcelとAccessによる組み合わせでVBAを組んだんですね。
もちろん、やりたいことを検索してトライ&エラーでやって、これで「ある程度」は時短に繋がったんですよ。
そして、依頼書の管理簿も自動付与するようにして、申請する側も簡単に出来るようにしたんです。
これを3年くらい続けて、「ライブラリ管理総合ツール」というメニューを作ったんです。
今では多分使われていないと思いますが、今もその担当は存在していて5年前に別担当で必要を感じてそのツールをメールで送ってもらうよう頼んだところ、現存していた上に改良工夫されていてうれしかったモノです。
(とっくに違うものに置き換わっているものと考えていたから。)


こうして、私はVBAを学びました。
そして、今ではExcel+Access+Outlookと言う複合技も使っています。
まぁ、Outlookはメールを作って送信待ち状態なのですが。
そうそう、全社員にメールと初期パスワードを送るのに1人ずつ作成するなんて非効率だから、Excelにメールアドレスと社員名と初期パスワードを書いておけば、ボタン一つで一気に全社員分を送信することだって可能です。(メールサーバに負担をかけない工夫もしております。)
今ではそのツールは使われなくなりましたが、当時は誰かが思い出したかのように、私を指名して「あのツール、あったよなぁ。」と言ってきます(笑)


とにかく、私がVBAを使いこなすのは、
・いかに簡単で時短(作業の効率化)
・そして間違わずに確実に(正確性)
・出来る事(自動化)
なんですね。
ルーチンワークとなっていることは、極力自動化してしまって、さっさと終わらせることなのです。
これが、なかなか会社に評価されないのが悲しいところなんですけどね(涙)


この動画のように、分からないところはVBA記録ボタンを使うと良いです。
これだけでも、かなり進歩しますから。
そこから深化しようとするとなると、もう今ではGoogle先生やアヒル先生で検索するといっぱいでてきます。
やりたいことをボンヤリと検索窓に入れてやると、答えがひょこっと現れてきます。
それをトライ&エラーでやり続けるだけです。
出したい結果が分かれば、自ずと道は開けます。
例え汚いソースコードであったとしても(笑)


そう言えば、PowerPointとWordだけはVBAで組んだことないですわ。。。
あんまり使うことがないのでねぇ。
奥が深いですよ。VBAは。
APIを使いこなすと、最早無限大と言っても良いくらいです。


記事を評価してください(★1つ=悪い、★5つ=良い)
この記事の平均評価: (9人)
Posted by いぐぅ 06:00 | ソフトウェア::プログラミング | comments (0) | trackback (0)
ローコード、ノーコード

キントーンと言うサイボウズのCMを見て、「これも時代の流れか。」と思いました。
クラウドは、今一つ信用していない私ですが、この表計算(EXCEL)に喧嘩を売り始めたキントーンは、かなり有能なのかな?と思いました。


最近、IT業界では「ローコード」「ノーコード」開発が流行っているようですが、断然コード派の私はかなりの強敵です(笑)
あ、でもホームページ作成は、作成当時から「ノーコード」に近いですね(笑)
WYSIWYGという手法で、PowerPointのように構成して文章書いたら、勝手にhtmlが出来上がりました。
私が使っているのは、ホームページビルダー19ですけどね。


「ローコード」にしても「ノーコード」にしても、デバッグはどうするんだろう?と思います。
簡単に解決出来れば良いのですが、コードに問題が無く処理する側にバグが潜んでいたら永遠に解決出来ないような気がします。
一見、開発現場は簡単に出来る。ように思えますが、システム構築する時はきちんと内容を把握していないと、とんでもない結末を迎えてしまうんじゃないかと思います。

何事も試してみることは必要ですが、これがWebで反映出来るのならどんどん作っちゃうんだけどなぁ。
アイデアは無限大です(^^)


記事を評価してください(★1つ=悪い、★5つ=良い)
この記事の平均評価: (18人)
Posted by いぐぅ 06:00 | ソフトウェア::プログラミング | comments (0) | trackback (0)
Windowsコマンド start

私は、Windowsを起動した時に様々なプログラムを自動起動するため、バッチプログラムを組んでいます。
職場でもタスクマネージャーで定期的に実行してチェックをしています。
(Windows 10では、設定-アプリ-スタートアップで簡易ながらもシンプルに自動起動のオンオフが出来ます。)


その時、いつも最後にファイルやアプリを起動させるのですが、そうするとコマンドプロンプト画面がずっと残ったままの情けない結果になります(笑)
これを一体どうやったらスマートに出来るのだろう。と考えたのですがコマンドが分からなかったので、アヒル先生に聞いたら答えが返ってきました。

「start コマンドを使え・・・」

何それ?
物凄い直球やん。
と思って、一例を挙げてみます。

【変更前】
%USERPROFILE%\AppData\Local\Vivaldi\Application\vivaldi.exe -disk-cache-dir="Z:\temp"


これは、私のメインブラウザVivaldiを起動するコマンドです。
キャッシュディスクをこれまでCドライブにしていたのですが、RAMディスクドライブのZドライブ指定にしています。
しかし、このままだと、コマンドプロンプトが立ち上がりっぱなしなので、次のようにすると綺麗に閉じてくれます。

【変更後】
start "" %USERPROFILE%\AppData\Local\Vivaldi\Application\vivaldi.exe -disk-cache-dir="Z:\temp
"

至ってシンプルで、「なんじゃそりゃ?」状態です。
start /? と入力すると、長々と説明があって奥深いです。


じゃぁ、もう少し奥深いところを掘り下げてみますか。
【変更前】
C:\bat\netwrok_drive.vbs
 ↓ ↓ ↓ ↓
Const olFolderInbox = 6
Const olMinimized = 1
Dim olkApp
Dim fldInbox
Dim expInbox
Dim objWShell

WScript.sleep 1000
Set olkApp = CreateObject("Outlook.Application")
If olkApp.Explorers.Count = 0 Then
Set fldInbox = olkApp.Session.GetDefaultFolder(olFolderInbox)
fldInbox.Display
Set expInbox = fldInbox.GetExplorer()
expInbox.WindowState = olMinimized
End If
Set objWShell = CreateObject("WScript.Shell")
Set objWShell = Nothing


【変更後】
start "" /min "C:\Program Files (x86)\Microsoft Office\root\Office16\OUTLOOK.EXE"



もともと、このプログラムはネットワークドライブ接続がおかしかったところから始まり、ついでにVBScriptでOutlookを自動起動するけど最小化にしちゃえ。
から作りました。そんなコマンドも、たった1行で終わりです(笑)
わざわざ、変数宣言したり時間差を設けたりしたのですが、そんなのは不要になりました。
こうすることで、コマンドプロンプトが綺麗に終了してくれます。


startコマンドの活用は無限大です。
是非、試してみてください。


記事を評価してください(★1つ=悪い、★5つ=良い)
この記事の平均評価: (13人)
Posted by いぐぅ 06:00 | ソフトウェア::プログラミング | comments (0) | trackback (0)
スマホの入力画面で数値パッドを出力させる方法
参考:HOME HTML5 フォーム 数値の入力欄を作る。
当方、Webによるバイクメンテ管理をしているのですが、スマホで入力する時テキスト入力パッドになるのが面倒と感じていました。
何とかならないかなぁ。と思っていたのですが、時々ドコモのWebアンケートに応じる時、数値入力画面(年齢など)でパッドが数値パッドに切り替わるんですね。
これはもしかして!?と思ってググってみたら、案の定ありました。
html5から対応していると言う事で、最近のWebブラウザは対応済みのようですので早速ソースを追記してみました。


距離 <input size="7" istyle="4" type="number" name="B_run" step="0.01">km



赤下線部がポイントです。小数点入力する時は、stepを入れないとダメのようです。
【html5】 input type=”number” で小数を入力できるようにする

メンテナンス画面(数値表示)



これで、小数点以下も入力することが出来ました。
このままでも良いのですが、過去に入力した数字が出るのが鬱陶しいのも困りものです。
そこで、この様に変えてみました。


距離 <input size="7" istyle="4" type="number" name="B_run" step="0.01" autocomplete="off">km



参考:HOME HTML5 フォーム 数値の入力欄を作る


ついでなので、日付の入力フォームも、こうすることにしました。


日付 <input size="10" type="date" maxlength="10" name="B_day" istyle="4" value="<?php echo $days; ?>">



これをすることにより、後続のvalueの値が無効になりますがこの際無視することにしました。
こんな感じで出ます。

メンテナンス画面(日付表示)

割としっくりきました。
このツールも日々進化しているなぁ。
ちゃんと履歴を残していないのがミソですが(^^ゞ

記事を評価してください(★1つ=悪い、★5つ=良い)
この記事の平均評価: (3人)
Posted by いぐぅ 05:00 | ソフトウェア::プログラミング | comments (0) | trackback (0)
Gmailによるメール自動送信スクリプト

Outlookもない…
Mailアプリも面倒…
Gmailアカウントはある…
人向け用スクリプト。

' ***********************************************************
' 使用するパラメータ
' ***********************************************************
strFrom = "わたしです <***@gmail.com>"

strTo = "あなたです <***@hotmail.com>"

strServer = "smtp.gmail.com"

nPort = 465
strUser = "gmailアカウント"
strPass = "gmailアカウントのパスワード"

' ***********************************************************
' オブジェクト
' ***********************************************************
Set Cdo = WScript.CreateObject("CDO.Message")

' ***********************************************************
' 自分のアドレスと宛先
' ***********************************************************
Cdo.From = strFrom
Cdo.To = strTo

' ***********************************************************
' 件名と本文
' ***********************************************************
Cdo.Subject = "件名の文字列 / " & Now()
Cdo.Textbody = "テキスト本文" & vbCrLf & "改行は vbCrLf"

' ***********************************************************
' CC BCC HTMLメール( CC BCC はどちらか片方 )
' ※ 両方指定すると CC
' ***********************************************************
'Cdo.Cc = "ユーザ名@yahoo.co.jp,ユーザ名@hotmail.co.jp"
'Cdo.Bcc = "ユーザ名@yahoo.co.jp,ユーザ名@hotmail.co.jp"
'Cdo.Htmlbody = ""

' ***********************************************************
' ファイル添付あり
' ***********************************************************
Cdo.AddAttachment( "ファイルのフルパス" )

' ***********************************************************
' 設定
' ***********************************************************
Cdo.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
Cdo.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserver") = strServer
Cdo.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = nPort
Cdo.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = true

Cdo.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
Cdo.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/sendusername") = strUser
Cdo.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/sendpassword") = strPass

' ***********************************************************
' 設定の反映
' ***********************************************************
Cdo.Configuration.Fields.Update

' ***********************************************************
' 送信
' ***********************************************************
on error resume next
Cdo.Send
if Err.Number <> 0 then
strMessage = Err.Description
else
strMessage = "送信が完了しました"
end if
on error goto 0

Wscript.Echo strMessage

【動作検証】
Windows 10 Pro


このスクリプトの注意点は、Gmail側が標準で『安全性の低いアプリ』を無効にしていると言うこと。
Google安全性の低いアプリを有効

上記のように有効へ変更してやると送信出来るようになる。
送信出来なかったらエラーが返ってくる親切なスクリプト。
ただし、これによりアカウントとパスワードが流出することによって、悪意による第三者spamの送信となり得るので注意が必要です。
特にスクリプトにアカウントパスワードが書き込むことになるので、扱いには要注意です。
あと、マイクロソフトのAPI?を使っています。
なので、マイクロソフトが嫌いな人はこのワザは避けた方が良いでしょう。
それと、spamメールを送りまくれば、当然足が付くのでバレますよ。。。


参考サイト:VBScript : Windows標準のオブジェクト(CDO.Message)とGMail(Yahoo!メール) を使ってメール送信

記事を評価してください(★1つ=悪い、★5つ=良い)
この記事の平均評価: 未評価 (0人)
Posted by いぐぅ 05:00 | ソフトウェア::プログラミング | comments (0) | trackback (0)
OutlookとVBScriptによるメール自動送信

以前紹介したメール自動送信は、アプリケーションを使った方法でした。
今度は、Outlookがインストールされているケースを使ったメール自動送信です。

【動作検証】
Windows 10 Pro
Outlook 2010

Option Explicit
'*************************************************************
'* メールテンプレート
'*************************************************************
'*************************************
'* 変数宣言
'* 変数名は使いやすい用にリファクタリングしてください.
'*************************************
Dim olk, item, mailBody, mailSubject, mailAttachment, name, mailAddress, timeZone, byLine, mailTo, mailCc, kaigyo

'*************************************
'* 個人で入力させる項目群
'*************************************
' 名前
name = "aaa"
' 自分のメールアドレス
mailAddress = "aaa@sir-2.com"
' 送信先:TO
mailTo = "bbb@sir-2.net;ccc@sir-2.net;"
' 送信先:CC
mailCc = "zzz@sir-2.net"

'*************************************
'* 初期処理
'*************************************
Set olk = CreateObject("Outlook.Application")
Set item = olk.CreateItem(0)

' 改行コード
kaigyo = vbCrLf

'*************************************
'* 時刻を取得する
'*************************************
timeZone = Right("0" & Hour(Now) - 1, 2) & ":01-" & Right("0" & Hour(Now), 2) & ":00"

'*************************************
'* メール件名
'* 以下の例では日時等も加工している.
'*************************************
mailSubject = "件名サンプル "
'mailSubject = mailSubject & Year(Date) & "/" & Right("0" & Month(Date), 2) & "/" & Right("0" & Day(Date), 2)

'*************************************
'* メール本文
'*************************************
mailBody = "送信テスト" & kaigyo
mailBody = mailBody & "こんにちは、" & name & "です。" & kaigyo & kaigyo
mailBody = mailBody & "改行する時は、vbcrlfです。" & kaigyo
mailBody = mailBody & "標準は添付ファイルを送ります。" & kaigyo & kaigyo

'*************************************
'* 署名を作る
'*************************************
'byLine = "----------------------------------------------" & kaigyo
'byLine = byLine & "業務で使うなら使ってください。" & kaigyo
'byLine = byLine & "部署名変更時は注意!!!" & kaigyo
'byLine = byLine & "----------------------------------------------" & kaigyo
'
'mailBody = mailBody & byLine

'*************************************
'* 添付ファイル(不要の場合はコメントアウト)
'*************************************
mailAttachment = "ファイルフルパス"


'*************************************
'* メール内の設定
'*************************************
item.To = mailTo
item.Cc = mailCc
item.Subject = mailSubject
item.Body = mailBody
item.Attachments.Add mailAttachment
item.Display
' 以下のコメントアウトを解除して、更に上のitem.Displayをコメントアウトすれば、
' メールの画面が表示されずにそのまま送信される。
item.Send

'*************************************
'* 終了処理
'*************************************
Set item = Nothing
Set olk = Nothing

WScript.Quit 0



今回は、Outlook(Outlook Expressではない)2010以降でのメール自動送信スクリプト。
Outlookが起動していないと自動送信しないので要注意。


参考サイト:[VBS:備忘録]よくあるメールテンプレをVBSで作成する方法の一例

記事を評価してください(★1つ=悪い、★5つ=良い)
この記事の平均評価: 未評価 (0人)
Posted by いぐぅ 05:00 | ソフトウェア::プログラミング | comments (0) | trackback (0)
Windows版バックアップスクリプト
これまでLinuxでファイルのバックアップをしてきたのですが、Windows10になってからは、専らrobocopyによるバックアップです。
これまでLinuxでファイルのバックアップをしてきたのですが、Windows10になってからは、専らrobocopyによるバックアップです。
しかし、このrobocopy。オプションを付け間違えるととんでもないことになるので慎重に使わなくてはなりません。


とは言っても文法さえ間違えなければ、恐るるに足らず。なんですけどね。
バックアップを取って、その結果をメールで送る。と言うスクリプトを作成しました。

robocopy [コピー元ドライブ] [コピー先ドライブ] /MIR /R:0 /FFT /COPY:DT /xd "System Volume Information" "$RECYCLE.BIN" /DCOPY:D /LOG:[出力先ログ] /NP
C:¥smail.exe -d -h[メール送信サーバ] -f[ユーザー名] -s[メールタイトル] -F[出力先ログ] [xyz@abc.ne.jp]

これで完了です。


こいつのポイントは、smail.exeですね。
これは、文字通りLinuxで言うsendmailみたいな物です。
もちろん、sendmailのような使い方ではなく、独自なのでオプションコマンドを知っておく必要が有ります。


なによりも、このソフトウェアは送信専用ですので注意が必要です。
このソフトの使い方については、リンク先に書いてあるとおりです。
それ以上でもそれ以下でもありません。
一度使い慣れると、もう手放せません。


話を戻してrobocopyのバックアップでドライブレターごとバックアップする時は、必ずオプションを付けておく必要が有ります。
ブロッククォートにある赤太字部分です。
このオプションがないと、メールログにこんな内容がもれなく付いてくることがあります。
2017/07/24 06:00:00 エラー 19 (0x00000013) コピー先ディレクトリを作成しています Z:\$RECYCLE.BIN\
このメディアは書き込み禁止になっています。

2017/07/24 06:00:01 エラー 19 (0x00000013) コピー先ディレクトリを作成しています Z:\$RECYCLE.BIN\
このメディアは書き込み禁止になっています。

ゴミ箱とかシステムボリュームをバックアップする必要は無いので、予めバックアップ対象外にしておくと良いでしょう。


記事を評価してください(★1つ=悪い、★5つ=良い)
この記事の平均評価: 未評価 (0人)
Posted by いぐぅ 05:00 | ソフトウェア::プログラミング | comments (0) | trackback (0)
Let's Encryptの自動更新スクリプト-メール送信版-

半年程使って問題ないので、スクリプトを公開したいと思います。
Let's Encryptの自動更新
これが大元です。

#!/bin/sh
touch /tmp/e_result.log
systemctl stop postfix.service > /tmp/e_result.log
systemctl stop apache2.service > /tmp/e_result.log
/[certbotのあるフォルダ]/certbot-auto renew --force-renew >> /tmp/e_result.log
systemctl start apache2.service >> /tmp/e_result.log
systemctl start postfix.service >> /tmp/e_result.log
mail -s `hostname`" is a result.(lets Encrypt)" [送信先メールアドレス] < /tmp/e_result.log
rm /tmp/e_result.log


メールサーバーとWebサーバを一時的に止める必要が有ります。
Webサーバを止めない方法もありますが、うちは現時点でさほど重要では無いので、月初めの明け方4時30分頃に一瞬だけ落ちます。
これで、更新忘れをすることもありません。

記事を評価してください(★1つ=悪い、★5つ=良い)
この記事の平均評価: 未評価 (0人)
Posted by いぐぅ 05:00 | ソフトウェア::プログラミング | comments (0) | trackback (0)
Teratermマクロの改良
ちなみに、Teratermマクロコマンド集は、こちらにあります。
我が家には2台のメインサーバーがあります。
1台はクラウド型で遠隔地にあります。
どちらもLinux Debianタイプです。
不定期にWindowsのようにパッチ更新をするのですが、ログを残していませんでした。
そのため、先日の記事(Webalizer改良)を紹介するときも、ちょっと手間がありました。


今回はログを保存するためのコマンドとパスワード直書きの修正です。
また、コマンドを使うタイミングについて注意を書きます。
ちなみに、Teratermマクロコマンド集は、こちらにあります。
前回の記事、マクロを掲載していますのでそちらと見比べると良いかも。
TeraTermマクロによるLinuxサーバー自動アップデート



【1】追加した部分と解説
username2 = 'root'
passwdfile2 = 'c:\hogehoge2.dat'

gettime timestr "%Y%m%d-%H%M%S"
sprintf2 filename '%s_hogehoge_autoupdate.log' timestr
最初のusername2とpasswdfile2は、rootユーザとそのパスワードファイルです。
gettimeとは、今の時間を取得するコマンドです。これを、timestrと言う変数に入れます。
"%Y%m%d-%H%M%S"とは、西暦年月日時間です。
WindowsのVBAと混同しやすいのは、Teratermの場合“%Y”だけで2017と4桁取得します。
“%m”なら2月なので02と2桁取得します。
VBAだと“%mm”と入れないと、【02】と入らず、【2】だけになってしまいます。
その要領でTeratermマクロに入れると、例えば2017年2月10日8時43分5秒の場合、2017YYY02m10d-08H43M05Sとなります。

sprintf2とは、引数をセットするコマンドです。
filenameという変数に、timestrで取得した時間に_hogehoge_autoupdate.logを加える。
と言う事です。これで、filenameには、20170210084305_hogehoge_autoupdate.log が入ります。
これでファイルネームは完成です。

msg = 'Enter password for root user '
strconcat msg username2
passwdkey = username2
strconcat passwdkey '@'
strconcat passwdkey hostname
getpassword passwdfile2 passwdkey password2
これは、rootユーザー用のパスワード作成です。
ファイルが存在しないときに出てきます。root用のパスワードをボックスに入れてください。


【2】ここまでは変数の初期設定。
次はログを記録するためのコマンドです。
; カレントディレクトリを変更する
changedir 'E:\log\teraterm'

logopen filename 0 0
logwrite 'Log start'#13#10
logwrite '*****************************************************'#13#10
まずは、カレントディレクトリを変更します。
標準はTeratermがインストールされたフォルダに入ります。
これはあまり望ましくないので、別のフォルダを作成してそこに入れましょう。
上記の例では、Eドライブのlogフォルダのteratermのフォルダに入れます。

logopenとは、ログファイルを開くイメージがあるが書き込むためのコマンドである。
filenameは、変数である。
その次にある「0 0」とは何か。
最初の0は、<binary flag>とき、受信した漢字、改行文字は変換されてファイルに書き込まれ、エスケープシーケンスは書き込まれない。
次の0は、<append flag> とき、ファイル <filename> がすでに存在する場合、そのファイルに追加して書き込む。
まぁ、同じファイル名になることは絶対にないので、appendflagは無視しても良いだろう。

logwrite とは、ログに書き込む文字列のことである。
これはシンプルなコマンドである。
ちなみに#13#10とはエスケープシーケンスと考えられる。
#13がCR、#10がLFじゃないかと思います。
これがないと改行されずに、この後に続き文字が書かれる。


【3】今回赤太字が修正したところ。
wait msg
sendln 'su -'
wait 'パスワード'
sendln password2

この赤太字のところにパスワードを直書きしていた。
もしもこのマクロが外部流出したら一巻の終わりである。
それを防止するために暗号化で外部ファイルに置いた。


【4】最後の設定。シンプルとしか書きようが無い。
解説をするまでもないが解説しておこう。
logclose
closett
end

logcloseとは、ログ取得を終了すること。自動的にファイルは綴じられ、以降のログは取得されない。
closettとは、Teraterm自身を終了すること。自動的に画面が閉じられる。
endとは、マクロの終了。まぁ、儀式的な感じですね。


なお、【3】を挿入する場面は、必ず、connectコマンドのあとに入れること。
この前に入れると、changedirコマンドで絶対にエラーになる。
結構この辺りで苦戦したのですが、あちこち入れ替えることによって判明しました。



記事を評価してください(★1つ=悪い、★5つ=良い)
この記事の平均評価: 未評価 (0人)
Posted by いぐぅ 05:00 | ソフトウェア::プログラミング | comments (0) | trackback (0)
robocopy…
私は定期的にデータバックアップを行っています。
私は定期的にデータバックアップを行っています。
データというのは、mp3とか写真とか資料とか。
ローカルのハードディスクに置いてあるものを、普段使っていないハードディスクへ週1回バッチを動かしてバックアップを取っています。
その時、タイトルにもあるとおりrobocopyコマンドを使うと便利です。
普通は、copyコマンドでも十分ですけどね。


そのrobocopyの使い方は、copyコマンドとほぼ同じです。
オプションコマンドを使うと更に便利。
覚え書きで一応書いておきます。

/MIR…バックアップ元とバックアップ先を同じようにします。これが無いと重複するファイルがあるとおじゃんになります。個人的には必須ですね。
/R:x…xには数字が入ります。無いとコピーに失敗すると100万回再チャレンジするので時間の無駄です。多くて1。そうで無ければ0で良いです。
/FFT…バックアップ元と先のファイルの更新時間を比較する時、2秒の誤差を許します。バックアップ先がWindowsなら不要オプションです。
/DCOPY:T…フォルダコピーしたときのタイムスタンプもバックアップ元と同じにします。これは案外便利ですよ。標準でつけた方がベター。
/LOG:”ログファイルのパス”…読んで字のごとく、ログファイルを出力します。これが有ると無しとでは、何かトラブルがあったときの対策手段になります。必須。
/SEC…Windowsのセキュリティー情報もコピーします。バックアップ先がWindowsでない場合不具合があるので要注意。

記事を評価してください(★1つ=悪い、★5つ=良い)
この記事の平均評価: 未評価 (0人)
Posted by いぐぅ 06:10 | ソフトウェア::プログラミング | comments (0) | trackback (0)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31