業務ではボツネタになったけどせっかく作ったので置いとく。

active directoryに参加している企業内のPCには、ログイン時に特定の処理をさせることができる。

バッチ処理動かすとか、パワーシェル動かすとかね。

そんな中でカウントダウン表示したいから「文字を大きく表示させて欲しい」なんてのがあった。

習作として作っておいたもののメモ。

結論

こんなのが表示できる。

ascii

なぜかwindowsのハードコピーうまくmacに持って来れんかったから、いったん写真。

練習のアスキーアート

アスキーアートってのがある。

jpegをアップロードしたらテキスト表示してくれるサイトあるので、練習でやってみた。

作者さんありがとう。wordで「wordアート」使って臨時で作った文書を変換してみた。

最初はこんなん作った。

ascii

なんか砂ボコリ上がってるようにも見えるし、目がチカチカする。

wordアート作戦はやっぱやめとこ。

文字を作る

macの中でkubernetesを動かすときにminikube使う。

けっこう勉強で使わせてもらってて、dockerコンテナとして動いてるminikubeにsshするときこんな表示が出る。

その中ではminikube sshってコマンドライン打つと、バナーが表示される。

こんな感じ。

1
2
3
4
5
6
7
8
nari@gvis-mac minikube %
nari@gvis-mac minikube % minikube ssh
                         _             _
            _         _ ( )           ( )
  ___ ___  (_)  ___  (_)| |/')  _   _ | |_      __
/' _ ` _ `\| |/' _ `\| || , <  ( ) ( )| '_`\  /'__`\
| ( ) ( ) || || ( ) || || |\`\ | (_) || |_) )(  ___/
(_) (_) (_)(_)(_) (_)(_)(_) (_)`\___/'(_,__/'`\____)

こんな感じで作りたかったんやけど、文字を変更してくれるサイト見つけられず・・・。

それでも、純粋に文字をドット絵みたいにとらえて巨大化してくれるサイトを見つけた。

作者さんありがとう。

これで文字が作れる。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
                                                                        
    ■            ■■■            ■            ■           ■            ■ 
    ■              ■            ■           ■   ■        ■            ■ 
 ■■■■■■■                  ■■■■■■■■■■       ■■  ■ ■       ■            ■ 
   ■■          ■■■■■■           ■         ■              ■            ■ 
   ■           ■    ■■       ■■■■        ■               ■            ■ 
 ■■■■■■              ■       ■  ■        ■■              ■            ■ 
   ■    ■■           ■       ■  ■         ■■             ■            ■ 
   ■     ■          ■■       ■■■■          ■■                           
   ■     ■         ■■          ■■           ■■           ■            ■ 
   ■■   ■        ■■■          ■■             ■■          ■            ■ 
    ■■■■                     ■                                          
                                            

おお、できたできた。

これでカウントダウン用の数字のテキストを作って、こんな感じに置いとく。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
nari@gvis-mac text % ls -l etc/work/text
total 104
-rw-r--r--  1 nari  staff   251  2 13 11:40 0.txt
-rw-r--r--  1 nari  staff   251  2 13 11:40 1.txt
-rw-r--r--  1 nari  staff   251  2 13 11:40 2.txt
-rw-r--r--  1 nari  staff   251  2 13 11:40 3.txt
-rw-r--r--  1 nari  staff   251  2 13 11:40 4.txt
-rw-r--r--  1 nari  staff   251  2 13 11:40 5.txt
-rw-r--r--  1 nari  staff   251  2 13 11:40 6.txt
-rw-r--r--  1 nari  staff   251  2 13 11:40 7.txt
-rw-r--r--  1 nari  staff   251  2 13 11:40 8.txt
-rw-r--r--  1 nari  staff   251  2 13 11:40 9.txt
-rw-r--r--  1 nari  staff   308  2 13 11:43 日.txt
-rw-r--r--  1 nari  staff   700  2 13 11:42 あと.txt
-rw-r--r--  1 nari  staff  2737  2 13 11:40 もうすぐ.txt
nari@gvis-mac text % 

シンプルにバッチファイル作る

こんな感じ。

linuxの文字列系コマンドでpasteってのがあって、catとは違って横にファイルを連結する方法があるんやけど、dosとかパワーシェルとかになかった。

でもdosで実現されている方がいて、それを改造して流用させてもらった。

 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
32
33
34
35
36
37
38
@echo off
rem --- set initial env
set HOMEDIR=Y:¥etc¥work           ⭐️ 作業フォルダ指定しといてリロケータブルにしましょ、今はsambaのファイルシステム指定

