普段の仕事で簡単なスクリプトが必要になった時は、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 コメント:
コメントを投稿