Windowsでフォルダ内の文字列検索をしてファイルに出力する方法

特定の文字列を含むファイルを探したいとき、Unix系ではgrepを使うと実現できます。Windowsではコマンドプロンプトから「findstr」「find」が使えましたが、UTF8が利用できませんでした。PowerShellの「Select-String」を使えばUTF8のファイルを検索することができます。

PowerShellで「Select-String」(sls)を使う

使い方

PowerShellではSelect-Stringを使うと、フォルダ内のファイルから特定の文字列を持つ行を検索できます。検索テキストには正規表現が利用可能です。対象ファイルの文字コードをUTF8として、大文字と小文字の区別なく検索します。

select-string "検索テキスト" *.txt

Select-Stringは短縮形slsが利用できます。

sls "検索テキスト" *.txt

サブフォルダも含めて検索するには、dir -recurseを使います。

sls "検索テキスト" (dir -recurse *.txt)

ファイルに保存

次のようにするとリダイレクトでファイルに保存できます。ただし、出力ファイルはUTF16で、改行による整形が行われます。

sls "検索テキスト" (dir -recurse *.txt) > result.log

出力ファイルの文字コードや改行位置を変えるには、パイプでOut-Fileを利用します。UTF8は「BOMあり」になります。

sls "検索テキスト" (dir -recurse *.txt) | out-file result.log utf8 -width 9999

改行位置については次の方法でも変更できます。PowerShellのウィンドウ左上のアイコンを右クリック→プロパティ→「レイアウト」タブを開く。「画面バッファーのサイズ」にある「幅」の数値を変更します。この方法では、画面上の折り返し位置も変わります。

主なオプションなど

大文字・小文字を区別する。

sls "検索テキスト" *.txt -casesensitive

文字列の単純一致を検索する(正規表現を使用しない)。

sls "検索テキスト" *.txt -simplematch

検索に使用する文字コードを変更する。UTF7、UTF8、UTF32、ASCII、Unicode、BigEndianUnicode、Default、OEMが指定できる。

sls "検索テキスト" *.txt -encoding unicode

slsのヘルプを表示する。

get-help sls

コマンドプロンプトで「findstr」を使う

使い方

文字コードがShift_JISの場合は、コマンドプロンプトからfindstrで検索できます。既定では、大文字と小文字を区別して検索し、結果には行番号が付きません。検索テキストには一部の正規表現が利用可能ですが、単純な指定では空白を含んだ文字列は検索できません。(空白を含めると、複数のキーワードを指定したことになります)

findstr "検索テキスト" *.txt

次のようにすると、大文字と小文字を区別なく検索し、行番号をつけて表示します。

findstr /i /n "検索テキスト" *.txt

サブフォルダも含めて検索します。

findstr /s /i /n "検索テキスト" *.txt

次のようにするとリダイレクトでファイルに保存できます。

findstr /s /i /n "検索テキスト" *.txt > result.log

文字列の単純一致を検索する(正規表現を使用しない)場合は「/l」を追加します。

空白を含む場合

空白を含む場合は、/rと/cを使うと正規表現で検索できます

findstr /r /c:"検索テキスト" *.txt

次のようにすると、大文字と小文字を区別なく検索し、行番号をつけて表示します。

findstr /i /n /r /c:"検索テキスト" *.txt

サブフォルダも含めて検索します。

findstr /s /i /n /r /c:"検索テキスト" *.txt

次のようにするとリダイレクトでファイルに保存できます。

findstr /s /i /n /r /c:"検索テキスト" *.txt > result.log

文字列の単純一致を検索する(正規表現を使用しない)場合は「/r」を省略します。

そのほか

findstrのヘルプを表示します。

findstr /?

コマンドプロンプトには、機能の少ない「find」もあります。正規表現は使えません。詳細はヘルプをご覧ください。

find /?

wp_optionsやwp_postmeta等の番号を振りなおす

WordPressを使用していると、データベースのwp_optionsテーブルやwp_postmetaテーブルが大きくなってきます。それとともに、記事の更新などによりIDがとびとびになってきます。そんな時、IDを連番に付け直す方法のメモです。

方法

データベースを操作しますので、事前にバックアップを取ります。そのあと、SQL文を実行します。

なお、「wp_postsテーブルのID」や「wp_termsテーブルのterm_id」などは、他のテーブルから参照されているため、単純に変更することはできません。

