Kenichi Maehashi's Blog

脳内コアダンプ

RSS
Category: Computer
ということが可能かどうか、少し前に身の回りで話題になったのですが、ちょっと暇になったので作ってみました(素直に VBScript とかに投げればいいのにねぇ...)。

まずは、コンピュータ名のランダム生成から。
バッチスクリプターが一番読まなきゃいけないヘルプは set /? と cmd /? だと思った。

えー、展開時に動的に生成される変数である %RANDOM% を使います。
こいつは「0 から 32767 の間の任意の 10 進数」を返してくれるので、911 で割って 0~35 に転置します(32767 / 36 = 910.194... なので、微妙に 35 の出る確率が低いのはご愛嬌)。
0~9 ならそのまま数字として使用、10~35 は大文字アルファベットに変換します。
バッチファイル内で「ASCII コード→文字」の変換を行う方法が見つからなかったので、かなりドロドロしてます。

ランダムな文字列を発生させるバッチファイル
Syntax: GENRAND [文字数] (デフォルト = 1)
GENRAND.BAT
@echo off
:START
SETLOCAL
SET GENRAND_CHARS=%1
SET GENRAND_CALLBACK=SHOWRESULT
GOTO GENRAND

:SHOWRESULT
ECHO %GENRAND_RESULT%
GOTO END

:GENRAND
SET GENRAND_RESULT=
:GENRAND_START
SET /A GENRAND_TEMP=%RANDOM%/911
IF "%GENRAND_TEMP%" == "10" SET GENRAND_TEMP=A
IF "%GENRAND_TEMP%" == "11" SET GENRAND_TEMP=B
IF "%GENRAND_TEMP%" == "12" SET GENRAND_TEMP=C
IF "%GENRAND_TEMP%" == "13" SET GENRAND_TEMP=D
IF "%GENRAND_TEMP%" == "14" SET GENRAND_TEMP=E
IF "%GENRAND_TEMP%" == "15" SET GENRAND_TEMP=F
IF "%GENRAND_TEMP%" == "16" SET GENRAND_TEMP=G
IF "%GENRAND_TEMP%" == "17" SET GENRAND_TEMP=H
IF "%GENRAND_TEMP%" == "18" SET GENRAND_TEMP=I
IF "%GENRAND_TEMP%" == "19" SET GENRAND_TEMP=J
IF "%GENRAND_TEMP%" == "20" SET GENRAND_TEMP=K
IF "%GENRAND_TEMP%" == "21" SET GENRAND_TEMP=L
IF "%GENRAND_TEMP%" == "22" SET GENRAND_TEMP=M
IF "%GENRAND_TEMP%" == "23" SET GENRAND_TEMP=N
IF "%GENRAND_TEMP%" == "24" SET GENRAND_TEMP=O
IF "%GENRAND_TEMP%" == "25" SET GENRAND_TEMP=P
IF "%GENRAND_TEMP%" == "26" SET GENRAND_TEMP=Q
IF "%GENRAND_TEMP%" == "27" SET GENRAND_TEMP=R
IF "%GENRAND_TEMP%" == "28" SET GENRAND_TEMP=S
IF "%GENRAND_TEMP%" == "29" SET GENRAND_TEMP=T
IF "%GENRAND_TEMP%" == "30" SET GENRAND_TEMP=U
IF "%GENRAND_TEMP%" == "31" SET GENRAND_TEMP=V
IF "%GENRAND_TEMP%" == "32" SET GENRAND_TEMP=W
IF "%GENRAND_TEMP%" == "33" SET GENRAND_TEMP=X
IF "%GENRAND_TEMP%" == "34" SET GENRAND_TEMP=Y
IF "%GENRAND_TEMP%" == "35" SET GENRAND_TEMP=Z
SET GENRAND_RESULT=%GENRAND_RESULT%%GENRAND_TEMP%
SET /A GENRAND_CHARS=%GENRAND_CHARS%-1
IF %GENRAND_CHARS% LEQ 0 GOTO %GENRAND_CALLBACK%
GOTO GENRAND_START

:END

GENRAND_CALLBACK というのが何やらアセンブラチックで興奮しますね。(しないって
大量の分岐行はこんな感じで生成。
perl -e 'for($i=10;$i<36;$i++){$n=$i+55;print "IF \"%GENRAND_TEMP%\" == \"$i\" SET GENRAND_TEMP=",chr $n,"\n";}'
(コマンドプロンプトだとうまく動かないかも。bash on Cygwin とかでどうぞ)

コンピュータ名の変更については、こんな方法があるらしいです(net コマンドじゃ出来ないんだ、意外...)。
コマンドでのコンピュータ名変更方法について - OKWave
ここに書いてあった wmic というのを実行したら、
「WMIC をインストールしています。しばらくお待ちください。」
とか出てきたので、システムを何らかの形で書き換えるっぽいです。特に悪影響は無いと思いますが、ご注意を。

Comments

ozaki takashi
2008/03/29
>少し前に身の回りで話題になったのですが

周りの人も凄いね…
てか、全然分かんないですよww
楽しんでるのは分かるんだが…
2008/03/30
周りがすごい人だらけのところに放り込まれてしまったので、毎日が刺激的です。
今回のエントリは、「限られた条件でこんなことができたよ!」ということに興奮する気持ち悪い人のお話でした(ぇ
Leave Yours...
Name:
E-mail / URL (optional):
Comment:
Are You Robot?: