【初心者バッチファイル】ファイル内の文字列抜き出し方法

Pocket

スポンサーリンク
スポンサーリンク

ファイル内のテキスト一覧から指定した文字数以下の文字列を抜き出す方法

こんにちは。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=%%lstringに取得した文字を保存
call:subsubを呼び出し
)
exit
:sub:sub内容
echo %string:~-11,11%>>Extract_list.csvstringの中身の後ろから数えて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。

実行して、下記ファイル名を取得しました。

スポンサーリンク
スポンサーリンク
スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

コメント

  1. 中元 より:

    初めまして
    ファイル操作を探してこちらにたどり着きました
    私ができたらいいなと思っていることに近いと思ったので
    参考にいろいろ試したのですが全くうまくいかず…
    下記のようなことは可能でしょうか??
    【見積部分】
    見積-客先〇-見積番号9桁英数字(1234a5678)
    見積-客先△-見積番号9桁英数字 (2345a6789)

    と多くのPDFファイルがあります
    ファイル名の最後の見積番号9桁英数字のみでフォルダを作りたいです

    【注文書部分】
    後日
    注文-客先〇-見積番号9桁英数字(1234a5678)
    注文-客先△-見積番号9桁英数字 (2345a6789)
    のPDFファイルが増えた場合上で作ったフォルダに自動で収納される方法はあるでしょうか?

    「注文書部分」の後日処理が無理なら
    「見積書部分」と同時に処理し見積番号フォルダに収納できませんでしょうか?
    ご教授いただけると幸いです

    1234a5678フォルダ-見積-客先〇-見積番号9桁英数字(1234a5678)
             注文-客先〇-見積番号9桁英数字(1234a5678)

    • thimi-lifehack より:

      試しに作ってみました。下記でいかがでしょうか?

      @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