- ベストアンサー
コマンドプロンプトでファイル読み込み
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
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
空白はファイル名を区切るものとして扱われ、ダブルクォートでくくると 今度はそれがファイル名ではなく文字列として扱われてしまうのでうまくいかないというわけですね。 根本的な解決策ではありませんが、こんなやり方はどうでしょう? 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 オプションを追加し、別コマンドでファイル内容を出力させて それを取り込んで使うという寸法です。 とりあえずファイル内容を単純にエコーバックさせるのはうまくいきました。
その他の回答 (2)
- sakusaker7
- ベストアンサー率62% (800/1280)
> %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 がちょっと美しくありませんが、こうしないと テキストファイルから取り出した文字列を環境変数として強制的に 評価することができないようですので。
- kaZho_em
- ベストアンサー率50% (2950/5879)
8.3ファイル形式名で呼び出せませんか? Documents and Settingsフォルダなら、DOCUME~1 のようになります。 DIRコマンドに /X オプションを付ければ、ロングファイルネームの8.3ファイル形式での ファイル名が確認できますが。
お礼
ありがとうございます。 ただ、ロングネームで指定できるのであれば、 ロングネーム指定で行いたいのです。 無理なのでしょうか・・・・?
お礼
大変ありがとうございます。 そういった方法があるとは知りませんでした。 別の話になるのですが、 このパラメータファイルの値(ABC=)にシステム環境変数の%SYSTEMROOT%を設定。 ABC=%SYSTEMROOT% バッチファイルの最後に、以下1行を記述 echo %value_1 とすると出力は、システム環境変数の値ではなく %SYSTEMROOT%といった文字列が出力されるのですが それは環境変数の値で出力可能でしょうか?・・・