2010年5月18日火曜日

【備忘録】8つのバッチファイル用のコードスニペット

普段の仕事で簡単なスクリプトが必要になった時は、Cygwinでシェルスクリプトを書く。でも、たまーに、1年に1回ぐら いバッチファイルを書く機会がある。1年に1回ぐらいだし、だいたい後ろ向きな理由で書くことが多いので、毎回同じようなことを検索してる。年に1回とは いえ、効率が悪いので、備忘録としていくつか書いておく。

正規表現で文字列検索:findstr

使ったオプショ ン

  • /v パターンにマッチしない行を抜き出す
  • /e 行末にマッチする
  • /c:"" ""内の文字列にマッチする
  • /i 大文字小文字の区別なくパターンマッチ

記述例

findstr /v /e /c:" " tree.txt
tree.txtから空白で終わらない行を抜き出す
findstr /v .txt$ tree.txt
tree.txtから.txtで終わらない行を抜き出す
findstr /v /e /c:" " tree.txt | findstr /v \.txt$ | find /v /c ""
tree.txtから.txtで終わらない行数をカウントする
findstr /v /e /c:" " tree.txt | findstr /i \.bak$ | find /v /c ""
tree.txtから.bak(大文字小文字区別なく)で終わらない行数をカウントする

文字列検索:find

使ったオプション

  • /v 文字列にマッチしない行を抜き出す
  • /c 文字列を含む行数をカウントする

記述例

find /v /c "" tree.txt
tree.txtから、空行じゃない行数をカウントする

ディレクトリ、ファイルの存在チェック→なかったらバッチ終了

if not exist ディレクトリ名 (
  echo %1% は存在しません。
  exit /b
)

カレントディレクトリのツリー構造をtree.txtに出力

tree /F > tree.txt

コマンド実行結果を変数に格納

for /f "delims=" %%F in ('実行したいコマンド') do set val=%%F
echo %val%

※実行したいコマンドが、パイプを使っている場合は、パイプを「^|」とエスケープする

echoで空行を出力する

echo:
※echoと:の間にスペースを入れない

カレントディレクトリ以下の.txtファイルを再帰的に処理する

for /r %%i in (*.txt) do (
echo %%i
)

CドライブからDドライブへ移動

cd /d d:\

最後に一言…頼むからCygwin使わせてよ!

0 コメント:

コメントを投稿