[前の記事]« [VBS]変数の途中に文字列を挿入するには
[次の記事]ファイル内の特定のキーワードから指定文字数分を別ファイルに書き出したい »

関連オンラインソフト配布サイト:
Vector>ダウンロード(top) |>MS-DOSまたは汎用 | >WindowsVista/XP/2000/NT

▲カテゴリー「FOR .. IN ( ) DO..」索引へ

指定されたパス名が"で囲まれている場合のFORでの処理方法

348.
パス名に空白がある場合の処理方法
2005年03月25日(金) 01時20分
みぽりん
●DOS/Windowsのバージョン↓
WindowsXP

いつも参考にさせてもらっています。

あるテキストファイルを読み込む方法について教えてください。

FOR コマンドを使って、以下のような感じであるテキストファイルを読み込むバッチファイルを作成しようと思っていますが、ファイルのパス名に空白(たとえば「C:\Documents and Settings\」のように)があると、エラーとなってしまいます。

そこで、%CURRENT%\hoge.txtを""で括って、
for /f "tokens=1-3" %%A in ("%CURRENT%\hoge.txt") DO ~
としたところ、
  XXX1=C:\Documents and Settings\hoge.txt
とファイルの中身ではなく、パス名が変数にセットされてしまいました。

パス名に空白が含まれているときにはどのように処理したらよいのでしょうか?
すみませんが教えてください。よろしくお願いします。


[bat]-------------------
set CURRENT=%CD%
set /a N=0
for /f "tokens=1-3" %%A in (%CURRENT%\hoge.txt) DO (
  set /a N=N+1
  set XXX!N!=%%A
  set YYY!N!=%%A
  set ZZZ!N!=%%A
)

[hoge.txt]--------------
aaa bbb ccc
ddd eee fff
・・・
------------------------
349.
Re:パス名に空白がある場合の処理方法
2005年03月25日(金) 15時39分
otn
>FOR コマンドを使って、以下のような感じであるテキストファイルを読み込むバッチファイルを作成しようと思っていますが、ファイルのパス名に空白(たとえば「C:\Documents and Settings\」のように)があると、エラーとなってしまいます。

>そこで、%CURRENT%\hoge.txtを""で括って、
>for /f "tokens=1-3" %%A in ("%CURRENT%\hoge.txt") DO ~
>としたところ、
>  XXX1=C:\Documents and Settings\hoge.txt
>とファイルの中身ではなく、パス名が変数にセットされてしまいました。

>パス名に空白が含まれているときにはどのように処理したらよいのでしょうか?

for /? より:
usebackq 次の新しい表示形式を指定します。逆引用符で囲まれた
         文字列がコマンドとして実行され、一重引用符で囲まれた
         文字列がリテラル文字列コマンドになりファイル名セット
         のファイル名を二重引用符で囲めるようになります。

ということなんで、
for /f "tokens=1-3 usebackq" %%A in ("%CURRENT%\hoge.txt") DO ~
が順当なやりかたでしょう。
for /f "tokens=1-3" %%A in ('type "%CURRENT%\hoge.txt"') DO ~
という手もあります(usebackq機能の無いNT4向け)。

何でもかんでも for /f にせずに、
for /f ・・・ ファイルを読む
for /s ・・・ 文字列を読む
for /c ・・・ コマンド結果を読む
のようにオプションを分ければよかったのに。悪い仕様の見本みたいなもの。
354.
Re2:パス名に空白がある場合の処理方法
2005年03月25日(金) 22時41分
みぽりん
otnさん、ありがとうございます。
早速試してみたところ、バッチリでした。

>何でもかんでも for /f にせずに、
>for /f ・・・ ファイルを読む
>for /s ・・・ 文字列を読む
>for /c ・・・ コマンド結果を読む
>のようにオプションを分ければよかったのに。悪い仕様の見本みたいなもの。

せめて、私の悪い使用の見本が、後に役に立てば救われますが・・・(汗)
355.
Re3:パス名に空白がある場合の処理方法
2005年03月28日(月) 16時22分
otn
otnです。

>otnさん、ありがとうございます。
>早速試してみたところ、バッチリでした。

>>何でもかんでも for /f にせずに、
>>for /f ・・・ ファイルを読む
>>for /s ・・・ 文字列を読む
>>for /c ・・・ コマンド結果を読む
>>のようにオプションを分ければよかったのに。悪い仕様の見本みたいなもの。

>せめて、私の悪い使用の見本が、後に役に立てば救われますが・・・(汗)

誤解を招いたならすみません。「CMD.EXEのfor /fの仕様が悪い」という意味で書きました。

NT4にusebackqが無いことから考えると、NT4の時に考え無しにfor/fの仕様を考えて、みぽりんさんのように、" " で囲まれたファイル名の扱いに困って、Win2000でアドホック的にusebackqで救おうとしたように思えます。
コマンド実行結果を拾うときにも、パイプやリダイレクトがあると ^ でクォートしないといけないので、" " で囲める書式があればよかった。
 
 


カテゴリー「FOR .. IN ( ) DO..」索引へ

 

カテゴリー一覧

FPCU/FPCDIY QUICK LINK online
この上の各ジャンル名をクリックすると、下のウィンドウが切り替わります▼


=リンク集のインデックスはこちら=

資料書籍

About

2005年03月25日 13:33に投稿されたエントリーのページです。

ひとつ前の投稿は「[VBS]変数の途中に文字列を挿入するには」です。

次の投稿は「ファイル内の特定のキーワードから指定文字数分を別ファイルに書き出したい」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。

This site is powered by Six Apart
Movable Type 3.33-ja
このブログについて | 運営:有限会社メディアポート