DOSコマンドのFOR文で空白を含むファイルパスの指定方法

このQ&Aのポイント
  • DOSコマンドのFOR文で空白を含むファイルパスを指定する方法について教えてください。
  • FORの繰り返し条件に空白を含むファイルパスを指定することは可能ですか?方法を教えてください。
  • DOSコマンドのFOR文で空白を含むファイルパスを指定する方法について教えてください。
回答を見る
  • ベストアンサー

DOSコマンドのFOR文で空白を含むファイルパスの指定方法

DOSコマンドのFOR文で空白を含むファイルパスの指定方法 DOSコマンドのFOR文で、FORの繰り返し条件に 空白を含むファイルパスを指定する方法を教えてください。 やりたいことのイメージはこんな感じです。 for /f %%a in (C:\Documents and Settings\user\デスクトップ\list.txt) do ( echo %%a ) バッチファイルとlist.txtを同じディレクトリに配置し、かつ FOR文の前にCDを含めない事を条件にすれば 下記でもうまくいきます。 for /f %%a in (list.txt) do ( echo %%a ) 他のコマンドとの関係からこの前の処理で一度ディレクトリの 変更を行なう処理を含むため、FOR文で指定するファイルは 絶対パス指定をしたいと思っています。 簡単なことのような気もするのですが、 もしかしたら出来ないのかもしれないとも思っています。 FORの繰り返し条件に空白を含むファイルパスを 指定することはできるのでしょうか? 出来るのならばその方法を教えてください。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • deadline
  • ベストアンサー率63% (1239/1943)
回答No.3

for文の括弧内に空白を含むファイルパスを指定したい時には、"usebackq"オプションを使用します。 このオプションにより、括弧内で使用される各種引用符の使い方が変わります。 使用しない⇒"usebackq"を使用する ファイル名⇒"ファイル名" (空白を含むファイルパスが使用できるようになる) "文字列"⇒'文字列' 'コマンド'⇒`コマンド` for /f "usebackq" %%a in ("C:\Documents and Settings\user\デスクトップ\list.txt") do ( echo %%a ) 詳しくは、"for /?"でヘルプを参照してください。

mibusys
質問者

お礼

「usebackq」は存在は知っていました。 しかし何の意味があるのか理解していませんでした。 こういうときに使うのですね。 「usebackq」を指定することにより期待通りの結果を得る事が出来ました。 大変参考になりました。ありがとうございました。

その他の回答 (2)

noname#110816
noname#110816
回答No.2

空白を含むファイルパスを"文字列"として指定して試してみましたか。 たとえば下記のような指定です。 "C:\Documents and Settings" "C:\Documents and Settings\user\デスクトップ\list.txt"

mibusys
質問者

お礼

ありがとうございました。

mibusys
質問者

補足

試しています。 それをすると、FOR文ではまったく違う意味の処理になります。 そもそもファイルの参照ではなくなってしまいますからね。 それゆえ困っています。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

ヘルプは見ましたか?

mibusys
質問者

お礼

ありがとうございました。

