ファイル内のテキスト一覧から指定した文字数以下の文字列を抜き出す方法
こんにちは。thimiです。
今日は、ファイル内の文字列を抽出する方法です。
前回作成したファイル名のリスト一覧から、指定した文字数以下を
抜き出してみます。
https://thimi-lifehack.com/create_filelist/
Extract.bat | |
---|---|
@echo off | コマンドプロンプトへ非表示 |
rem 「Extract_list.csv」ファイルが既に存在する場合は削除 | rem:コメント(覚書記載) |
if exist Extract_list.csv del Extract_list.csv | 既にファイルがある場合は 一度削除する処理 |
for /F "tokens=* delims== eol=@ " %%l IN ('('findstr /R "^%1" filel_ist.csv') do ( | For文で繰り返し処理を実施 |
filel_ist.csvファイルの先頭行から正規表現で行単位で文字を取得 | |
set string=%%l | stringに取得した文字を保存 |
call:sub | subを呼び出し |
) | |
exit | |
:sub | :sub内容 |
echo %string:~-11,11%>>Extract_list.csv | stringの中身の後ろから数えて11番目から、11文字を抜き出してExtract_list.csvに書き出し |
バッチファイルの内容を簡単に説明します。
「for」コマンド
ループ処理コマンドです。
オプションとして「tokens=*」を追加することで、全てのトークンを取得して
変数「%%l」に代入しています。
※今回はすべて取得していますが、ここで「tokens=1,2,4」のように1番目と2番目と
4番目だけ取得!という設定も出来ます。
オプションとして「delims」を追加することで、トークンの区切り文字を指定します。
オプションとして「eol」を追加することで、無視する行の文字を指定します。
今回は、文字列の中に無い文字「@」を指定することで、一行取得しています。
「findstr」コマンド
指定されたパターンの文字列を検索するコマンドです。
オプションとして「/R」を追加することで、検索文字列を正規表現で検索します。
オプションとして「^」を追加することで、先頭文字列から検索します。
「%1」はバッチファイルで使用する、第一引数として指定します。
「set」コマンド
実行中の環境変数の値を設定します。
「%string:~-*,●%」コマンド
stringに設定されている文字列の後ろから数えて
*番目から●文字まで取得します。
※前から数えて取得したい場合は、「%string:~*,●%」と記載すればOK。
実行して、下記ファイル名を取得しました。
コメント
初めまして
ファイル操作を探してこちらにたどり着きました
私ができたらいいなと思っていることに近いと思ったので
参考にいろいろ試したのですが全くうまくいかず…
下記のようなことは可能でしょうか??
【見積部分】
見積-客先〇-見積番号9桁英数字(1234a5678)
見積-客先△-見積番号9桁英数字 (2345a6789)
と多くのPDFファイルがあります
ファイル名の最後の見積番号9桁英数字のみでフォルダを作りたいです
【注文書部分】
後日
注文-客先〇-見積番号9桁英数字(1234a5678)
注文-客先△-見積番号9桁英数字 (2345a6789)
のPDFファイルが増えた場合上で作ったフォルダに自動で収納される方法はあるでしょうか?
「注文書部分」の後日処理が無理なら
「見積書部分」と同時に処理し見積番号フォルダに収納できませんでしょうか?
ご教授いただけると幸いです
1234a5678フォルダ-見積-客先〇-見積番号9桁英数字(1234a5678)
注文-客先〇-見積番号9桁英数字(1234a5678)
試しに作ってみました。下記でいかがでしょうか?
@echo off
setlocal enabledelayedexpansion
REM ファイルが保存されているフォルダのパスを指定してください
set “target_directory=C:\Users\test”
REM フォルダ作成先のパスを指定してください
set “destination_directory=C:\Users\test”
REM ファイル名の最後の9桁を使ってフォルダを作成し、ファイルを移動する
echo フォルダを作成しファイル移動を行います。
for %%F in (“%target_directory%\*.pdf”) do (
set “filename=%%~nF”
set “last_nine_chars=!filename:~-9!”
if not exist “!last_nine_chars!” (
mkdir “%destination_directory%\!last_nine_chars!” 2>nul
)
move “%%F” “%destination_directory%\!last_nine_chars!”
)
echo フォルダ作成とファイル移動が完了しました。
pause