とまと あんらいぷ…

エンジニアの活動記録とかつぶやきとか

GitHub
スポンサードリンク

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

スポンサードリンク

バッチファイルでFOR文のファイルパスにダブルクオーテーション付きの変数をセットする

FOR文の[セット]にダブルクオート付きのフルパスを入れる



相変わらずのコマンドラインヘルプの不親切ぶりにハマった。
もちろん、ヘルプをよく読んでない私自身のせいなのですが。

今回は変数「hoge」に、ファイルのフルパスをセットして、その内容をFOR文で回す。
という処理を行いたかったのです。

ファイルの内容は
このように改行つきの文字。
a
b
c

以下の様なコマンドを実行した時に期待する動作は・・・

SET hoge="myfile.txt"
FOR /F %%i in ( %hoge% ) do @echo %%i


D:\test>SET A="myfile.txt"
D:\test>FOR /F %i in ("myfile.txt") do @echo %i
a
b
c


こんな感じ。

でも実際には

D:\test>SET A="myfile.txt"
D:\test>FOR /F %i in ("myfile.txt") do @echo %i
myfile.txt


そうじゃない感がすごい(笑)

そもそもダブルクオートを使う必要があるのは
フォルダやファイル名にスペースがある時が多いのですが
恒例的に付けることもありますし、なにより、ファイルパスの内容をぶん回したいのに
ファイルパスそのものがでてくるのは意図していない。

というわけで

[usebackq] オプションを使います。

usebackqオプションを利用してFOR文を実行


FOR /F "usebackq" %i in ("myfile.txt") do @echo %i
実行結果


D:\test>SET A="myfile.txt"
D:\test>FOR /F "usebackq" %i in ("myfile.txt") do @echo %i
a
b
c


この事象にぶち当たった時に変数の展開方法にベクトルを向けてしまうと
%~1 展開時にダブルクオーテーションを除く
に焦点が行ってしまったり。(私だけか・・・)

%~1は引数の展開方法であって、変数の展開方法ではないので、ダブルクオートを除く行為はできません。
お気をつけ下さい。
▼この記事を読んだ方は、こんな記事も読んでいます。▼

スポンサードリンク

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://dalmore.blog7.fc2.com/tb.php/121-417c733d
この記事にトラックバックする(FC2ブログユーザー)

FC2Ad

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。