2013/09/01
shell script と cmd bat の参考
めっちゃ参考になるわー。
- Yakst - 私が他人のシェルスクリプトから学んだこと
- 開発に役立つ,BATファイルの書き方・パターン集 (コマンドプロンプトの定石を体系的に学び,バッチ中級者になろう) - 主に言語とシステム開発に関して
先日batを作った時にtempファイルとして「ファイル名が日時のファイルを作る」ところで0埋めフォーマットできてなくて午前中だけ動かないbatを作ってしまった。
2013/06/13
2013/06/11
androidから会社のPCを起動してssh越しにリモートデスクトップ
必要なもの
- 外からsshでログインできる社内のサーバー
方法
まずはリモートデスクトップ接続する会社のPCを起動。うちの場合は同僚がwolパケットを投げつけるGaucheスクリプトを書いてくれているのでそれを使っている。serverにsshでログインしてそのスクリプトを叩くだけなのでandoroidからでもいける。connectbotとかで。次にsshトンネリング。
% ssh valvallow@server -L 12345:192.168.1.42:3389 -NWindowsの場合、mysysgitなんかを入れてればmsysgitのbinの中にsshがあるので、下記のようなbatを作っとくと良い。
C:\msysgit\msysgit\bin\ssh valvallow@server -L 12345:192.168.1.6:3389 -Nほんでリモートデスクトップ接続。windowsからならmstsc。ubuntuとかならvinagreとかからlocalhost:12345に接続で完了。
追記
2013/03/25
雑なリマインダ その2
以前、こんなものを作った。
こんな雑なbatだけど今でも使っている。でもタスクバーにcmdが出っぱなしなのでうざい。間違って閉じてしまうこともある。ということで、改良というより作りなおしてwindows標準のタスクスケジューラに登録するようなものにした。Windows7だと動くと思います。
タスクは実行されたあとに削除されるようになっている(/Zオプション)。ただ/ZオプションをつけただけだとXMLがどうのこうのというエラーが出るので/V1オプションを付けてある。
エラー: タスク XML に必須の要素または属性が含まれていません。 (41,4):EndBoundary:
タスクスケジューラに登録するID文字列を作るときに日付と時間を使ってるんだけど、そのフォーマット指定がえらいことになってる。
それと、結局使ってないけど、コマンドの結果を変数に保存するのにforを使う必要があるらしく、これもやけに大変だな・・・。勉強になるなぁ(白目
@FOR /F "usebackq tokens=*" %%i in (`DATE /T`) DO @SET TASK_CREATE_DATE=%%i
ついでにメモしておくと、unixでいう cat は type、diff は fc、traceroute は tracert、grep は findstr、ifconfig は ipconfig 辺りで代用できるって認識で良いのかね。more、arp、ping、netstat、nslookup なんかは同じのがあるようで。
2012/10/19
2009/10/08
TFS - チームプロジェクトを削除する
TFS : Team Foundation Server
開発の超力強い味方。
使い始めた頃に安易にチームプロジェクトを作りまくって削除方法がわからず困ったのでメモ。
- Microsoft Visual Studio 9.0\Common7\IDE\TFSDeleteProject.exe を叩く。以上。
GUIでの削除はできない。Batを作っておくと便利。
| @Rem ------------------------------------------------------------- @CD C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE @Pause >nul @Set s="" |
2009/05/11
[Sql][bat]bcpでSelect文を実行する
bcp "USE DbName Select * From HogeTable" queryout "c:\select.log" -t "," -c -U user -P ****
osqlの方が一般的ですね。
@osql -Uuser -P**** -Sservername -ddbname -q "SELECT * FROM HogeTable"
[bat]ネットワーク内の使用されているIPアドレスを調べる
この場合、192.168.1.0 ~ 192.168.1.254までpingしてそのログを吐きます。
片っ端ping.bat
| for /l %%a in (0,1,255) do (ping -a -n 1 -w 1 192.168.1.%%a | find "Pinging") >> ping.log notepad ping.log goto :EOF |
[bat][Gauche]同階層にあるGaucheスクリプトを全て実行
だったと思う。バッチの中身見ても良くわからないところがある。
「%~n0」←これなんだっけ・・・。
| @Echo -------------------------------------------
@Echo;
@Echo ----- Execute Sibling Gauche Scripts -----
@Echo ----- Results -----
@Echo ----- Executed FileNames -----
:End
@Echo ----- Press any key to exit -----
@Set c="";
:EOF |
- 追加:
- 「%~n0」
- 思い出した。これ自分自身の名前だ。bat自身の。たぶん。
[bat][sql]bcpでcsvを取り込む/吐き出す
bcp in
| SET U=user SET P=**** SET S=(local) bcp "DbName..TableName" in "TableName.csv" -t "," -c -r -S %S% -U %U% -P %P% |
bcp out
| SET U=user SET P=*** SET S=(local) bcp "DbNname..TableName" out "TableName.csv" -t "," -c -r -S %S% -U %U% -P %P% |
[bat][Sql]テーブルの値をバッチで切り替える
DBのテーブルの値を頻繁に切り替えたいことがありますよね。そういうときにこういうBatを用意してます。テストの時とか現地で切り替えたいときとか・・・。まぁいろいろ応用も利きます。
これはMSSQL用です。
| @ECHO *********************************************************** @SET /p USERNM="ログインユーザ名→" @osql -U%USERNM% -P%PASSWORD% -S%SEVERNM% -d%DBNM% -Q"UPDATE HogeTable SET FooColumn =%Value%" > NUL @SET USERNM="" |
[bat]IPアドレスのon/off
家と会社でIPアドレス関連の設定を切り替えているので・・・、こんなバッチをコマンドランチャから実行してます。
IpOn.bat
| netsh interface ip set address "ローカル エリア接続" static 192.168.1.215 255.255.255.0 192.168.1.254 none |
IpOff.bat
| netsh interface ip set address "ローカル エリア接続" dhcp |
2009/04/19
[C#]Update, Insert, Batそれぞれを生成
厳密なものじゃないです。Update文とかWhere条件はANDだけ(笑
ソースはここ。
事前にXMLでCSVのカラム番号とテーブルのカラム名を対応付けておいて、インポートみたいな。
- XML:PairsでCSVのインデックスとテーブルのカラム名を対応付ける
- XML:KeysでテーブルのキーカラムとCSVのキーインデックスを対応付ける
- XML:ConfigでPairs、Keys、CSVファイル、テーブル名を設定
- 設定はPairクラスの配列をシリアライズ/デシリアライズ(XmlSerializer)
できることは
- CSVをDBにInsert
- CSVを元にDBをUpdate
- CSVを元にInsert文生成
- CSVを元にUpdate文を生成
- それらのInsert文やUpdate文のスクリプトを実行するBatを作成
- それらのBatをまとめて実行するBatを作成
- そのためにCallを試した
残念ながらこれもソースを全て公開できる状態ではないので一部をうp・・・。
そうはいってもほとんど入ってるけど。
2009/04/18
[Bat]Callのテスト
このご時勢にBatジェネレータを書こうと・・・。で、まぁCallのテストしたわけです。
他のBatをCallで呼んだ時に、制御が戻るまで待ってくれるかのテスト。
hello.bat
| echo "hello, world" |
hello2.bat
| echo "hello, world" |
callhello.bat
| echo call hello pause |
そういえばこういの持ってたw ↓
Windows DOS/コマンドプロンプト辞典 posted with amazlet at 09.04.18 飯島 弘文 翔泳社 売り上げランキング: 76183 おすすめ度の平均: |
2009/02/27
[bat][バッチ][コマンドライン]Windowsのバッチとかコマンドラインとか
会社と家でネットワークの設定を切り替えたりしたい時。IPアドレス等の設定って面倒ですよね。わざわざネットワークの設定画面開くのとか。
会社でノートパソコン使ってる人なんかは、家と会社で設定が違うので大変です。今までは、拾ってきたバッチを使ってたんですが、懐かしくってちょっとバッチプログラミングしてみましたので晒してみます。
下の方に一部解説とか、小技載せてみましたw
結構おもしろかった(笑)こんどWindows DOS/コマンドプロンプト辞典でも読みなおして遊んでみようかな~w
今まで使ってたやつ。
これらを家で会社でコマンドランチャからピコってやってます。
| @Rem IPON.bat @Rem 会社用 netsh interface ip set address "ローカル エリア接続" static 192.168.1.215 255.255.255.0 192.168.1.254 none netsh interface ip set dns "ローカル エリア接続" static 192.168.1.254 |
| @Rem IPOFF.bat @Rem 家 netsh interface ip set address "ローカル エリア接続" dhcp netsh interface ip set dns "ローカル エリア接続" dhcp |
で、別に上記のものでよかったのですが、というより、上記のものの方が良かったかもしれませんが、ONとOFFを一緒くたにしたのを作ってみました。結構楽しかったw
(コピーすれば使えますが、DEFAULTラベルのところの値はお使いの環境用に書き換えて下さい。)
| @Echo Off Echo --------------------------------------------------- Echo --- Change Network Config --- Echo --- 2009/02/26 valvallow --- Echo --------------------------------------------------- :TOP Echo. Set AREA="ローカル エリア接続" Set line=--------------------------------------------------- IPConfig | Find ". : " Echo. :Menu Echo %line% Set /p m="* Select memu 0:? / 1:on / 2:off / 3:end * " If %m%==0 (GoTo HELP) If %m%==1 (GoTo IP_ON_CONFIG) If %m%==2 (GoTo EXEC_OFF) If %m%==3 (GoTo END) ELSE (GoTo END) :IP_ON_CONFIG Echo %line% Set /p m="* 0:input / 1:default * " If %m%==0 (GoTo INPUT) If %m%==1 (GoTo DEFAULT) ELSE (GoTo END) :DEFAULT Set IP=192.168.1.215 Set SubNetMask=255.255.255.0 Set DefaultGateway=192.168.1.254 Set DNS=192.168.1.254 GoTo EXEC_ON :INPUT Echo %line% Set /p IP="IP Address = " Set /p SubNetMask="Sub Net Mask = " Set /p DefaultGateway="Default Gateway =" Set /p DNS="DNS = " GoTo EXEC_ON :EXEC_ON Echo %line% Echo AREA=%AREA% Echo IP=%IP% Echo SubNetMask=%SubNetMask% Echo DefaultGateway=%DefaultGateway% Echo DNS=%DNS% Echo %line% Echo now setting.... Netsh Interface IP Set Address %AREA% static %IP% %SubNetMask% %DefaultGateway% none Netsh Interface IP Set DNS %AREA% static %DNS% Echo %line% IPConfig | Find ". : " GoTo END :EXEC_OFF Echo %line% Echo AREA=%AREA% Echo IP="" Echo SubNetMask="" Echo DefaultGateway="" Echo DNS="" Echo %line% Echo now setting.... Netsh Interface IP Set Address %AREA% dhcp Netsh Interface IP Set DNS %AREA% dhcp Echo %line% IPConfig | Find ". : " GoTo END :HELP Echo %line% Echo "Help" Echo 0:? Call Help Echo 1:on Network Configs ON (Input or Default Values) Echo 2:off Network Configs OFF (To Empty) Echo 3:end Exit this bat GoTo Menu :END Echo %line% Set /p continue="* Exit or Continue? e/c * " If %continue%==c (GoTo Menu) Set AREA="" Set IP="" Set SubNetMask="" Set DefaultGateway="" Set DNS="" Set continue="" Set line="" Set m="" :EOF |
少しだけかいつまんで解説でも。
| Setで変数に値をセット。 |
| Set hoge="hoge" Set moge=1 |
| 変数を使用する際は%で囲む。 |
| Echo %hoge% |
| 実行するとコンソールにhogeってでます。 |
| コメント |
| Rem コメント |
| 出力 |
| Rem コンソールに出力 Echo Hello, worlld !! Rem 指定したテキストに出力 Echo Hello, world !! > C:\log.log Rem 指定したテキストに追記 Echo Hello, world !! >> C:\log.log Rem どこにも出力しない Echo Hello, world !! > nul Rem 改行 Echo. |
| 条件分岐 ()で囲めば複数のコマンド可 |
| If %m%==3 (GoTo END) ELSE (GoTo END) |
| 入力を変数に受け取る Set /p 変数 |
| Set /p m="* Select memu 0:? / 1:on / 2:off / 3:end * " |
| パイプ(コマンドの出力を次のコマンドに渡す) |
| Rem IPConfigの結果から". : "という文字列がある行だけ出力 IPConfig | Find ". : " |
| ラベル (GoTo ラベル名 でジャンプ) |
| :DEFAULT |
以下、上記のファイルとは関係ありませんが・・・
| 今日の日付が取れます。 下記の結果は20090227 |
| Echo %date:/=% |
| forループもあります。 下記の例だと192.168.1.1 ~ 192.168.1.254までのIPアドレスにpingを打ちます(笑)ping結果はIP.txtに保存されます。意外に結構役に立つ。 |
| for /L %%f in (1,1,254) do ping -n 1 -w 50 192.168.1.%%f >>IP.txt |
後は関係ないけど、SQLサーバー向けとか、思い出したのでついでに。
| SQLServerが入ってれば・・・ クエリ発行バッチとか作れたりします。 |
| @SET /p SERVERNAME="サーバー名→" @SET /p DBNAME="データベース名→" @SET /p USERNAME="ユーザー名" @SET /p PASSWORD="パスワード→" @SET Q="DELETE FROM HogeTable" @osql -U%USERNAME% -P%PASSWORD% -S%SERVERNAME% -d%DBNAME% -Q%Q% |
| もちろんSELECTも可。結果がコンソールに表示される。 |
| @SET /p SERVERNAME="サーバー名→" @SET /p DBNAME="データベース名→" @SET /p USERNAME="ユーザー名" @SET /p PASSWORD="パスワード→" @SET Q="SELECT * FROM HogeTable" @osql -U%USERNAME% -P%PASSWORD% -S%SERVERNAME% -d%DBNAME% -Q%Q% |
さらに関係ないけど、しょぼいフォルダ検索とかw
| Pathに探したいディレクトリのパス、eに拡張子を入れると、ヒットしたファイルがコンソールに一覧され、冗長ですが、ログファイルにも同じだけループして結果を書き出します。(再帰探索はしません) ポイントはログ名。「%~n0」で実行されている自分自身の名前を取れます。 |
| @Set /p d="Path : " @Set /p e="Extention : " @Echo --------------------------------------------------- @for %%a in (%d%\*%e%) do @echo %%a @for %%a in (%d%\*%e%) do @echo %%a >>%~n0.log @Echo --------------------------------------------------- @Echo ----- Press any key to exit ----- @pause > nul |
参考はこちら
| netsh interface ipコマンドでIPアドレスを設定する http://itpro.nikkeibp.co.jp/article/COLUMN/20060809/245476/ 持ち歩いているノート PC で簡単に TCP/IP の設定を変えたい http://www.monyo.com/technical/windows/26.html Rem ローカルエリア接続設定切替え用スクリプト(Windows2000/XP) http://www.bais.chubu.ac.jp/~tatsuoka/apnet21/page2.html |