関連するQ&A

  • 【DOSコマンド】for文の中で変数をカウントアップしたい。

    【DOSコマンド】for文の中で変数をカウントアップしたい。 【現在のソース】 for %%i in (\\hoge\hoge\*.*) do (  echo %%i,%%~ziバイト >> log.txt  type nul > %%i ) 【現在の処理内容】 とあるフォルダの中になる全ファイルのパス、サイズをログファイルに書き出し、、 全ファイルを0バイトにクリアする。 【やりたいこと】 ログファイルにファイルパス、サイズを書き出す際に連番を出力したい。 例) 1,\\hoge\hoge\aaa.txt 2,\\hoge\hoge\ddd.txt 3,\\hoge\hoge\123.txt 【現在までに試みた方法】 for文の外で「set n=0」。 for文の中で「set /a n=%n%+1」「echo %%n」 【環境】 XP Pro Version2002 SP2  DOSコマンドの変数に関する理解がいまひとつで、よくわかりません。  ご存知の方がいらっしゃいましたらご教示いただけると幸いです。

  • For文について (DOS起動)

    テキストファイルの内容を1行ずつ取り出したいと思い、以下のコマンドを実行しました。  for /f %i in (test.txt) do echo %i このコマンドをWin7及びXPのOS上コマンドプロンプトで実行した場合は問題ありませんが、MS-DOS6.22やWin98、WinMEのDOS起動ディスクなどの場合、Syntax errorとなります。 ※test.txtの内容は、TABやSpaceなし、半角英数字のみの文字列で4行程度保存しています。 この為、DOS起動ディスクでは、For文を使えないのかと思い、以下コマンドを実行した所、正常に動作しました。  for %i in (1 2 3 4) do echo %i この事から、For文にてテキストファイルの読み込みが出来ない状況のようです。 どのようにすれば、テキストファイルを読み込む事が出来ますでしょうか。 宜しくお願い致します。

  • 【DOSコマンド】for の デリミタにダブルクォーテーションを使うには

    下記のような1行だけ書かれたテキストファイルがあり、その中からダブルクォーテーションで囲まれた部分を抜き出そうとしています。 --【abc.txt】----------------------------------------------------------- Command Line: "C:\Program Files\test\test.exe" ---ここまで------------------------------------------------------------- (C:\Program Files\test\test.exe を抜き出したい) DOSコマンドのfor文を使って抜き出そうとしたのですがダブルクォーテーションをどうやってデリミタに指定したらいいのかわかりません。   for /f 'delims=" tokens=2' %i in (test.txt) do @echo %i  とか   for /f "delims="" tokens=2" %i in (test.txt) do @echo %i など いろいろやってみたのですがエラーが出ました。 試しにテキストファイルのダブルクォーテーションを”+”に置き換えて試したところうまく出来たので、デリミタの指定の仕方だけだと思うのですが、どうしてもわかりません。 Command Line: +C:\Program Files\test\test.exe+   に対して for /f "delims=+ tokens=2" %i in (test.txt) do @echo %i はうまく出来ました。 どなたかご享受願えませんでしょうか。 よろしくお願いします。

  • DOSコマンドのforで空白行をスキップしない

    DOSコマンド(バッチ)で、ファイルの4行目から読み込んで順に処理し、 空白行が見つかったらそこで処理ループを抜けて処理を終了させたいのですが、 FOR /Fは空白行を読み飛ばしてしまうため、やりたい事ができません。 FOR /F "SKIP=4" %%A IN (file) DO ( IF "%%A" == "" GOTO :OUT ・・・処理・・・ ) :OUT forで空白行をスキップしないようにするか、代替法があれば教えていただけないでしょうか。 よろしくお願いいたします。

  • DOSコマンドバッチのFOR文の記述

    FOR文で以下のように記述しています。 SET FILENAME=aaa.txt FOR /F "tokens=1,2" %%i IN (revs.txt) DO SET FILENAME=%%i-%%j.txt & echo %FILENAME% echoで直前でSETした値を表示したいのですが、どうしても変化しません。(aaa.txtのまま) ※%i,%jには正しく値が設定されています。 以下を教えてください。 ・FILENAMEに値を設定する方法 ・コマンドが長い場合に改行する方法(もしあれば) よろしくお願いします

  • FOR文のログファイル書き出し

    以前こちらで、for文を教えてもらいました。 同じディレクトリにある*.txtファイルの最後の行に、XXXXXを追記するというものです。 FOR %%F IN (*.txt) DO echo XXXXX >> %%F ここで同じディレクトリにある*.txtが、2000ファイル近くあるので、処理がされたかどうかをログファイルとして書き出したいのですが、FOR文を使ったリダイレクション(>>)は、どのようにやるのでしょうか? (当然ながら、FOR %%F IN (*.txt) DO echo XXXXX >> %%F >> log.txt などとしてもダメでした) お手数をおかけします。よろしくお願いいたします。

  • MSDOSのfor文

    DOSコマンドのFOR文で結果を出力させるにはどういう記述をすればよいでしょうか? 実行させたいのは、 for /d %%a in (ファイルパス\*) do del "%%a\*.cab" という内容なのですが、末尾に「>> log.log」だとうまく出力されません。 ""で囲った中にしてみてもやはり同じ状況なのですが、どうにか出力させることはできないでしょうか?

  • バッチファイルのfor文の使い方がわかりません。

    バッチ初心者です。 指定したフォルダのテキストファイルを一括置換するバッチファイルを作成したのですが、 for文を使うところでつまづいてしました。 for文のin( )内にディレクトリを入れると失敗してしまいます。 失敗例↓ for %%f in (d:\aaa\*.txt) do ( set fname=%%f set fname=!fname:%1=%2! ren %%f !fname! ) for文を for %%f in (*.txt) にすると成功します。 IN( )内にディレクトリを入れると処理が失敗するのはなぜでしょうか?? helpを読んでもわかりません。 試しにオプション付けて for /r d:\aaa %%f in (*.txt) do echo %%f を実行すると成功するので、 for /r d:\aaa %%f in (*.txt) do ( ・・・・ ) にしてみましたが、成功しません。。。

  • コマンドプロンプトのfor文の処理について

    以下のようなスクリプトを書き,拡張子を除いた文字列を抽出できているようなのですが, for文の中の ”echo”で出力することができません. 具体的には,入力として,「hoge01.txt」 を与え 「hoge01」 を抽出したいです. 出力結果として 「echoはONです」 とでます. for文の後のechoでは,「hoge01」と問題なく出力されます. これは何故なのかご教授していただけませんでしょうか? ------------------------------------------- for %%i in (*.txt) do (set/p c=%%~ni & echo %c%) echo %c% ------------------------------------------- for文の中だと,変数の指定方法等が異なるのでしょうか? 勉強不足で大変恐縮ですが,どうぞよろしくお願いいたします.

  • Windows環境にてforコマンドで空白を含むファイルを検索して、検

    Windows環境にてforコマンドで空白を含むファイルを検索して、検索結果を移動させるバッチを作成したいのですが検索結果に空白を含む場合、移動することができないので困っています。 例えば以下のような状況で実行した場合はどうすればうまく移動することができるのでしょうか? コマンド-------------------- for /f %%A in ('dir /b /s *.mp3') do move "%%A" d:/test カレントディレクトリ------------ AA.txt BB.txt C C.txt 実行結果 AA.txt-->移動 BB.txt-->移動 move "C" d:/test-->指定されたファイルが見つかりません。 おそらくdirコマンドでの検索されたファイルに空白が入っているときは%%Aに空白までのファイル名が挿入されていることが原因だと思います。 コマンドで検索されたファイルを""で括るようなことができれば解決できると思っていますが、そのようなことができるのか知っている方がおりましたら教えていただけないでしょうか? よろしくお願いいたします。 以上