- 北の空からみなみへ -
exblog staff

<< 砂場あそび /1(温故か懐古か... 温故か懐古か発掘か /2 >>
温故か懐古か発掘か /3
2018年 01月 24日
@if not "%~1/"=="!/!/" (goto start) else shift&shift&set exec$sub=%2&rem only sub exec[for debug and use tool]
set exec$sub>&2&set exec$sub=&goto %0&rem ←このgoto以降は戻ってこない
set exec$sub>&2&set exec$sub=&call :%0 %1 %2 %3 %4 %5 %6 %7&goto eof&rem ←こちら戻って来たのを終わらせてる
:start

:TST$mad
@rem for /f "tokens=1-30 delims=;" %%9 in ("%path%") do echo.%%~9&echo.%%~:&echo.%%~^;&echo.%%~^<&echo.%%~^=&echo.%%~^>&echo.%%~^?&echo.%%~@&echo.%%~A
for /f "tokens=1-8 delims=;" %%Z in ("%path%") do echo.%%~Z&echo.%%~[&echo.%%~^\&echo.%%~]&echo.%%~^^&echo.%%~^_&echo.%%~^`&echo.%%~a
for /f "tokens=1-4 delims=;" %%z in ("%path%") do echo.%%~{&echo.%%~^|&echo.%%~}&echo.%%~^~
exit/b
といったテスト用サブルーチンでも確かめたから、キャレット付きにすれば英数字(大文字小文字)〜一部記号までを1文字変数で使用可能なのは、コマンドライン限定ではない。
赤囲み Windows XP    緑囲み windows 10
c0062295_21250059.png
c0062295_22321712.png

上記の文字範囲が、連続して変数にできる文字。(漢字変数は文字コードが連続していてもダメケースを確認)
マルチバイトの記号領域はいけるかもだけど、確認検証は他人にお任せしたい。
単バイトの一部文字は特殊な意味・役割をもっているのだが、キャレット付きで変数として使用可能にしているという結論に。

for / f "tokenes=...." で、最大 tokens が31なのが残念。一気に長〜い展開できるなら、使い所があるかもです。




コマンドラインでもバッチでも 英数字以外にも関わらずこの無理やり連続文字を使えることを確認できた。

windows XP の方は、キャレット付きチルダまで変数対応文字。
c0062295_13474246.png

windows 10 の方は、チルダ文字はキャレットしても変数にはできなかった。
c0062295_14122758.png

そしてつらつら、tokensの最大が31となっている理由を想像するに、次の式を思い当たった。

たまにはバッチコマンド風な展開で、言いたいことを書いて締めてみよう。
・・・と思ったら意味不明になったので、単純に 汗;
・・・と思ったらさらに間違いが明らかなので、追記します 大汗;

set/a limit="1<<31"-1
こう論理シフトしてマイナス1してみる

2進数 0000000 00000000 00000000 00000001
こう⇨ 10000000 00000000 00000000 0000000 - 00000001
この数は10進数で、 -2,147,483,648 - 1 となる。
拙い解説で、この間を埋めると

2^31 - 1 = 1073741824 ← これはバッチ計算できる最大の正数(ん?2,147,483,647 ← こうはならない。
そして、set/a limit="1<<31"-1 ⇔ set/a limit="1<<30"

変数を格納する列数ってのは、そういうところ(4バイト・4オクテッド)のビット幅に由来する限界なのだろうか。ふとそう思った。
post at 2018.01/24
last edit at 2018.01/26

[PR]
by bucmacoto | 2018-01-24 13:37 | &Tips;&code; | Trackback | Comments(0)
トラックバックURL : https://bucmac.exblog.jp/tb/29170705
トラックバックする(会員専用) [ヘルプ]
名前
URL
画像認証
削除用パスワード
<< 砂場あそび /1(温故か懐古か... 温故か懐古か発掘か /2 >>
<< 砂場あそび /1(温故か懐古か... 温故か懐古か発掘か /2 >>