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

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

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

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

Q&A

解決済

1回答

1711閲覧

MS-DOS のfor 文でのファイル名取得について

teefpc

総合スコア111

コマンドプロンプト

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

0グッド

0クリップ

投稿2019/09/22 10:51

windows の バッチコマンドで、

for %%A in (.) do (
echo %%A
SET B=out_%%A
echo %B%
)

としたとき、
1.変数Bに正しいファイル名がセットされません。(空、または最後のファイル名)
2.ファイル名にカッコがついている場合などにエラーとなります。

やりたいことは、ファイル名を読み込んで、そのファイルを処理して、新しいファイル名で出力することです。

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

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

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

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

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

y_waiwai

2019/09/22 11:30

MSDOS上の話でしょうか。 あるいはWindowsのコマンドプロンプトでの話でしょうか
teefpc

2019/09/22 11:46

ありがとうございます。Windowsのコマンドプロンプトでの話です。
guest

回答1

0

ベストアンサー

%B%のような変数展開は、括弧で囲まれている場合、括弧に入る時点で展開されます。
つまり、for実行前にBが空だとすると、echo %B%は、echo になってから括弧内が実行されます。

CMD

1setlocal enabledelayedexpansion 2for %%A in (*.*) do ( 3 echo %%A 4 SET B=out_%%A 5 echo !B! 6)

のようにすると括弧内でも変数が展開されます。expansionを実行の直前にdelayさせるということです。

ファイル名にカッコがついている場合などにエラーとなります。

このコードだとそんなことはないはずですが、ここに書いていない処理でですか?

投稿2019/09/22 11:48

otn

総合スコア84538

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

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

teefpc

2019/09/22 12:56

ありがとうございました。カッコや日本語のファイル名でも問題なく取得できました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問