Kenichi Maehashi's Blog
脳内コアダンプ
バッチファイルで Windows のコンピュータ名を自動生成しようぜ
Saturday | March 29, 2008
|
ということが可能かどうか、少し前に身の回りで話題になったのですが、ちょっと暇になったので作ってみました(素直に 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 をインストールしています。しばらくお待ちください。」 とか出てきたので、システムを何らかの形で書き換えるっぽいです。特に悪影響は無いと思いますが、ご注意を。
|
| コメント (2)
|
| コメント |
by ozaki takashi 2008/03/29
>少し前に身の回りで話題になったのですが
周りの人も凄いね… てか、全然分かんないですよww 楽しんでるのは分かるんだが…
|
by Kenichi Maehashi 2008/03/30
周りがすごい人だらけのところに放り込まれてしまったので、毎日が刺激的です。 今回のエントリは、「限られた条件でこんなことができたよ!」ということに興奮する気持ち悪い人のお話でした(ぇ
|
| |
<< 前ページ[1]
トップページに戻る
Copyright © 2006-2021 Kenichi Maehashi, All Rights Reserved.