ダブルコーテーションとブランクの両方を含む文字列を条件に使うときは遅延変数で使う
ダブルコーテーションとブランクの両方を含む文字列を条件に使うときは遅延変数で使う
結論はこのとおりです。
一応環境載せておきます。
Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation. All rights reserved.
変数を用意しておきます。
挙動を確認するため echo on にします。
遅延変数の宣言もします。
@echo on
setlocal enabledelayedexpansion
REM ダブルコーテーションとブランクを含む文字列
set str1="C:\Program Files\hoge\foo.exe" "%%1"
REM 同じもの(別になんでもいいです)
set str2="C:\Program Files\hoge\foo.exe" "%%1"
echo 1: %str1%
echo 2: %str2%
>setlocal enabledelayedexpansion
>REM ダブルコーテーションとブランクを含む文字列
>set str1="C:\Program Files\hoge\foo.exe" "%1"
>REM 同じもの(別になんでもいいです)
>set str2="C:\Program Files\hoge\foo.exe" "%1"
>echo 1: "C:\Program Files\hoge\foo.exe" "%1"
1: "C:\Program Files\hoge\foo.exe" "%1"
>echo 2: "C:\Program Files\hoge\foo.exe" "%1"
2: "C:\Program Files\hoge\foo.exe" "%1"
これに追記していきます。
駄目なパターン1: %変数のまま使う
if %str1% == %str2% (
echo OK
) else (
echo NG
)
"%1" の使い方が誤っています。
>if "C:\Program Files\hoge\foo.exe" "%1" == "C:\Program Files\hoge\foo.exe" "%1" (
誤っているそうです。
これはよく「ブランクを含む文字列を使うときの注意」とかで解説されているやつですね。
駄目なパターン2: %変数を "
でくくって使う
if "%str1%" == "%str2%" (
echo OK
) else (
echo NG
)
Files\hoge\foo.exe" "%1"" の使い方が誤っています。
>if ""C:\Program Files\hoge\foo.exe" "%1"" == ""C:\Program Files\hoge\foo.exe" "%1"" (
%変数 を "
でくくるというのはよくある解決策として挙げられていますが、これではダメです。
""C:\Program
と Files
以降で分かれちゃったようです。
Files
以降 は Files\hoge\foo.exe" "%1""
でひとかたまりなのかな?その間にブランクがあるけれども。
よくわかりません。
うまくいくパターン: 遅延変数を使う
if !str1! == !str2! (
echo OK
) else (
echo NG
)
>if !str1! == !str2! (echo OK ) else (echo NG )
OK
構文エラーは出ませんでした。
遅延変数は、"
でくくってもくくらなくてもちゃんと動きます。
"
でくくった場合は、 「くくった"
も含む文字列」の比較になります。
どんなときに使うねん
ftype
コマンドでファイルとアプリケーションの関連付けを見ると、"
と (ブランク) が使われた文字列が出てきます。
e.g. .docファイル
>assoc .doc
.doc=Word.Document.8
>ftype Word.Document.8
Word.Document.8="C:\Program Files (x86)\Microsoft Office\Root\Office16\WINWORD.EXE" /n "%1" /o "%u"
この辺いじってたら気づきました。
"C:\Program Files\~~"
みたいなファイルパスにしおってからに・・・
Author And Source
この問題について(ダブルコーテーションとブランクの両方を含む文字列を条件に使うときは遅延変数で使う), 我々は、より多くの情報をここで見つけました https://qiita.com/busitd/items/8f3679e103ddf94094fa著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .