🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

Q&A

解決済

1回答

5366閲覧

windows bat で複数の異なるファイル名を取得し、異なる変数に格納したい。

tennk

総合スコア8

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

0グッド

0クリップ

投稿2021/01/09 15:11

現在、Testフォルダというフォルダが作成されており、その配下に名前の異なるファイルが複数ある状態です。
下記に簡単な構造を書きました。

Test
|
|-------- File5
|
|-------- test_file
|
|-------- log
|
|-------- local_file
|
...etc

これら複数のファイル名をwindows bat ですべて異なる変数
例えば
%file1%=File5
%file2%=test_file

というようにファイル名を変数に格納していく処理を作成したいと考えています。
なお、このファイルの数は可変なので決まった数ではないです。

インターネットを使用して検索などはしましたが

for /f %%i in (Test/*) do (
echo %%i
)

というように1つの変数(%%i)にファイル名を格納していき
出力するという手法は見つかるのですが
ループごとに異なる変数に格納させるという方法がどうしてもみつからずに困っています。

どなたかご教授、お力添えをいただけないでしょうか?
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

バッチファイルに配列変数はありません。

変数名を動的に作成することで、擬似的に配列を実現することも可能ですが、配列に入れた後、どうしたいかをきちんと考えた上で、全体の処理を設計した方が良いです。

#回答追記

CMD

1@echo off 2setlocal 3set N=0 4for %%A in (X*) do call :SET "%%A" 5 6echo 下記のどれかを選んでください 7for /L %%I in (1,1,%N%) do call echo %%I: %%A%%I%% 8:LOOP 9set /P ANS="対象を番号で選択してください(1-%N%)>>" 10if not defined ANS goto LOOP 11if %ANS% LSS 1 goto LOOP 12if %ANS% GTR %N% goto LOOP 13 14call echo %%A%ANS%%% 15 16exit /b 17 18:SET 19set /a N+=1 20call set A%N%=%~1 21exit /b

投稿2021/01/09 16:13

編集2021/01/10 14:45
otn

総合スコア85886

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tennk

2021/01/10 13:00

アドバイス、並びにご回答いただきありがとうございます。 こちらでは表記していなかったのですが 仮に、動的に変数を作成し疑似配列に格納した際は 配列の内容を出力し、ユーザに標準入力で操作したい対象を指定させたいと考えております。 予想しているコード: rem "疑似配列 array[n]を作成、nはファイルの数だけループし、インクリメントする番号" rem "=for文ループで取得したTest配下のファイル名を格納"" @array[1]=File5 @array[2]=test_file @array[3]=log rem "以下はfor文でn回出力" echo 1:%array[1]% echo 2:%array[2]% echo 3:%array[3]% rem "ここまで" set /P ANSWER="対象を番号で選択してください(1/2/3)>>" という処理を実行させたいと考えております。
otn

2021/01/10 14:24

なるほど。それは配列が欲しいですね。 追記しておきます。
otn

2021/01/10 15:09

A1 A2 A3 A4 。。。 という変数にセットしています。
tennk

2021/01/13 11:01

otn様 お返事が遅れ申し訳ありません。 ご提示いただいたコードで目的の操作を実行することができました! コードを読み込んだことで大変勉強になり、batにおいて変数をループで作成するノウハウも得られました 本当にありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問