Kakeishi_Misa
@Kakeishi_Misa

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

【バッチ】特定の文字列を含むフォルダのみを変数に格納したい

解決したいこと

実行するバッチと同じディレクトリに存在するフォルダで、かつ
特定の文字列を含むフォルダを変数に格納したいです。

例)
下記のディレクトリ構成の場合、
「TEST」の文字列を含む"フォルダのみ"取得したいです。
期待結果は下記の3つが取得できることを期待しています。

「TEST1フォルダ」
「TEST2フォルダ」
「TEST3フォルダ」

[フォルダ構成]
Sampleフォルダ
 └TELLフォルダ
 └TEST1フォルダ
 └TEST2フォルダ
 └TEST3フォルダ
 └TESTファイルtext
 └実行するバッチbat

下記のサイトを参考に下記のコードを記載しましたが、
FILEを出力すると2021/10/08となり、更新日時?が出力されます。
https://nashiza-blog.com/2020/06/14/find-filename/

オプション「/ad」は下記のサイトを参考にしました。。
https://rnr.hatenablog.com/entry/programming/cmd/dir

set PARAM=TEST
for /f "usebackq" %%A in (`dir /ad ^| find "%PARAM%"`) do set FILE=%%A
echo %FILE%
pause
0

1Answer

以下でいかがでしょうか。

コード
setlocal enabledelayedexpansion
set PARAM=TEST
set FILE=
for /f "usebackq" %%A in (`dir /ad /b %PARAM%*`) do set FILE=!FILE!%%A^


echo !FILE!
結果
TEST1
TEST2
TEST3

※同じ結果を得るには、空行を含めて、厳密に同じコードである必要があります。

解説

  • setlocal enabledelayedexpansionは、環境変数の遅延展開(!~!)を可能にします。
  • set FILE=は、環境変数をクリアします。
  • ^《空行》《空行》によって、環境変数に改行文字を設定しています。
  • dir /ad /b %PARAM%*の結果は、実際にdir /ad /b TEST*として確かめてください。
  • forの繰り返しでは、dir ~の結果から1行ずつ取り出し、それに改行文字を加えた文字列を、環境変数FILEへ追記しています。
1Like

Comments

  1. @Kakeishi_Misa

    Questioner

    ありがとうございます。

    『^《空行》《空行》』
    で毎回出力するのではなく、
    纏めることができるんですね!!
    (for文の度にFILE上書きされないんですね....)


  2. > for文の度にFILE上書きされない

    `set FILE=!FILE!《追記》`とすることで、`!FILE!`がその時点の環境変数の内容に展開され、追記とともに新たな値となります。
  3. @Kakeishi_Misa

    Questioner

    あっ、『^』ではなく、
    『set FILE=!FILE!《追記》』の書き方で
    上書きせずにすんでいたんですね。
    ありがとうございます。

Your answer might help someone💌