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

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

新規登録して質問してみよう
ただいま回答率
85.50%
if

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

Q&A

解決済

1回答

8068閲覧

powershellでif文の条件として特定の文字列の存在有無を判定したい。

jimuma

総合スコア23

if

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

0グッド

0クリップ

投稿2019/04/19 16:08

■やりたい事

$CHECKJANLEと$CHECKMENUを文字列として連結し、
出来た文字列がfolderpath.txtに存在していれば "文字列 ○" 存在していなければ"文字列 ×"
を表示させたい。

$CHECKJANLE = "和食","洋食`","中華"

$CHECKMENU = "てんぷら","飛行機","すきやき","ステーキ","北海道","ラーメン"

folderpathの内容は以下です。(1行毎に改行して記載されている事とします)

和食\てんぷら

和食\とんかつ

和食\すきやき

洋食\ステーキ

中華\チャーハン

中華\ラーメン

■試したコード

$PATH = "C:\work\folderpath.txt"

$CHECKJANLE = "和食","洋食`","中華"
$CHECKMENU = "てんぷら","飛行機","すきやき","ステーキ","アーティスト","ラーメン"

for($i = 0; $i -lt $CHECKJANLE.Count; $i++){
for($j = 0; $j -lt $CHECKMENU.Count; $j++){
if(Select-String -Pattern "$($CHECKJANLE[$i])$($CHECKMENU[$j])" -Path $PATH -Encoding default){
Write-Output "$($CHECKJANLE[$i])$($CHECKMENU[$j]) ○"
}else{
Write-Output "$($CHECKJANLE[$i])$($CHECKMENU[$j]) ×"
}
}
}

■発生しているエラー

Select-String : 解析中 "和食\てんぷら" - 認識されないエスケープ シーケンス \て です。
発生場所 行:3 文字:25

  • if(Select-String <<<< -Pattern "$($CHECKJANLE[$i])$($CHECKMENU[$j])" -Path $PATH){
    • CategoryInfo : NotSpecified: (:) [Select-String]、ArgumentException
    • FullyQualifiedErrorId : System.ArgumentException,Microsoft.PowerShell.Commands.SelectStringCommand

Select-String : 解析中 "和食\とんかつ" - 認識されないエスケープ シーケンス \と です。
発生場所 行:3 文字:25

  • if(Select-String <<<< -Pattern "$($CHECKJANLE[$i])$($CHECKMENU[$j])" -Path $PATH){
    • CategoryInfo : NotSpecified: (:) [Select-String]、ArgumentException
    • FullyQualifiedErrorId : System.ArgumentException,Microsoft.PowerShell.Commands.SelectStringCommand

というのが中華\ラーメンの組み合わせまで18個続いて出ています。

■試した事

folderpath.txtに記載している文字列と、$CHECKJANLEに格納する文字列を両方とも
「\」(円マーク)を「-」に変えると想定通りの結果になることから、「\」(円マーク)を
含む文字列の展開が上手く出来ていないのではと思っています。
しかし、ネットで調べながら色々試しましたがどうしても上手くいかなかったので
どなたか詳しい方ご教授お願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

-Pattern は正規表現です。\ は正規表現のメタ文字なので不正な文字列になっています。代わりに -SimpleMatch を使ってみてください。

投稿2019/04/19 16:49

Zuishin

総合スコア28656

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

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

Y.H.

2019/04/19 16:57

あとは、$CHECKJANLE に代入する値の\が洋食だけ`でエスケープされてるのを直すと動きますね。 ×: $CHECKJANLE = "和食\","洋食`\","中華\" ○:$CHECKJANLE = "和食\","洋食\","中華\"
Zuishin

2019/04/19 21:51

そこも気になったんですが、エスケープされててもいっしょかと思って放置しました。直した方がいいですね。
jimuma

2019/04/20 06:29

>Zuishin様 早速の回答ありがとうございました。 -SimpleMatchで解決しました! >Y.H.様 洋食だけエスケープしてしまっていました。 ご指摘ありがとうございました。 こちらも修正したところ動きました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問