アプリ版:「スタンプのみでお礼する」機能のリリースについて

For文を使って、パラメータファイルから値を読み込みたいのですが、
"C:\Documents and Settings\~"等(パスにスペースが含まれる場合)に置かれた場合、
ファイルを読み込んでくれず困っております。
()内のファイル指定で、""(ダブルクォーテーション)
や'(シングルクォーテーション)で囲むこともしてみましたが、ダメでした。。
どう指定すればよいのかご教授下さい。
よろしくお願いいたします。

【パラメータファイル(tmp.txt)】
ABC=12345

【バッチファイル(test.bat)】
for /F "delims== tokens=1,2" %%A in (D:\tmp.txt) do if %%A==ABC set value_1=%%B
echo %value_1%
pause

A 回答 (3件)

8.3ファイル形式名で呼び出せませんか?


Documents and Settingsフォルダなら、DOCUME~1 のようになります。
DIRコマンドに /X オプションを付ければ、ロングファイルネームの8.3ファイル形式での
ファイル名が確認できますが。
    • good
    • 0
この回答へのお礼

ありがとうございます。
ただ、ロングネームで指定できるのであれば、
ロングネーム指定で行いたいのです。
無理なのでしょうか・・・・?

お礼日時:2006/06/18 17:13

空白はファイル名を区切るものとして扱われ、ダブルクォートでくくると


今度はそれがファイル名ではなく文字列として扱われてしまうのでうまくいかないというわけですね。

根本的な解決策ではありませんが、こんなやり方はどうでしょう?

for /F "delims== tokens=1,2 usebackq" %%A in (`type "C:\Documents and Settings\anonuser\hoge.txt"`) do if %%A==ABC set value_1=%%B

usebackq オプションを追加し、別コマンドでファイル内容を出力させて
それを取り込んで使うという寸法です。
とりあえずファイル内容を単純にエコーバックさせるのはうまくいきました。
    • good
    • 0
この回答へのお礼

大変ありがとうございます。
そういった方法があるとは知りませんでした。

別の話になるのですが、
このパラメータファイルの値(ABC=)にシステム環境変数の%SYSTEMROOT%を設定。
ABC=%SYSTEMROOT%

バッチファイルの最後に、以下1行を記述
echo %value_1


とすると出力は、システム環境変数の値ではなく
%SYSTEMROOT%といった文字列が出力されるのですが
それは環境変数の値で出力可能でしょうか?・・・

お礼日時:2006/06/19 01:15

> %SYSTEMROOT%といった文字列が出力されるのですが


> それは環境変数の値で出力可能でしょうか?・・・

とりあえず、テキストファイルに%VAR%のような行があるとして
(下記の例ではenv.txt)

setlocal ENABLEDELAYEDEXPANSION
for /f %%i in (env.txt) do (
set tmpvar=
for /f "usebackq" %%x in (`echo %%i`) do set tmpvar=%%x
echo !tmpvar!
)

のようにすると、env,txtで指定された環境変数の展開結果が
エコーバックされます。

ポイントは最初の行の endlocal の引数 ENABLEDELAYEDEXPANSION
と、echo !tmpvar! です。
この組み合わせにより、環境変数の遅延評価を行うことができます。

内側の for /f がちょっと美しくありませんが、こうしないと
テキストファイルから取り出した文字列を環境変数として強制的に
評価することができないようですので。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!