全10件 (10件中 1-10件目)
1
魔術師です。SSHクライアントのターミナルソフトとして Poderosa を使っています。TeraTerm と違ってバッチ処理は出来ませんが一応マクロ機能が付いているので Poderosa 複数サーバー自動ログインするマクロの SSH キー対応版を作りました。最新版では有償化してマクロ機能も外されているので古いバージョン 4.4.5 を利用しています。前から作りたかったのですがやっと手を付けました。単体のサーバーへのログインは出来るようなマクロは作っていましたが、サーバーの数が多くて何度も呼び出して実行する必要があって面倒くさいなと思っていたのです。サーバー側の SSH 設定は root ではパスワード認証ではログインできないように SSH キーでの認証のみログイン出来るように設定しています。完全 SSH キー認証にすれば安全だけどいざという時にログイン出来なくなってはいけないので root のみキー認証にしています。。sshd.confPermitRootLogin without-passwordPoderosa 複数サーバー自動ログインマクロ SSH キー対応版==========/*** 複数の接続を一気に行うマクロ* https://w.atwiki.jp/keiplus/pages/81.html* MultiAutoLogin.js* Poderosa マクロ で複数サーバーへドンドン接続しちゃう!方法 https://blog.gti.jp/post-159/*/import Poderosa;import Poderosa.ConnectionParam;import Poderosa.Terminal;import Poderosa.Macro;import Poderosa.View;import System.Drawing;import System.Threading;var env = new Environment();var ENCODE_TYPE = EncodingType.UTF8;var NEWLINE_CHAR = NewLine.LF;var SSH_PORT = 22;var hostList = new Array();var hostip = "192.168.0.1";var loginuser = "USER";var loginpw = "PASSWORD";var loginport = "22";//// サーバー設定//hostList[0] = new Array();hostList[0]['host'] = "hoostname"; // ドメイン OR IPhostList[0]['id'] = "root"; // ログインアカウントhostList[0]['pwd'] = ""; // ログインパスワードhostList[0]['authtype'] = 1; // 認証タイプ 0: パスワード 1: SSH キーファイルhostList[0]['key'] = "シークレットキーファイル名"; // 秘密鍵ファイルhostList[0]['title'] = "サブタイトル"; // タブのタイトルhostList[0]['port'] = 22; // SSHのポートを変更している場合は設定するhostList[0]['encode'] = EncodingType.UTF8; // エンコードがデフォルト値以外の場合設定するhostList[0]['newline_char'] = NewLine.LF; // 改行コードがデフォルト値以外の場合設定する//hostList[0]['commands'] = new Array(); // コマンド発行の場合必要(任意)//hostList[0]['commands'][0] = "pwd"; // コマンド1(任意)//hostList[0]['commands'][1] = "ls -lat"; // コマンド2(任意)hostList[1] = new Array();hostList[1]['host'] = "hostname"; // ドメイン OR IPhostList[1]['id'] = "root"; // ログインアカウントhostList[1]['pwd'] = ""; // ログインパスワードhostList[1]['authtype'] = 1; // 認証タイプ 0: パスワード 1: SSH キーファイルhostList[1]['key'] = "シークレットキーファイル名"; // 秘密鍵ファイルhostList[1]['title'] = "サブタイトル"; // タブのタイトルhostList[1]['port'] = 22; // SSHのポートを変更している場合は設定するhostList[1]['encode'] = EncodingType.UTF8; // エンコードがデフォルト値以外の場合設定するhostList[1]['newline_char'] = NewLine.LF; // 改行コードがデフォルト値以外の場合設定する//hostList[1]['commands'] = new Array(); // コマンド発行の場合必要(任意)//hostList[1]['commands'][0] = "pwd"; // コマンド1(任意)//hostList[1]['commands'][1] = "ls -lat"; // コマンド2(任意)hostList[2] = new Array();hostList[2]['host'] = "hostname"; // ドメイン OR IPhostList[2]['id'] = "root"; // ログインアカウントhostList[2]['pwd'] = ""; // ログインパスワードhostList[2]['authtype'] = 1; // 認証タイプ 0: パスワード 1: SSH キーファイルhostList[2]['key'] = "シークレットキーファイル名"; // 秘密鍵ファイルhostList[2]['title'] = "サブタイトル"; // タブのタイトルhostList[2]['port'] = 22; // SSHのポートを変更している場合は設定するhostList[2]['encode'] = EncodingType.UTF8; // エンコードがデフォルト値以外の場合設定するhostList[2]['newline_char'] = NewLine.LF; // 改行コードがデフォルト値以外の場合設定する//hostList[2]['commands'] = new Array(); // コマンド発行の場合必要(任意)//hostList[2]['commands'][0] = "pwd"; // コマンド1(任意)//hostList[2]['commands'][1] = "ls -lat"; // コマンド2(任意)//// ログイン処理//for (var i = 0; i < hostList.length; i++) { var ssh_port_num = SSH_PORT; if (hostList[i]['port'] != null && hostList[i]['port'] != SSH_PORT) { ssh_port_num = hostList[i]['port']; } var encoding_type = ENCODE_TYPE; if (hostList[i]['encode'] != null && hostList[i]['encode'] != ENCODE_TYPE) { encoding_type = hostList[i]['encode']; }var newline_char = NEWLINE_CHAR;if (hostList[i]['newline_char'] != null && hostList[i]['newline_char'] != NEWLINE_CHAR) { newline_char = hostList[i]['newline_char']; } var conn = connect(hostList[i]['host'], ConnectionMethod.SSH2, ssh_port_num, encoding_type, newline_char, hostList[i]['authtype'], hostList[i]['id'], hostList[i]['pwd'], hostList[i]['key'], hostList[i]['title']); if (hostList[i]['commands']) { if (hostList[i]['commands'].length > 0) { wait(conn, "$"); for (var j = 0; j < hostList[i]['commands'].length; j ++) { sendln(hostList[i]['commands'][j], conn); } } }}env.Util.MessageBox("処理終了しました!");function connect(host, method, port, encoding, newline_char, authtype, id, password, prikey, title) { var param = new SSHTerminalParam(method, host, id, password); if ( authtype == 1 ){ param.AuthType = AuthType.PublicKey; param.IdentityFile = prikey; } else { param.AuthType = AuthType.Password; } param.Caption = title+"["+host+"]"; param.Port = port; param.Encoding = encoding; param.TransmitNL = newline_char; var connection = env.Connections.Open(param); return connection;}function sendln(s, connection) { connection.TransmitLn(s);}function wait(connection, command) { Thread.Sleep(10); var res = connection.ReceiveData(); while(res.indexOf(command) == -1) { Thread.Sleep(10); res += connection.ReceiveData(); }}==========会社の元々はバイク友、今はパソコン友が珍しく魔術師の席まで来て第10世代 Core i5-10400 マシンを手に入れたと話をした。ドスパラの BTO マシンらしくて、5月連休に注文して入ったらしい15年ぶりのマシンの更新らしいけど、かなり速いらしい。そうだろうな、Core i5-10400 も 6C12T で狙ってた石なんだよねBTO で GPU も載っているので BTO もありだよなとは思っていました。こりゃ負けれんなあ。けれど世界的な半導体不足で値段が上がっていますので早く構成を確定しなければ。セールも近いしね。新しい Ryzen APU の発表があったけど内蔵 GPU の更新があっていいのだけど 8月出荷で遅いんだよね。新しい 4K ディスプレイが届きました。ViewSonic VX3211-4K-MHD-7 ブラック [31.5型ワイド液晶ディスプレイ(4K対応)]受け取るだけでも何日もかかってしまいました。さすが受け取った箱は巨大です。まだ出していません。ディスプレイの下にガラスのディスプレイの置き台を置いているのですが、これを外さないといけません。こんなの★期間限定ポイント10倍変倍★【送料無料】FITUEYES 机上台 モニター台 モニターライザー キーボード収納 幅385mm 内径300mm 高さ調整可能 透明 強化ガラス製 肩こり軽減 DVDレコーダー収納 ブルーレイレコーダー DT103801GC台があって少し高目なのですが大きな画面になると見上げる形になって疲れてはいけないので目の高さがディスプレイの上辺になるように調整しようと思っています。台の上にスピーカーとか Web カメラとかミニ PC とか色々と置いているので整理から始めないといけません。ディスプレイの上にも棚を設けてものがあるのでここに置いているものも整理しないといけません。【送料無料】キングジム 棚 ディスプレイボード 黒 DB-500-BK 【jan 4971660773428】設置はもう少し先になりそうですが初期不良の確認もしないといけません。昨日の晩は焼そばでした。ソフト麺の焼そばです。いつもながら野菜が山盛りで麺より野菜が多いと思ったのですが、火が通るとしんなりしていい感じになりました。フライパンで下ごしらえしてホットプレートで焼きながら食べました。案外パラッと焼けていて美味しかったです。なくなったネジ式のキーホルダーのネジは購入できることになりました。早速、代金を振込んで送ってもらいます。キリンの自販機で麦茶を現金を準備して買いました。LINE に接続してポイントが付きました。Amazon プライムデーが今年は 7/21-22 にあるみたいです。毎年 7月頭なので少し早いですね。これは気合いを入れねば。楽天モバイルの話180日間利用のない回線は強制的に解約されるようになったそうだこれは時々電源を入れて使わないといけませんね、0円維持も手間が掛かる。今日はオフィスの消毒当番も終わったのでリモートです。がんばりましょう。人気記事の一覧のあるトップへ楽天のサービス紹介ページへ飛ぶ星影の魔術師に応援のクリックをポチッとお願いします。 皆さんの、協力に感謝しています。
2021.06.03
コメント(12)
魔術師です。昨日は週末だと言うことで少し飲み過ぎたようです。キンミヤ焼酎をホッピーを最近気に入っている果汁のみで添加物なしのキリンの「本搾り」ワーファリンは飲んでないのでグレープフルーツでも大丈夫と言うことでグレープフルーツを飲みました。生のフルーツならではの果汁感がこのシリーズは素晴らしいです。そのあと黒霧島を 200ml 飲んでいつもは 100ml ですが、週末だし少し多かったかも知れません。飲んですぐにパタッと寝てしまいました。朝起きて頭がガンガンするのは風邪なのか?二日酔いか?一昨日になりますが、パートナーの仕事のシフトに関して毎月データを送ってもらっているのですがGoogle カレンダーに取り込むためにエディターで正規表現を使って加工していました。だけど面倒くさいのでプログラム一発で加工したいけど、こんなものにガッツリプログラムを組みたくない。だったらスクリプト系のプログラムだよねとはずっと思っていたのです。思っているだけで全然動いていなかったのですが、今月のデータをもらったのでちょっとがんばってスクリプトを組みました。行処理なので awk だよなあと思っていたのですが、sed ではきっと力不足、Perl 使いなら悩まないのでしょうけど使いこなせてない今なら AI 処理も出来る Python でしょうがイチから勉強しないといけない。と言うことでスクリプト系の言語の awk にしました。元データ----------10月の勤務表を送ります1日(木)・・夜勤2日(金)・・明け3日(土)・・休み・・・----------加工後のカンマ区切りデータ----------Subject,Start date,All Day Event夜勤,2020/10/1,true明け,2020/10/2,true休み,2020/10/3,true・・・----------使っていた正規表現これを([0-9]+).*・・(.*)これに文字列置き換え\2,2020/10/\1,true正規表現ではパターンにマッチした行の一部を切り出して再利用が出来るのです。文字列変換していましたが月のデータは最初に出てくるので取り込んでデータとして使いたいなあと思っていました。だけど単なる文字列変換では不可能です。それと awk の処理系をどれを使うかが問題です、ちゃんと日本語が使える awk にしないといけませんMS-DOS 時代の jgawk が定番だけど、16ビットのソフトだよね。Linux 上で処理すればここで悩まなくていいので WSL2 を使うか Raspberry Pi に転送して処理するかとも思ったけど転送の手間がかかるのでボツ普段使っている busybox-w32 の中に含まれている awk を使ってみました。busybox-w32https://frippery.org/busybox/日本語が化けて通らないと思ったら元のデータファイルが UTF-8 で保存されていたのでした。SJIS 変換して通すと綺麗に通りました。単なる変換だけでなく12月に翌年1月のデータを処理する場合と、12月分のデータには翌年の 1月のデータも一部追加される場合もあるので対応しました。システム日付とデータ日付を比較して翌年のデータになるように計算しました。calconv.awk スクリプト----------#!/usr/bin/awkBEGIN { print "Subject,Start date,All Day Event" month=1; year=strftime("%Y"); todays_month=strftime("%m"); l=0;}# ([0-9]+).*・・(.*)# \2,2020/1/\1,true/[0-9]+月/ { sub("月の.*$","",$0); month = $0;# print month; if ( todays_month == 12 ) { if ( month == 1 ) { year = year+1; } }}/[0-9]+日.*・・/ { l = l+1# printf "$2,2020/1/$1,true\n" sub("日", " ", $0); sub("・・", " ", $0); day=$1 if ( l > 31 && month == 12 ) { year = year + 1; month=1; l=0; } printf("%s,%d/%d/%d,true\r\n", $3, year, month, day );}----------大満足の出来です。今まで月に 1回のことだからとエディターで文字列変換していまいしたが、これからは自動で処理出来ます。早期処理の同期が終わらないUSB オーディオインターフェースの問題でマシンを初期状態に巻き戻したので複数マシンのデータ同期ソフトの最初の同期処理が未だに終わりません。多量のデータがあるからだけど終わりそうになると再起動が必要になって初めからやり直しになっています。データ転送はないのですが持っているデータとの差分チェックに時間が掛かっています。夜に再起動したので一晩で 98% 今日終わればいいな。オクで落札したカセットデッキですが、出品者から連絡があったので一安心なのですが、着払いで送らないといけません。梱包しないといけないし、引き取り依頼をかけないといけないので面倒くさいです。これをしたくないからオクには出品しないのですけどね。カセットデッキが使えなくなったので別宅に行って外付け dbx ユニットを持って来るのと別宅のマシンが不調で立ち上がらないので様子を見に行こうかと思います。追加でごぼうスティックを仕入れましょうか。人気記事の一覧のあるトップへ楽天のサービス紹介ページへ飛ぶ星影の魔術師に応援のクリックをポチッとお願いします。 皆さんの、協力に感謝しています。
2020.10.03
コメント(14)
魔術師です。先日電子書籍管理ソフトの calibre で ZIP 書き出ししたデータから JPEG ファイルを抜き出せることに気付きました。電子書籍データの JPEG 変換 | 星影の魔術師の魔法の呪文 - 楽天ブログhttps://plaza.rakuten.co.jp/wizardofstarlite/diary/202002220000/リンクの先で書いていますが、いったん PDF に書き出して、PDF を Adobe PostScript 互換インタプリタの GhostScript を使ってレンダリングしていましたが直接 ePUB 形式を ZIP ファイルに書き出すことが出来ることに気付きました。その ZIP ファイルの中にイメージファイルも含まれていました。多分 ePUB 自体が ZIP 圧縮されて固められたファイルですからもしかしたらそのまま書き出しているのかも。この ZIP ファイルからいちいち手作業でイメージファイルを取り出すのも面倒くさいので自動的にイメージファイルを抜き出して再度 ZIP にまとめる BAT ファイルを作りました。Calibre から書き出した ZIP ファイルそのままでも iPhone/iPad で読めるのですが使っているビューワーアプリが ZIP 中のフォルダは別の本として扱うので表紙と本文が別の巻として扱われ表紙だけの 1ページの巻になるのでめくる手間が少々面倒くさいので抜き出してまとめることにしました。魔術師の環境では、アーカイバとして 7-Zip Portable一時領域として RAM ディスクである Z: ドライブに作業領域にしました。CalibZipToRawZip.bat==========@echo offset ZIPBIN=D:\PortableApps\7-ZipPortable\App\7-Zip64\7z.exeset MKDIR=mkdirset RMDIR=rmdirset FILE=%~fn1set FILENAME=%~n1set FILEEXT=%~x1REM set YEAR=%DATE:~0,4%set KOBO_DATA_PATH=E:\eBook\Koboset TMP_DRV=Z:set TMP_DIR=%TMP_DRV%\TMP\EB_%RANDOM%REM set WORK_DIR=jpg_workset WORK_DIR=%FILENAME%%MKDIR% %TMP_DIR%%MKDIR% "%TMP_DIR%\%WORK_DIR%"copy "%FILENAME%%FILEEXT%" %TMP_DIR%cd /d %TMP_DIR%REMREM Extract ZIPREM%ZIPBIN% x "%FILENAME%%FILEEXT%"FOR /D %%i IN (*_files) do ( echo copy %%i\cover.jpeg "%TMP_DIR%\%WORK_DIR%" copy %%i\cover.jpeg "%TMP_DIR%\%WORK_DIR%\0000.jpg" if exist %%i\OEBPS ( if exist %%i\OEBPS\image ( echo copy %%i\OEBPS\image\* "%TMP_DIR%\%WORK_DIR%" copy %%i\OEBPS\image\* "%TMP_DIR%\%WORK_DIR%" ) if exist %%i\OEBPS\images ( echo copy %%i\OEBPS\images\* "%TMP_DIR%\%WORK_DIR%" copy %%i\OEBPS\images\* "%TMP_DIR%\%WORK_DIR%" ) ) if exist %%i\item ( if exist %%i\item\image ( echo copy %%i\item\image\* "%TMP_DIR%\%WORK_DIR%" copy %%i\item\image\* "%TMP_DIR%\%WORK_DIR%" ) if exist %%i\item\images ( echo copy %%i\item\images\* "%TMP_DIR%\%WORK_DIR%" copy %%i\item\images\* "%TMP_DIR%\%WORK_DIR%" ) ))ren %WORK_DIR% "%FILENAME%"del /q "%FILENAME%%FILEEXT%"REMREM Archive Image FilesREM%ZIPBIN% a -tzip "%FILENAME%%FILEEXT%" "%FILENAME%\*"REMREM copy to ARCHIVE PathREMif "%FILENAME:~0,8%"=="週刊少年マガジン" ( echo if "%FILENAME:~0,8%"=="週刊少年マガジン" ( set YEAR=%FILENAME:~9,4% set MAGAZINE_ARCHIVE_PATH=%KOBO_DATA_PATH%\_週刊少年マガジン\%YEAR% set ARCHIVE_PATH=%MAGAZINE_ARCHIVE_PATH%)else ( if "%FILENAME:~0,5%"=="Mr.PC" ( echo if "%FILENAME:~0,5%"=="Mr.PC" ( set MRPC_ARCHIVE_PATH=%KOBO_DATA_PATH%\_Mr.PC ミスターピーシー set ARCHIVE_PATH=%MRPC_ARCHIVE_PATH% ))if "%ARCHIVE_PATH%"=="" ( set ARCHIVE_PATH=%KOBO_DATA_PATH%)echo ARCHIVE_PATH="%ARCHIVE_PATH%"if not exist %ARCHIVE_PATH% %MKDIR% "%ARCHIVE_PATH%"REMcopy "%FILENAME%%FILEEXT%" "%ARCHIVE_PATH%"REMREM clean upREMcd ..\%RMDIR% /S/Q %TMP_DIR%:END==========今回、実行ファイル名も環境変数にすることでテスト時にはset MKDIR=mkdir -> set MKDIR=echo mkdirと echo を噛ませることで実際に実行されずに表示だけさせて確認することが出来ることに気付きました。何かの参考になればと公開します。人気記事の一覧のあるトップへ楽天のサービス紹介ページへ飛ぶ星影の魔術師に応援のクリックをポチッとお願いします。 皆さんの、協力に感謝しています。
2020.02.29
コメント(0)
魔術師です。ファイルリストからファイルを探すバッチファイルを修正しました。前に作ったのはコレ目的達成! GNU Utilities for Win32 を使ったバッチファイルhttps://plaza.rakuten.co.jp/wizardofstarlite/diary/201705030002/クリップボードにファイル名をコピーしないオプション /nc -ncエクスプローラで開かないオプションを追加しました。 /no -noFSearch.bat----- ここから@echo offsetlocalset STR=%1set LIST=D:\List\LIST_FILE.txtset RLIST=D:\List\LIST_FILE_R.txtset DATA_DIR=D:\DATAset SORT_CMD=c:\bin\sort.exeset SORT_OPT=-rset GREP_CMD=c:\bin\yagrep.exeset GREP_OPT=-Pset HEAD_CMD=c:\bin\head.exeset HEAD_OPT=-n1set CLIP_CMD=C:\WINDOWS\SYSTEM32\CLIP.exeset NoCLIP=0set NoOpen=0:if "%1"=="-nc" goto :NoCLIPif "%1"=="/nc" goto :NoCLIPif "%1"=="-NC" goto :NoCLIPif "%1"=="/NC" goto :NoCLIPif "%1"=="-no" goto :NoOpenif "%1"=="/no" goto :NoOpenif "%1"=="-NO" goto :NoOpenif "%1"=="/NO" goto :NoOpenif "%1"=="-n" goto :RENEWif "%1"=="/n" goto :RENEWif "%1"=="-N" goto :RENEWif "%1"=="/N" goto :RENEWif "%1"=="-r" goto :RENEWif "%1"=="/r" goto :RENEWif "%1"=="-R" goto :RENEWif "%1"=="/R" goto :RENEWif "%1"=="-?" goto :USAGEif "%1"=="/?" goto :USAGEif "%1"=="-h" goto :USAGEif "%1"=="/h" goto :USAGEif "%1"=="-H" goto :USAGEif "%1"=="/H" goto :USAGEif "%1"=="" goto :USAGEgoto :PROC:NoOpenset NoOpen=1set NoCLIP=1set STR=%2goto :PROC:NoCLIPset NoCLIP=1set STR=%2:PROCecho STR="%STR%"FOR /F "usebackq delims==" %%n IN (`type %RLIST% ^| %GREP_CMD% %GREP_OPT% "%STR%" ^| %HEAD_CMD% %HEAD_OPT%`) DO ( echo %%n echo STR=%STR% SET FILENAME=%%n echo FILENAME=%FILENAME%)if "%FILENAME%"=="" goto :NOT_FOUNDcall :FNAME_GET "%FILENAME%"echo FPATH=%FPATH%echo FNAME="%FNAME%"echo FEXT=%FEXT%if "%NoCLIP%"=="0" ( echo %FNAME%| %CLIP_CMD%)REM start explorer.exe /e,"%FPATH%"if "%NoOpen%"=="0" ( start explorer.exe /e,/select,"%FPATH%%FNAME%%FEXT%")goto END:NOT_FOUNDecho 見つかりません.goto END:FNAME_GETset FPATH=%~dp1set FNAME=%~n1set FEXT=%~x1exit /B:USAGEecho USAGE : %~nx0 "STRING"echo %~nx0 "STRING" : LIST SERACHecho %~nx0 [-/]nc "STRING" : LIST SERACH NoCLIPecho %~nx0 [-/]no "STRING" : LIST SERACH NoOpen Directoryecho %~nx0 [-/][nr] : LIST and Reverse LIST RENEWecho %~nx0 [-/]h : USAGEgoto END:RENEWdir %DATA_DIR% /B /S /O:N > %LIST%type %LIST% | %SORT_CMD% %SORT_OPT% > %RLIST%echo FileList ReNewed.:ENDendlocal----- ここまでエクスプローラが開かないのは鬱陶しくなくていい人気記事の一覧のあるトップへ星影の魔術師に応援のクリックをポチッとお願いします。 皆さんの、協力に感謝しています。
2017.07.09
コメント(1)
魔術師です。Delphi で開発中のアプリです。いや正確にはかつて開発して Delphi 10.2 に移植したプログラムです。FDMovファイル名から正規表現で指定した特定文字列を変換してディレクトリを掘って移動するプログラム。フォームデザイン画面コーディング画面FDMov 実行中画面この例では 【】「」全角() 半角 () 等の様々なカッコを [] に置き換える形になっている当然拡張子は自動で外したディレクトリ名になる正直 Linux 上だとシェルスクリプトでコマンドラインで実行するレベルですが、今なら Windows 上でも PowerShell や Bash on Ubuntu on Windows で簡単にできそうです。当時はシェルのいいのがなかったのでアプリケーションとして作り込みました。perl とか使えば出来たのかも知れません。BATArc指定ディレクトリから不要ファイルを削除して圧縮するプログラム。アーカイブファイルの中から *.exe; *.com; thumb.db 等の不要ファイルを削除する元々は不要ファイルを削除した上でディレクトリ毎の圧縮プログラムでした。BATArc 開発中最初バッチファイルを作成して別途バッチを流すプログラムだったのでそんな名前にしていました。その後 MiniZip.exe、LHA32.exe、rar.exe と言うコマンドライン実行ファイルを呼び出す形で実行するように変更した。次の段階では Common Archiver DLL を直接呼び出して内部処理をするように改造したい。人気記事の一覧のあるトップへ星影の魔術師に応援のクリックをポチッとお願いします。 皆さんの、協力に感謝しています。
2017.04.16
コメント(0)
魔術師です。夜になってかつて XP の時代に自分のために作った Delphi のプログラムをDelphi 10.2 Starter にてコンパイルし直しています。Delphi Object Pascal プログラミング言語https://plaza.rakuten.co.jp/wizardofstarlite/diary/201704040002/Delphi 10.2 になって色々と変わっているので一筋縄では行きません。プログラムは、ファイル名を元にしてファイルと同じ階層にディレクトリを掘って移動する。ディレクトリ名はファイル名から指定した文字列を置き換えたディレクトリ名を作る。その置き換え定義には正規表現で複数設定出来るようにする。プログラムのコンパイルの前に自作のコンポーネントとか何種類かを準備して何とかコンパイルが通ってもファイルのドラッグアンドドロップを受け付けないコレは参った・・・と思っていたら新しい Delphi では流儀が少し違っているようだ。DragAcceptFiles(Handle, True); の前にChangeWindowMessageFilter (WM_DROPFILES, MSGFLT_ADD);ChangeWindowMessageFilter (WM_COPYGLOBALDATA, MSGFLT_ADD);Windows メッセージに関するフィルター追加が必要でした。これで何とか D&D も動くようになりました。あとは、Windows API の ファイルの検索が FindFirst/FindNext が標準で TDirectory.GetFiles でサポートされてるし。 真っ先にこのプログラムを引っぱり出してコンパイルしたのもファイルの移動だけでなくて、ファイル名もリネームできるようになれば便利だなと思ったから。これから改造していきます。これ希少本です。【中古】 Delphi2.0 Q&A120選 / 大野 元久 / ビレッジセンター出版局 [単行本]【メール便送料無料】【あす楽対応】人気記事の一覧のあるトップへ星影の魔術師に応援のクリックをポチッとお願いします。 皆さんの、協力に感謝しています。
2017.04.15
コメント(0)
魔術師です。この前からつくばで手に入れたプログラムにちょっと手を入れようと思ってこれが Linux 上の C++ 処理系である g++ で書かれているのです。困ったことに魔術師は C++ は初心者なのです (*^_^*)ド素人Windows 系のプログラミングは Delphi 一本でそれはもう堅い線でしたが昨年の秋に今まで頑なに一線を越えてなかった C# に手を染めてしまいました。これは処理系を作った人が一緒であるため C# はまるで Delphi なのでほぼ一対一に簡単に読み替えが出来てこなせましたがC++ はちょっとキツいです。Delphi の兄弟処理系の C++Builder で Delphi と比較して少し C++ のオブジェクト指向的な部分を読み取れたので少しは理解できますがやはり素人初歩から躓きます。例えば、今時 printf/sprintf は使えないのかsprintf( s, "%04d", v ) とやりたいだけなのに・・・。調べてみると C++ では setw setfill だと言うでもコンパイルでエラーになる・・・(?_?)更によくよく調べてみると#include <iomanip> しないといけないのかおまけに #include <iomanip.h> ではないのね・・・。出来上がったのはcout
2016.04.16
コメント(0)
魔術師です。仕事上の成り行きでプログラム言語の C# 楽勝みたいな流れになっています。Delphi の魔術師だったので開発した人は一緒だとか蘊蓄を垂れたのもある期待を裏切る訳には行かないので言語を作った人が一緒なので近いモノはあるんです。どう置き換え対応するかの変換テーブルが出来れば大丈夫参考書を買ってコッソリ勉強しておこう。たしなみですから (笑)これは安いので買ってみた。【はじめての方限定!一冊無料クーポンもれなくプレゼント】Windowsアプリを5日で作れる本(日経BP Next ICT選書)【電子書籍】[ 中島省吾 ]これは解り易そう。【はじめての方限定!一冊無料クーポンもれなくプレゼント】C#の絵本 C#が楽しくなる9つの扉【電子書籍】[ 株式会社アンク ]版数が進んでる。猫でもわかるC#プログラミング 第2版-【電子書籍】人気記事の一覧のあるトップへ星影の魔術師に応援のクリックをポチッとお願いします。 皆さんの、協力に感謝しています。
2015.09.24
コメント(0)
魔術師です。LIVA ちゃんとか VivoTab ちゃんとかC: の容量の少ないマシンでは Windows Update の残骸は無駄になりますから。常用しているアップデートモジュールの残骸削除のための BAT ファイルを見直しました。元々は Windows Update モジュールのダウンロードが糞詰まりになった時にダウンロードキューのクリアが目的のマイクロソフト公式の手順でした。キューの待ち行列をクリアしてUpdate の残骸を削除する機能を追加しましたがなぜか削除できないディレクトリがあり、ファイルとディレクトリが残っています。del /S/F/Q 行だけでは無理でした。強制的に削除するにはどうすればいいか、考えた末ディレクトリ名を検索して1行ずつ rmdir するようにしました。最初は for /R でサーチしていましたが、上手いこと行かなかったのでトライアンドエラーの結果、for /D でディレクトリ一覧を取得するようにしました。for /D はディレクトリだけの検索なので段取りとしては、まずは del /S/F/Q でファイル削除ディレクトリ名を指定しつつ rmdir するようにしました。アップデートのサービスを停止した上でファイルとディレクトリを削除するので安全です。BitsDLQue&DataClear.batここから切り取り-----@echo offnet stop bitsnet stop wuauservIpconfig /flushdnscd "%ALLUSERSPROFILE%\Application Data\Microsoft\Network\Downloader"del /Q qmgr0.datdel /Q qmgr1.datdel /S/F/Q %SystemRoot%\SoftwareDistribution\Download\*.*for /D %%d in (%SystemRoot%\SoftwareDistribution\Download\*.*) do rmdir /S/Q "%%d"net start bitsnet start wuauservwuauclt /detectnow-----ここまでシステムディレクトリのファイルを削除するので管理者としての実行が必要です。これで対象ディレクトリ配下が綺麗に掃除されます。人気記事の一覧のあるトップへ星影の魔術師に応援のクリックをポチッとお願いします。 皆さんの、協力に感謝しています。
2015.05.18
コメント(0)
魔術師です。訳あって時間計算が必要になりました。UNIX シリアル時間を Windows シリアル時間に変換 シリアル時間はWindows 上は 1970/01/01 からの秒数で表す時間UNIX 上は 1900/01/01 からの秒数で表す時間こう決めておけば整数値のため時間 A と 時間 B の大小、差の計算がやり易くなると言う訳。試算のため Excel で計算=[対象データセル]/86400 + "1970/1/1 09:00:00"86400 は 24H x 60min x 60sec後ろの9時間追加は日本標準時 JST への変換Delphi とかでゴリゴリプログラムを書くほどでは無いけどWindows 上で簡単に実行するため標準で付いている VBScript で書いてみた。ResultDate = CLng(strSerialSeconds) / 86400 + CDate("1970/1/1 09:00:00")本当は Windows PowerShell が今風なんだろうけどいちからなんでそんなに苦労したくない。Linux 上ならば正規表現も使えるツールもあるしエラー処理が楽なんだけどね変換に関して Web 上でひっかかったのはdate '+%s' | awk '{print strftime("%Y/%m/%d %H:%M:%S", $1)}'こんな感じおお単純コマンドラインで済む人気記事の一覧のあるトップへ星影の魔術師に応援のクリックをポチッとお願いします。 皆さんの、協力に感謝しています。
2015.03.31
コメント(0)
全10件 (10件中 1-10件目)
1