rem --set day                       ⭐️ 作りかけたけど途中でとりやめになったところ
rem powershell "%HOMEDIR&¥BetweenDays.ps1;exit $LASTEXITCODE"
rem set REMAIN=%ERRRORLEVEL%
rem set echo REMAIN=%ERRORLEVEL%
rem pause
set REMAIN=12                       ⭐️ いったん残り日数を指定、本当はpowershellで計算させようとしてた
rem pause

rem --- get day
set TMP=%HOMEDIR%¥TMP.txt
set TMP1=%HOMEDIR%¥TMP1.txt
set TMP2=%HOMEDIR%¥TMP2.txt
set TMP3=%HOMEDIR%¥TMP3.txt
set REMAIN1=%REMAIN:~0.1%           ⭐️ このまま使ったら残り日数1桁になったときうまくいかんはず
set REMAIN2=%REMAIN:~1.1%           ⭐️ このまま使ったら残り日数1桁になったときうまくいかんはず

rem --- set dos window size
mode con: cols=150 lines=40         ⭐️ dos窓サイズを指定してんねん

rem --- echo main title
type %HOMEDIR%¥text¥もうすぐ.txt

rem --- echo days                   ⭐️ テキストファイルを縦に連結やなくて、横に連結すんねん

call %HOMEDIR%¥pasteCMD.bat %HOMEDIR%¥text¥あと.txt %HOMEDIR%text¥%REMAIN1%.txt %TMP1%
call %HOMEDIR%¥pasteCMD.bat %TMP1%                    %HOMEDIR%text¥%REMAIN2%.txt %TMP2%
call %HOMEDIR%¥pasteCMD.bat %TMP2%                    %HOMEDIR%text¥日.txt        %TMP3%
copy /Y $TMP3% %TMP%

type %TMP%
del /F %TMP% %TMP1% %TMP2% %TMP3% 

pause
exit

powershellは作りかけたけど途中でとりやめになった

テスト表示のサンプルを依頼者に見せると、「html使いましょ」ってことになったので作るの途中でやめた。

日付間の日数を計算させる処理を作ってたんやけどボツ。

返り値に数値してたんやけど、作業pcでpowershellの実行禁じられててストレートに動かずコメント化してた。

呼び出し先処理はこんな感じ。 今日から特定の日付(ここでは練習で4月1日ね)の日数差分を求めて返すだけ。

1
2
3
4
5
6
$future = @DateTime]::ParseExact("20240401","yyyyMMdd", $null);
$today = Get-Date ;
$span = $future - $today ;
Write-Host $span.Days;

exit $span

帰ってきた日数はファイル名指定に連動して、横連結するファイル名指定になるのよ。

テキストファイルを横に連結

dosならtype、linuxならcatで2つのファイルを上から順に表示させられる。 これを横に連結する。

例えば、1.txtと2.txtをtypeで縦に表示させると、こんな感じ。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20

  ■■
 ■ ■
   ■
   ■
   ■
   ■
   ■
   ■
   ■

  ■■■■  
 ■■  ■■ 
      ■ 
      ■ 
    ■■  
   ■    
  ■     
 ■      
 ■■■■■■■

これを横連結して表示させるのがpaste。

1
2
3
4
5
6
7
8
9
  ■■     ■■■■  
 ■ ■    ■■  ■■ 
   ■         ■ 
   ■         ■ 
   ■       ■■  
   ■      ■    
   ■     ■     
   ■    ■      
   ■    ■■■■■■■

ここは1から作るの苦しいから、ググってみたら出てきた。 作者さんありがとう。

そのままだと思った動きにはならないので、pasteの本体がこんな感じで書いておいて呼び出し。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
set OUTPUT=%3
set IPT1=%1
set IPT2=%2
if exist %OUTPUT% del %OUTPUT%
set N=0
set S=
for /F "tokens=1* delims=: eol=" %%A in ('findstr /n "^" %IPT1%') do call :sub "%%B"
goto :eof
:sub
for /F "%S% tokens=1* delims=: eol=" %%C in ('findstr /n "^" %IPT2%') do >> %OUTPUT% echo.%~1 %%D&goto next
:next
set /A N+=1
set S=skip=%N%

連結するテキストファイルでちょっと工夫しなきゃいけないのは、数字のテキストファイルを全部同じ行数・横幅にしとく。

あと、他に表示させるテキストは行数を数字のテキストファイルとそろえとく。

これで表示はされる。

windows版のpasteは機械学習なんかでデータ連結をwindows側でやりたいときなんかにも使えるんとちゃうか。

またいつか思い出したらこのメモ使おっと。