質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
コマンドプロンプト

コマンドプロンプト(cmd.exe)はMicrosoftによって提供されているコマンドラインインタプリタです。OS/2・Windows CE・Windows NTで使用可能です。

バッチファイル

バッチファイル(Batch File)は、Windowsのコマンドラインインタープリターによって複数のコマンドを実行させる事が出来るスクリプトファイルです。

Q&A

解決済

3回答

4661閲覧

for文に変数を入れる方法

arcana

総合スコア13

コマンドプロンプト

コマンドプロンプト(cmd.exe)はMicrosoftによって提供されているコマンドラインインタプリタです。OS/2・Windows CE・Windows NTで使用可能です。

バッチファイル

バッチファイル(Batch File)は、Windowsのコマンドラインインタープリターによって複数のコマンドを実行させる事が出来るスクリプトファイルです。

0グッド

0クリップ

投稿2018/12/26 12:45

前提・実現したいこと

初心者なので変なことをしていてもお許しください。
現在バッチファイルを使って特定の名前のディレクトリ作成を複数行おうと思っています。
ですが、for文をうまく使えないため、ディレクトリの作成を名前の分だけだらだら書いていてしつこいような形になっています。例えば下記のようなコードになります。
またそれぞれmkdirのあとにデータを移動する命令文等が入ります。

該当のソースコード

mkdir C:\Users\りんご ... mkdir C:\Users\バナナ ... mkdir C:\Users\みかん ...

他10種類ほど入ります。

試したこと

事前に入れたい名前はわかっているので(りんご、バナナなど)
変数(数字)に名前を入れてfor文で組もうと思いましたが、上手くいきませんでした。
確認で使ったコードが下記です。

set 1=りんご set 2=バナナ set 3=みかん for /l %i in (1,1,3) do echo %%i%

で試したところ、
%1%
%2%
%3%
となりました。forの値と変数にした数字の値では同じにならないっていうのはわかったのですが、for文の中に変数を入れる(または決まった名前を順番に入れる)方法がありましたらご教示ください。
よろしくお願いいたします。

補足情報(FW/ツールのバージョンなど)

windows10

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

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

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

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

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

guest

回答3

0

Bat

1@echo off 2setlocal enabledelayedexpansion 3 4set LIMIT=2 5set ARRAY[0]="りんご" 6set ARRAY[1]="ばなな" 7set ARRAY[2]="みかん" 8 9for /l %%n in (0,1,!LIMIT!) do ( 10 echo !ARRAY[%%n]! 11)

投稿2018/12/26 21:22

編集2018/12/26 21:46
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

arcana

2018/12/27 01:08

こちらの例が配列のようにしているコードですね・・勉強になります! ありがとうございました。
guest

0

ベストアンサー

配列っぽいことを考えているようですが、、バッチファイルで配列っぽいことをするのは割と高度なテクニックが必要なので、単純に名前をそのまま使って処理した方が簡単です。

例1

dos

1for %%A in (りんご バナナ みかん ……) do ( 2 mkdir C:\Users\%%A 3 何かの処理 4 : 5 : 6)

例2

dos

1call :proc りんご 2call :proc バナナ 3call :proc みかん 4 : 5 : 6goto :eof 7 8:proc 9mkdir C:\Users\%1 10何かの処理 11 : 12 : 13goto :eof

投稿2018/12/26 15:33

catsforepaw

総合スコア5938

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

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

arcana

2018/12/27 01:04

例1のやり方が単純で一番わかりやすかったです! ありがとうございました。
arcana

2018/12/27 02:56

ちなみに例1で「りんご 1」のように空白を入れたい場合はどのようにすれば宜しいでしょうか?""で囲うと「"りんご 1"」と表示されてしまいます・・。
catsforepaw

2018/12/27 04:40

""でくくるのは正しいやり方です。基本的にはそのまま""でくくられた状態でコマンドに渡しても問題ないのですが(というか、特にファイルパスの場合はそうしないと問題になる場合が多い)、外したい場合は「%%~A」のように「~」(チルダ)を入れて渡せば良いです。
guest

0

例えばファイルを使う方法として、以下のようにも実現できます。

bat

1@echo off 2 3cd /d %~dp0 4 5set ROOTDIR=C:\Users 6 7for /f %%s in (list.txt) do ( 8 mkdir %ROOTDIR%\%%s 9)

list.txtというファイルに、以下のように作成したいフォルダの一覧を記載して、batと同じフォルダに置いて実行すればOKです。

りんご バナナ みかん

投稿2018/12/26 13:57

編集2018/12/26 13:59
aikon_marimo

総合スコア1083

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

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

arcana

2018/12/27 01:05

この方法なら情報の追加も簡単そうですね! ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問