options

テーブル名がwp_optionsの場合

# 番号を振りなおす
SET @n := 0;
UPDATE wp_options SET option_id = (@n := @n +1) ORDER BY option_id;

# AUTO_INCREMENTを変更(自動的に最大値+1になる)
ALTER TABLE wp_options AUTO_INCREMENT = 1;

postmeta

テーブル名がwp_postmetaの場合

# 番号を振りなおす
SET @n := 0;
UPDATE wp_postmeta SET meta_id = (@n := @n +1)  ORDER BY meta_id;

# AUTO_INCREMENTを変更(自動的に最大値+1になる)
ALTER TABLE wp_postmeta AUTO_INCREMENT = 1;

メモ

AUTO_INCREMENTの値は次のように取り扱われます。

新しい行に使用される AUTO_INCREMENT カウンタの値を変更するには、次のようにします。

ALTER TABLE t2 AUTO_INCREMENT = value;

このカウンタを、現在使用されている値以下の値にリセットすることはできません。InnoDB と MyISAM のどちらの場合も、この値が現在 AUTO_INCREMENT カラム内にある最大値以下である場合、この値は現在の AUTO_INCREMENT カラムの最大値に 1 を加えた値にリセットされます。

引用元:MySQL 5.6 リファレンスマニュアル - ALTER TABLE 構文
http://dev.mysql.com/doc/refman/5.6/ja/alter-table.html

このためvalueに1を指定しておけば、最大値+1の値にリセットできます。

# AUTO_INCREMENTを変更(自動的に最大値+1になる)
ALTER TABLE wp_options AUTO_INCREMENT = 1;

しかし以前のInnoDBは動作が異なり、最大値より小さい値を指定すると変更されませんでした。この場合は、次のような方法があります。

# 番号を振りなおす
SET @n := 0;
UPDATE wp_options SET option_id = (@n := @n +1) ORDER BY option_id;

# AUTO_INCREMENTを変更
SET @sql := CONCAT('ALTER TABLE wp_options AUTO_INCREMENT = ', @n +1);
PREPARE change_auto_increment FROM @sql;
EXECUTE change_auto_increment;
DEALLOCATE PREPARE change_auto_increment;

なお、phpMyAdminではテーブルの「操作」タブの「AUTO_INCREMENT」欄から変更することもできます。

ImageMagickとPHP:Imagickをインストールする(Windows)

Windows上でApacheが動いている環境に、ImageMagickとPHPのImagickをインストールした方法のメモです。

注意

ImageMagickは脆弱性の問題が報告されました。ここで示しているバージョン(ImageMagick6.9.3-7)には問題があります。バージョン6.9.3-10で修正が行われています。

ImageMagick に入力値検証不備の脆弱性
http://jvndb.jvn.jp/ja/contents/2016/JVNDB-2016-002443.html

Imagickのダウンロード

PECLからImagickをダウンロードします。
http://windows.php.net/downloads/pecl/releases/imagick/

PHPのバージョン、ts(Thread Safe)/nts(Non Thread Safe)、コンパイラのバージョン(vc11等)、x64(64bit)/x86(32bit)で区別されています。phpinfoで自分の環境を確認して、適するものを選びます。

ImageMagickのダウンロード

ImageMagickのサイトでは、Windows向けのファイルも配布されていますが、Imagickから利用できるファイルを探す必要があります。

PECLではImagickから利用できるImageMagickが配布されていますので、対応するImageMagickをダウンロードします。
http://windows.php.net/downloads/pecl/deps/

ImageMagickのインストール

ダウンロードしたImageMagickを解凍し、例えば C:\ImageMagick6.9.3\ に配置します。

次に、ImageMagickのbinフォルダにパスを通します。Windowsの環境変数PATHの先頭にC:\ImageMagick6.9.3\binを加えます。ImageMagickにはconvertコマンドがありますが、Windowsのconvertコマンドと同じ名前なので注意が必要です。

Imagickのインストール

ダウンロードしたImagickを解凍し、php_imagick.dllをPHPのextフォルダに入れます。

php.iniに次の設定を加えます。「Dynamic Extensions」の最後に追加すれば良いでしょう。

extension=php_imagick.dll

再起動

Windowsを再起動します。phpinfoを表示するとimagickを確認できます。