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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Windows 10

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

Q&A

2回答

2526閲覧

コマンドプロンプト:コマンドの実行結果を変数に格納する際にエラーが生じる原因について

infra____

総合スコア90

Windows 10

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

0グッド

0クリップ

投稿2022/05/19 02:08

https://maku77.github.io/windows/io/set-command-result.html
上記ページを参考に、コマンドの実行結果を変数に格納する処理の実装を試みています。

for /f "usebackq" %%A in (`whoami`) do set user=%%A

コマンドプロンプトで上記コマンドをたたくと、”%%A の使い方が誤っています。”というエラーが出力されます。

一方、バッチファイルに同様の内容を記載し、実行すると正常に動作します。
これは、一体なぜなのでしょうか??

ご存知の方がいらっしゃいましたら、ご教示お願い致します。

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

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

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

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

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

guest

回答2

0

for /?で表示されるヘルプを見るとわかりますが、本来は、
for /f "usebackq" %A in (whoami) do set user=%A
のように%は1つです。

ただし、バッチファイル内では、「バッチファイル内で、%という文字自体を書きたい時は%%と書く」というルールがあるので、
for /f "usebackq" %%A in (whoami) do set user=%%A
と書きます。%1つだと環境変数展開の記号と見なされます。

他の例:
echo パーセント記号は % です(コマンドプロンプトで直接実行)
echo パーセント記号は %% です(バッチファイルに書く時)

C言語をご存じなら、「printf書式の中で%という文字自体を使いたい時は%%と書く」というのをご存じでしょうが、それと同じような物です。

コマンドプロンプト/バッチファイルの仕様は、MS-DOSの初期バージョンの頃からの互換性を引きずっているので、こういうおかしな部分がたくさん残ってます。

投稿2022/05/19 02:32

otn

総合スコア84555

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

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

0

コマンドラインから直接実行させる場合は%%Aじゃなくて、%Aだったかと

投稿2022/05/19 02:19

y_waiwai

総合スコア87774

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

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

Zuishin

2022/05/19 03:28 編集

これ誰が高評価したんでしょう? %A ではなく %A です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問