月次で行う作業で、大量のテキストファイルから特定の文字列を含むファイルを抽出してZIP化する作業を行っている。
流石にファイルを一個ずつエディタで開いて、特定文字列を検索して確認するのも面倒なのでスクリプト化。
今後、いろんなところで使いそうなのでメモ。。。
設定内容やプログラムの内容は、用途・環境に応じて適切なものが変わります。
各種設定値や環境情報についてよく理解を深め、壊れても良い環境でくまなく検証してください。
なるべく正確に書くように心掛けていますが、本投稿内容を実施される際には自己責任の下でお願い致します。
今回の環境
利用しているOS:Windows11
今回作るスクリプトの仕様(と前提となる条件)
今回の要件は下記の通り。
- Windows11のPowershellで実行できる。
- テキストファイルが配置されているカレントディレクトリ上でPowershellを実行する。
- スクリプトを実行すると、標準入力から検索キーワードを入力する。
- カレントディレクトリ内の「.txt」ファイルから検索キーワードを含むファイルをピックアップし、カレントディレクトリ内にZIPファイルを作成する。
- 作成するZIPのファイル名は、「<検索キーワード>_<yyyyMMddhhmmss>.zip」の形式
実際のコード
# 検索するキーワードを標準入力から入力
$searchStr = Read-Host "検索するキーワードを入力してください"
# 内部で使う変数
$resultFileArray = @()
$fileTimestampString = (Get-Date).ToString("yyyyMMddhhmmss")
# カレントディレクトリの*.txtから文字列を検索し配列にフルパスを格納
$targetFileList = Select-String -path *.txt -pattern $searchStr
foreach($targetFile in $targetFileList){
# 既に登録しているフルパスは除外
if(!$resultFileArray.Contains($targetFile.Path)){
$resultFileArray += $targetFile.Path
}
}
# 圧縮処理
foreach($resultFilePath in $resultFileArray){
Compress-Archive -Path $resultFilePath -DestinationPath ($searchStr + "_" + $fileTimestampString + ".zip") -Update
}
実行時
PS C:\Users\<ユーザー名>\Desktop\検索対象> dir
ディレクトリ: C:\Users\<ユーザー名>\Desktop\検索対象
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2023/06/12 18:37 1462 167_2023-05_result (1).txt
-a---- 2023/06/12 18:37 1459 167_2023-05_result (10).txt
-a---- 2023/06/12 18:37 2085 167_2023-05_result (11).txt
-a---- 2023/06/12 18:37 9394 167_2023-05_result (12).txt
-a---- 2023/06/12 18:37 9107 167_2023-05_result (13).txt
-----------------------8<------------ 省略 -----------------------8<------------
PS C:\Users\<ユーザー名>\Desktop\検索対象> C:\Users\<ユーザー名>\Desktop\Nextcloud\bin\PowershellScripts\searchAndZipper.ps1
検索するキーワードを入力してください: 無償
PS C:\Users\<ユーザー名>\Desktop\検索対象>
-----------------------8<------------ 省略 -----------------------8<------------
PS C:\Users\<ユーザー名>\Desktop\検索対象> dir
ディレクトリ: C:\Users\<ユーザー名>\Desktop\検索対象
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2023/06/12 18:37 1462 167_2023-05_result (1).txt
-a---- 2023/06/12 18:37 1459 167_2023-05_result (10).txt
-a---- 2023/06/12 18:37 2085 167_2023-05_result (11).txt
-a---- 2023/06/12 18:37 9394 167_2023-05_result (12).txt
-a---- 2023/06/12 18:37 9107 167_2023-05_result (13).txt
-a---- 2023/06/12 18:37 1538 167_2023-05_result (14).txt
-----------------------8<------------ 省略 -----------------------8<------------
-a---- 2023/06/12 18:37 1294 167_2023-05_result (8).txt
-a---- 2023/06/12 18:37 4079 167_2023-05_result (9).txt
-a---- 2023/06/12 23:24 1456 無償_20230612112410.zip <ーーー作成されたZIP
PS C:\Users\<ユーザー名>\Desktop\検索対象>