質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
バッチファイル

バッチファイル(Batch File)は、Windowsのコマンドラインインタープリターによって複数のコマンドを実行させる事が出来るスクリプトファイルです。

Q&A

1回答

4805閲覧

バッチファイル 空白文字を含む if existの使い方について

koukana

総合スコア18

バッチファイル

バッチファイル(Batch File)は、Windowsのコマンドラインインタープリターによって複数のコマンドを実行させる事が出来るスクリプトファイルです。

0グッド

0クリップ

投稿2020/04/20 03:15

編集2020/04/20 03:45

バッチファイルで空白が入ったときの
if existの使い方について教えて下さい。

空白が入るときは「""」で囲むと実行できると記載がありますが、
以下のようなバッチファイルの場合、どの部分を囲めばいいか教えてもらいたいです。

"D:%%i\My Documents" のようにしても実行できませんでした。

処理としては
「My Document」フォルダの有無を確認したいです。

rem フォルダが存在するかの確認
for /f %%i in (test.txt) do if exist D:%%i\My Documents echo %%iフォルダ作成 [OK] >> log.txt
)
for /f %%i in (test.txt) do if not exist D:%%i\My Documents echo %%iフォルダ作成 [NG] >> log.txt
)

回答お願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

"D:%%i\My Documents"

それが正しいです。

のようにしても実行できませんでした。

他の部分に問題があると思われますので、スクリプト全体と、echo offしない状態での実行結果を書いてください。実行結果は長くなるのでtest.txtは1行だけで。

また、elseを使えばifは一度で済みます。

投稿2020/04/20 03:56

otn

総合スコア85901

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

koukana

2020/04/20 06:49 編集

スクリプト
koukana

2020/04/20 04:10

回答ありがとうございます。 以上が結果になります。 スクリプトにのマイドキュメントのスペースを開けないとうまく行ったので、いけると思っていましたが、 無知なもので、内容の確認お願い致します。 申し訳ありません。
otn

2020/04/20 04:17

> for /f %%i in (list.txt) do "if exist D:\%%i\My Documents" 間違ってます。 for /f %%i in (list.txt) do if exist "D:\%%i\My Documents" です。 あと、) というごみ文字が残ってます。
koukana

2020/04/20 04:28

chcp 65001 rem My Documentsフォルダを作成 for /f %%i in (list.txt) do mkdir "D:%%i\My Documents" rem フォルダが存在するかの確認 for /f %%i in (list.txt) do if exist "D:\%%i\My Documents" echo %%iフォルダ作成 [OK] >> log.txt ) for /f %%i in (list.txt) do if not exist "D:\%%i\My Documents" echo %%iフォルダ作成 [NG] >> log.txt ) pause
koukana

2020/04/20 04:32

以上の文章にした場合でもエラーがでてしまいます。 先程の文章の件は、申し訳有りません。 以下の記事がありますが関係ありますでしょうか。 https://www.atmarkit.co.jp/ait/articles/0008/04/news002_2.html Windows 2000付属のヘルプ ファイル(「Windows 2000コマンド リファレンス」内の「ifコマンド」の解説にある関連項目から、「Ifの例」を選択する)によると、最初のスクリプトの例で、“c:\backup”というディレクトリが存在するかどうかを知りたければ、ディレクトリ名の最後に“\nul”を付けて、 if exist c:\backup\nul ~ というふうにif文の条件部を指定すればよい、と記述されている。existはファイルやディレクトリが存在しているかどうかを調査するためのコマンドであり、指定された名前のファイルでもディレクトリでもあれば、条件を満たしてしまう。そこで、どこにでも存在するとされているnulという名前のデバイス ファイル名(nulデバイスとは、データを書き込んでも無視され、読み出そうとしてもすぐにEnd of Fileになってしまう特殊なデバイス)をディレクトリ名の後ろに付加することで、backupがディレクトリであることをチェックするわけである。もしbackupがファイルならば、c:\backup\nulというパスは存在しないため、条件は成立しないのでディレクトリでないということが分かるはずである。  しかしこの方法を実際に使ってみると、パス名の中にスペース(空白)が含まれている場合には、正しく意図したとおりに動作しないようである。スペースを含むパスをスクリプト内で記述するには、これをダブルクオートでくくる必要があるのだが、こうするとうまく動作しないのである。例えば、 if exist "c:\Program Files\nul" ~ if exist "c:\Program Files"\nul ~ のいずれの書き方でも条件が不成立となってしまう。このよう場合も含めて正しく動くようにするには、dirコマンドとfindコマンドを組み合わせて、 dir "c:\Program Files" 2>nul ^ | find "<DIR> .." >NUL if not errorlevel 1 echo folder exist ※1行目の最後にある「^」は、行が継続していることを表す。ここではコラム幅の都合上、2行に分割しているが、実際には1行にまとめてもよい。 などとするしかないようである。これは、dirコマンドのパラメータにディレクトリを指定したときの出力である、
otn

2020/04/20 04:39

実行結果はどうなるのでしょう? NULを付けるのは、存在した場合に、通常ファイルなのか、ディレクトリなのかを判別する方法です。 存在するかどうかには関係ないです。
koukana

2020/04/20 06:49 編集

記載致します。 Active code page: 65001
koukana

2020/04/20 04:45

xxxxxは、個人情報のため隠しているだけです。 すいません。
otn

2020/04/20 05:07

2020/04/20 13:28 のスクリプトを実行したのが、2020/04/20 13:44 の結果では無いです。 ちゃんとしてください。
koukana

2020/04/20 05:14

すいません。 ファイルパスが日本語になっているぶぶんがあるのが原因だと思われます。 以下、記載します。
koukana

2020/04/20 06:50 編集

実行バッチ chcp 65001
koukana

2020/04/20 05:16

実行結果になります。 色々申し訳有りません。 以上で内容が正しいです
otn

2020/04/20 05:43

おそらく日本語関係のCMD.EXEのバグです。まだあったんですね。UTF-8の日本語というのはあまりテストされてないのでしょう。Windows2000やXPの頃はShift_JISでも日本語のバグがありました。 UTF-8を使わずShift_JISで処理することを考えた方が良いと思います。 無理な場合、もしかすると、 for /f %%i in (list.txt) do ( if exist "D:\個人作業\%%i\My Documents" echo %%iフォルダ作成 [OK] >> log.txt ) と行を変えるとバグが発現しないかも知れませんが、仮に出なくて何時出るか分からないです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問