<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>ものぐさ備忘録 &#187; Windows</title>
	<atom:link href="http://www.ginriki.net/wd/category/windows/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.ginriki.net/wd</link>
	<description>ソフトウェア関係の話を中心とした備忘録的日記</description>
	<lastBuildDate>Sun, 16 Jan 2011 20:07:53 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.5</generator>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>バッチファイル作成ノウハウ</title>
		<link>http://www.ginriki.net/wd/2010/06/21/162/</link>
		<comments>http://www.ginriki.net/wd/2010/06/21/162/#comments</comments>
		<pubDate>Sun, 20 Jun 2010 18:32:26 +0000</pubDate>
		<dc:creator>ginriki</dc:creator>
				<category><![CDATA[Windows]]></category>
		<category><![CDATA[bat]]></category>

		<guid isPermaLink="false">http://www.ginriki.net/wd/?p=162</guid>
		<description><![CDATA[Windowsのバッチファイルを作る機会があったので、その時のノウハウメモ。
サービスの状態確認
サービスの起動・停止状態の出力させるには、sc.exe queryが使える。(ただし、Windows XP／Windows [...]]]></description>
			<content:encoded><![CDATA[<p>Windowsのバッチファイルを作る機会があったので、その時のノウハウメモ。</p>
<h3>サービスの状態確認</h3>
<p>サービスの起動・停止状態の出力させるには、sc.exe queryが使える。(ただし、Windows XP／Windows Server 2003以降)<br />
後は、findstr (Windows用のgrep)と合わせて使えばいい。</p>
<p>たとえば、タスクスケジューラが起動しているかどうかの確認バッチファイルを<br />
作ると以下の通り。</p>
<pre>@echo off

sc.exe query Schedule | findstr STATE | findstr RUNNING &gt; nul
if %ERRORLEVEL% == 1 echo Scheduler isn't running
if %ERRORLEVEL% == 0 echo Scheduler running</pre>
<p>実行結果（タスクスケジューラ起動時）は以下の通り。</p>
<pre>C:\&gt;service_check.bat
Scheduler running</pre>
<p>上のバッチファイルのコツは、</p>
<ul>
<li>無駄なecho表示を消すこと(@echo off)</li>
<li>findstrの出力をnull deviceに出力させること( &gt; nul)</li>
<li>findstrのマッチ結果を%ERRORLEVEL%で調べること</li>
</ul>
<p>ちなみに、nulというnull device名の歴史をたどると、古い順に、</p>
<p>PIP &gt; CP/M &gt; MS-DOS &gt; Windows</p>
<p>という流れで受け継がれてます。<sup>1</sup></p>
<h3>バッチファイル内の特殊記号</h3>
<p>バッチファイル上で、特殊記号として扱われるものがいくつかあります。<br />
例えば、括弧()が特殊記号です。このような記号を普通の文字として扱いたいときは、^を特殊記号の前に付ける必要があります。</p>
<p>例は以下の通り。</p>
<pre>
@echo off
if 1 == 1 (
  echo foo ^(bar^) baz
)
</pre>
<pre>
C:\>with_hat.bat
foo (bar) baz
</pre>
<p>ちなみに^を抜くと、if文の終端(=echoの終わり)がbarの直後と判断されてしまい、<br />
その後のbazをコマンドとみなして実行するためエラーになります。</p>
<pre>
C:\>no_hat.bat
baz の使い方が誤っています。
</pre>
<p>他の特殊記号については、<a href="http://wiki.livedoor.jp/niloufar/d/%A5%B3%A5%DE%A5%F3%A5%C9%A5%D7%A5%ED%A5%F3%A5%D7%A5%C8%A4%F2%BB%C8%A4%A6">このWiki</a>を参照してください。</p>
<ol class="footnotes"><li id="footnote_0_162" class="footnote">PIPの<a href="http://ja.wikipedia.org/wiki/Peripheral_Interchange_Program">Wikipediaページ</a>とか、MSDNの<a href="http://msdn.microsoft.com/en-us/library/Aa365247">予約ファイル名の説明</a>とか参照。</li></ol>]]></content:encoded>
			<wfw:commentRss>http://www.ginriki.net/wd/2010/06/21/162/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

