バッチファイルの中で%自体を使う方法

バッチファイルの中で”%”を表現したかったら”%%”と書くと良いですよ。というお話です。 バッチファイル。今でもたまに書きますよね。先日ちょっとだけハマったポイントがあったのでご紹介です。 SharePointで発行しているRSSをファイルとして配置したいという状況があり、簡単にやっつけたかったのでwgetで取得するコードをバッチファイルに書きました。以下のような感じです。 C:\Program Files\GnuWin32\bin>wget –output-document=e:\rss\sprss.xml “http:// sharepoint/sites/_layouts/15/listfeed.aspx?List=%7BF71E0F55-986D-4 CC0-97DA-2037A6243AF2D” wgetはunix系でよく使われる、コマンドラインでHTTPをお喋りしてリソースを取ってきてくれる便利コマンドです。 - [GNU Wget](http://www.gnu.org/software/wget/) 普通にコマンドプロンプトから実行したら成功するのに、バッチファイルから実行すると失敗してしまいました。調べてみると原因はURLに含まれている”%”でした。 バッチファイルの中では%というのは以下のように引数を表したりなど特殊な意味を持つのです。 - [Hey, Scripting Guy! スクリプトから起動するバッチ ファイルに複数のコマンド ライン引数を渡す方法はありますか](http://gallery.technet.microsoft.com/scriptcenter/b37357c4-4df0-4bbc-a814-59cdcddf5816) なので、バッチファイルの中で「%」自体を表す表現方法を見つけないといけなかったのですが…なかなか見つかりませんでした。で、適当に「%%」と書いてみたらうまく動いちゃいました。他のプログラム言語等でもよくあるパターンなのでこれでよいのだろうと判断しています。

June 13, 2014 · 1 min · 胡田昌彦

SCCM Clientがインストール済みかどうかを判定する方法

SCCM Clientがすでにインストール済みかどうかを判定する必要がありました。色々と方法が考えられます。 - インストールログ内の成功の時だけに出る文字列を探す - クライアントエージェントの実行ファイルの存在有無で判定する - レジストリ内にキーが存在するかどうかで判定する 他にも色々あると思います。 そんな中で今回は、クライアント上でサービスが存在しているかどうかを判定基準にすることにしました。具体的には以下のような感じです。 sc query CcmExec > nul if %errorlevel%==0 goto Installed :Not_Installed echo “SCCMクライアントはインストールされていません。” goto end :Installed echo “SCCMクライアントはインストールされています。” goto end :end 「CcmExec」というのがSCCM Clientのサービスの名前なのでその存在をscコマンドで確認しています。 2013/02/15追記 上記のロジックは、Windows7では正常に動作するのですが、WindowsXPでは正常に動作しないことがわかりました。Windows XPではsc query CcmExecが失敗してもerrorlevelとして0を返してくるからです。そこで以下のようにきちんとscコマンドの結果としてサービス名が表示されていることを判定するようにしました。これならWindows7, Xpの両方で動作します。その他OSは未テストですが、おそらくうまく動作すると思います。 [gist id=4958024]

February 12, 2013 · 1 min · 胡田昌彦

SCCM Clientがインストール済みかどうかを判定する方法

SystemCenter関連の記事は以下のブログに移行しました。 - [System Center Blog](http://ebi.dyndns.biz/systemcenter/) この記事は以下の記事に移行しました。 - [SCCM Clientがインストール済みかどうかを判定する方法 | System Center Blog](http://ebi.dyndns.biz/systemcenter/2013/02/12/sccm-client%E3%81%8C%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E6%B8%88%E3%81%BF%E3%81%8B%E3%81%A9%E3%81%86%E3%81%8B%E3%82%92%E5%88%A4%E5%AE%9A%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/)

February 12, 2013 · 1 min · 胡田昌彦

バッチファイルでWindows OSバージョンを判定する方法

バッチファイルでOSを判定する必要があったので、記録しておきます。 色々とやり方がありますが、今回はverコマンドの結果だけを見るようにしました。これだとサーバーOSなのかクライアントOSなのか見分けられませんが、そこまでみわけようと思うとsysteminfo.exeあたりの結果を見る必要があり、実行に時間がかなりかかってしまいます。カーネルが同じならできることはかなりの部分同じでありこの程度の分岐で事足りることも多いのではと思います。今回は必要なかったのでやりませんでしたが必要なら同じ要領でコマンドの結果からOS種類やServicePackの違いなどがわかる部分をfindコマンドで引っ掛ければさらに細かく分けられます。 [gist id=4722663]

February 6, 2013 · 1 min · 胡田昌彦

バッチファイルをExcelで作って省力化

大量に何かを操作するときには、やはりプログラムを書くなり、WSH、PowerShellなどでスクリプトを書くなりしてしまうのがいいです。でも、プログラムやスクリプトは敷居が高くて・・・という人も多いと思います。その考え自体は直したほうがいいと思いますが、気持ちはわかります。でも、だからといって、GUIで全部操作・・・というのは現実的に無理な規模があります。何とか手作業でがんばれるのはユーザー数100人前後まででしょうか。 で、そんな人にお勧めできるのがバッチファイルをExcelで作成する方法です。「Excelって表計算ソフトじゃないの?」と思うと思いますが、うまく使ってあげればコマンドを簡単に作成してあげることができます。 例えばユーザーを大量に作成する必要があるとして、そのユーザーのリストをExcelファイルでお客さんに作成してもらう、ということはありがちです。そうしたら、その1行が1ユーザーに対応しているわけですから、コマンドを作ってしまえばいいんです。/p pユーザーを作成するコマンドは別途調べないといけませんが、windowsであればnet userコマンド、ADであればdsaddコマンドあたりでいいでしょう。 Excelで相対参照とamp;での文字連結を使ってあげるだけでもこのくらいであれば非常に簡単にできちゃいます。サンプルは。 これをプログラムでやろうと思ったら、ファイルをオープンして、CSV形式を解釈して、ADに接続して・・・と結構手間がかかります。単純にコマンドを実行するだけでできることをやるのであればExcelを有効活用すると視野が広がると思います。 もちろん限界はありますが、プログラミングが苦手な人でもGUIで操作する以外の方法を考えるいいきっかけにはなるのではないでしょうか。

March 24, 2009 · 1 min · 胡田昌彦