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

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

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

foreachは、List・Collection・Arrayといったデータ構造の各要素に対して繰り返し処理を実行するために扱われる、制御構造の構文です。

if

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

PowerShell

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

Q&A

解決済

1回答

1119閲覧

if文での条件一致を表示させる方法

-Yam-

総合スコア12

foreach

foreachは、List・Collection・Arrayといったデータ構造の各要素に対して繰り返し処理を実行するために扱われる、制御構造の構文です。

if

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

PowerShell

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

0グッド

0クリップ

投稿2021/08/03 03:09

編集2021/08/03 04:34

実現したいこと

foreach文を使ってリストを作成する際にIF文で条件一致した場合、一致した行を空白とし、結果を表示させたいです。

発生している問題

以下例文の場合、IF文でFolder1を含む場合、一行空白に置換するように作りましたが、上手く表示できません。
こちらのIF文は何が原因でしょうか。
追記で『試したこと』を実施しても表示されなかったので、削除よりは**Folder1を含んだ行のみ表示**のほうが良いのでしょうか。
Folder1含んだ行を表示させる方法を教えていただけたら幸いです。

$Dirの中身

C:\work\test1\Folder1\File1 C:\work\test1\Folder1\File2 C:\work\test1\Folder2\File1 C:\work\test1\Folder2\File2

該当のソースコード

今回、一部ソースコードを省略してます。

powershell

1foreach ($i in $Dir){ 2 if ($i -contains "Folder1") { 3 $i = $i -replace "^.*Folder2.*$", "" 4 } 5 $Directory.Add($i.Split("\")[-2],$i,"") 6 }

結果表示

testName Folder1 Folder2 --------- ------- ------- test1 C:\work\test1\Folder1\File1 test1 C:\work\test1\Folder1\File2 test1 C:\work\test1\Folder2\File1 ←空白になるはずが、そのまま表示 test1 C:\work\test1\Folder2\File2 ←空白になるはずが、そのまま表示

試したこと

if文の結果を含んでますを表示にしても表示されませんでした。

powershell

1foreach ($i in $Dir){ 2 if ($i -contains "Folder1") { 3 Write-Host "含んでます" 4 } 5 $Directory.Add($i.Split("\")[-2],$i,"") 6 }

追記

2021.08.03 『発生している問題』『試したこと』を追記

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

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

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

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

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

guest

回答1

0

ベストアンサー

もし"Folder1"という文字が含まれていたら、"Folder2"を含む文字列を空文字に置換するというコードになっているからだと思います。

投稿2021/08/03 03:54

ku__ra__ge

総合スコア4524

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

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

-Yam-

2021/08/03 04:32

ku__ra__geさん ご回答いただき、ありがとうございます。 先程、『"Folder2"を含む文字列を空文字に置換』を試しに『Write-host ”含みます”』(含みますを表示)にしてみましたが、同じ結果でした。 条件結果よりはif文の条件箇所『($i -contains "Folder1")』が駄目なのでしょうか。
kamikazelight

2021/08/03 12:46

ku__ra__geさんの言葉をもう少し丁寧に説明すると 「もし"Folder1"という文字が含まれていたら、"Folder2"を含む文字列を空文字に置換する」 なのでIf文の条件が満たされたとき "Folder1"という文字は必ず含まれていますが ここでは"Folder2"が含まれているかどうかは条件に書かれていないので "Folder2"は含まれていないかもしれない ということです "Folder2"が含まれていなかった場合は "Folder2"を別の言葉に置き換えようとしても もとからないのでそんなことはできません。 たとえ話ですが 貴方はいま100円玉を12枚持っているとします if(あなたは100円玉を10まい持っていますか?){     500円玉2枚 を 1000円札 に交換してください。 }
-Yam-

2021/08/05 09:11

kamikazelightさん 条件に『”Folder1”という文字を含まれる』と記載してもその中に”Folder2”については条件に記載していない為、表示が出来なかったのですね。 先程、『”Folder”という文字を含まれているか(-contains)』と条件を変更し実施したとこと上手く表示ができませんでしたが 『"Folder"という文字と合致するか(-like)』と演算子を変更したら上手く表示できました。 教えていただき、ありがとうございます! =表示できたソースコード= foreach ($i in $Dir){ if ($i -like "*Folder*") { $i = $i -replace "^.*Folder2.*$", "" } $Directory.Add($i.Split("\")[-2],$i,"") }
Zuishin

2021/08/05 10:10

> $i = $i -replace "^.*Folder2.*$", "" $i = "" と同じでは?
-Yam-

2021/08/05 10:27 編集

Zuishinさん 条件を最初から『Folder』→『Folder2』に指定した場合、条件結果を上記のやり方が簡潔で分かりやすいですね。 簡潔に表示できる方法教えていただき、ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問