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

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

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

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

Q&A

解決済

1回答

2893閲覧

ワイルドカードを使って文字列を削除したいです。(Powershell)

Noricha

総合スコア20

PowerShell

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

0グッド

0クリップ

投稿2021/12/22 07:32

編集2021/12/22 07:35

こんにちは。
質問があり、投稿をさせて頂きました。

ファイルパスが長い文字列を簡単に開けるように、
以前にこちらでお世話になったNorichaと申します。

ご覧頂き、ありがとうございます。
お力添えを頂けるとありがたく思い、書き込みをさせて頂きました。

PowerShell

1-Type -AssemblyName System.Windows.Forms # アセンブリ 2$get = [System.Windows.Forms.Clipboard]::GetText() # クリップボードを取得します 3$get = $get -replace "`r`n","" # 改行を削除します 4$get = $get -replace " ","" # 半角スペースを削除します 5$get = $get -replace " ","" # 全角スペースを削除します 6$get = $get -replace "<*>","" # <・・・>を削除します・・・⓵ 7$get = $get.Replace(">","") # >を削除します 8$get = $get.Replace(">","") # >を削除します 9$get = $get.Replace('"',"") # "を削除します 10# ファイルを実行します 11Start-Process $get

⓵が思うように動かず困っています。

【実施したい事】
メールが届く長いファイルパスで<・・・>が混ざることがあり、アクセスできないので<・・・>を削除したいです。
<・・・>は上位ファイルパスであり、原因はわからないのですが届いたメールに混ざっていることがあります。
<・・・>はランダム文字数+文字列です。
例)
実際にアクセスするファイルパス
\rei\rei1\rei2\rei3\rei4\rei5\aaa.xlsx
メール記載ファイルパス
\rei\rei1\rei2**file://\rei\rei1\rei2\**rei3\rei4\rei5\xyz.xlsx
太字の部分が追加されてしまう状況です。

ワイルドカードでできないだろうかと思い、
$get = $get -replace "<*>",""
と記述してみましたがダメでした。

念のため、"を削除して
$get = $get -replace <*>,""
としてみたり、Googleで検索をしたのですが残念ながら該当の記事を検索できませんでした。

・こうすればできるよ。
・そもそも、こうしたほうがいいんじゃない?
・ここ間違えているよ。
等、お教えいただけますと嬉しいです。
・ちょっとつくってみたよ も大歓迎です。

よろしければ、お教え頂けますと大変嬉しいです。
ご面倒をお掛け致しますが、宜しくお願い致します。

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

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

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

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

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

guest

回答1

0

ベストアンサー

これを試して。

ピリオドを付けて!

PowerShell

1$get = $get -replace "<.*>","" # <・・・>を削除します

投稿2021/12/22 10:52

ccc-

総合スコア356

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

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

Noricha

2021/12/22 12:20

ccc-さん! 今回もまたまたありがとうございます。 今は自宅で同じ環境作れないので明日職場で試してみます。 教えてくださってありがとうございます。 結果また報告します。 本当にありがとうございます。 とても嬉しいです。
Noricha

2021/12/22 13:33 編集

ccc-さん 自宅で試しに同じフォルダパス構成を作ってみて、スクリプトを走らせてみました。 $get = $get -replace "<.*>","" もピリオドを追加しました。 残念ながら、下記エラーが表示されました。 ----------------------------powershell 発生場所 C:\・・・\・・・\・・・¥test2.ps1:11 文字:22 + $get = $get.Replace(">","") # >繧貞炎髯、縺励∪縺・ + ~ メソッド呼び出し内に ')' が存在しません。 発生場所 C:\・・・\・・・\・・・\test2.ps1:11 文字:23 + $get = $get.Replace(">","") # >繧貞炎髯、縺励∪縺・ + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 文字列に終端記号 " がありません。 + CategoryInfo : ParserError: (:) [], ParseException + FullyQualifiedErrorId : MissingEndParenthesisInMethodCall ------------------------------------------------------ おそらく別件で、 ⓵の一行上の $get = $get -replace '"',"" での、”を消すことがうまくいってなさそうです。 それ以外にも私がやらかしていそうですが。。。 色々とお教え頂き、いつもありがとうございます。 大変助かります。 嬉しいです。 明日職場でもう少し確認をしてみます。
Noricha

2021/12/23 02:19 編集

ccc-さん。 教えてくださりありがとうございます。 職場の環境だとエラーなく、正常に利用できました。 とてもうれしいです。 早速ベストアンサーにさせて頂きます。 本当にありがとうございました。
ccc-

2021/12/23 12:10

お仕事お疲れ様です。 先週の日曜日から、ネットの状況が良くありません。 可能な場合を除き、早朝や夜間に返信するように調整してます。 ご了承ください。 プログラムは、エラーなく動いたようで安心しました。 スクリプトの質が向上していますね。 シングルクォーテーション、ダブルクォーテーションの 使い方も、良く勉強している証拠だと思います。 さらに、帰宅後もプログラミングをする姿に、とても励まされました。 お忙しい中、ご丁寧な対応に心から感謝しています。 そして、ベストアンサーありがとうございました。 今日は、日本ハム広東風麻婆春雨(チルド商品)を調理しました。 キャベツを切って、炒めるだけの簡単調理ですが良くできました。 まだまだ私も未熟者ですが、今後ともよろしくお願いします。
Noricha

2021/12/25 05:53

ccc-さん。 ありがとうございます。 お陰で無事動いてとっても嬉しいです。 動くと心の中でガッツポーズが出ますw ご自分で食事をなさるなんてすごいです! 私はレンジで温めるものだけなので・・(汗 体形的に学びたいと思っていて、いい書籍もなく手探りで試行錯誤しています。(汗 また本屋巡りをしてみようと思います。 なぜワイルドカードで<*>でだめで、<.*>だと動いたのでしょうか。 ご存じでしたら教えて頂けますと嬉しいです。 宜しくお願い致します。
ccc-

2021/12/25 16:33

お返事ありがとうございます。 お忙しい中、サンプルプログラムをご利用いただきまして誠に有り難うございます。 益々進化していく姿を見ると、作って良かったと思っています。 これからも、頑張ってください。応援してます! いつも、心のこもった温かいメッセージをどうもありがとうございます。 少し前から、チルド商品を購入して調理しています。 コロナ禍での気分転換になっています。ネットスーパーで注文して、 日本ハム回鍋肉 日本ハム青椒肉絲 日本ハム酢豚 日本ハム広東風麻婆春雨 など(日本ハムの中の人ではありません)試しに調理してみました。 あ!レンジもビタミンを壊さないように調整できるので、立派な調理方法だと思いますよ。 では、質問の答えに話をすすめますね! <*アスタリスク と .ピリオドについての解説> PowerShellでは、基本的にコマンドプロンプトのような書き方ができません(一部例外あり) なので、私達がPowerShell専用の命令文(書き方)を覚える必要があります。 PoowerShellで -replace を使う時は「正規表現」を使う決まりになってます(ワイルドカードは使用不可) その結果、-replace では、「ワイルドカードが使えない」ので、*アスタリスクは使えません。 しかし「正規表現」では *アスタリスクを、違う意味でなら使うことができます。 さらに、ピリオドにも重要な意味があります。 <使用例> -replace "<.*>","" <意味> <> 山括弧 ←←← 文字通りの意味 .ピリオドは、なんでもいい1文字 ←←← 質問の答え! *アスタリスクは、0回以上の繰り返し ←←← *アスタリスクは、コマンドプロンプトとは違う意味です。 今回は、ピリオドとアスタリスクを、両方「セット」にして使うことで、コンピューターに教えています。 <以下を、試してみてください> 'aaa<bbb>ccc' -replace "<.*>","" 'aaa<bb>ccc' -replace "<.*>","" 'aaa<b>ccc' -replace "<.*>","" 'aaa<>ccc' -replace "<.*>","" <> 山括弧の部分はすべて消えたと思います。 <正規表現を勉強したい?!> と、思われるかもしれませんが「正規表現」を考えて、書いて、実行して、確認するには 膨大な時間を消費します(トライ&エラーを繰り返すため) なので、勉強するなら短くて、簡単な範囲に留めた方がよろしいかと思います。 でも無理はしないで! 私も簡単な範囲しか分かりません。 今週末から来週にかけて、寒さが厳しくなると天気予報で言っていました。 大雪に気を付けて!そして、くれぐれもお体には気をつけて、暖かくしてお過ごしくださいね。 分からないことがございましたら、また書き込んでくださいね。 長文失礼しました。
Noricha

2021/12/28 04:34

ccc-さん。 ご回答ありがとうございました。 日本ハムの調理なのですね。 みているだけでよだれが出てきてしまいましたw お教え頂きありがとうございます。 PowerShellの命令文を理解し、使えるようにならなくてはいけないと 思いました。 >PowerShellで -replace を使う時は「正規表現」を使う決まりになってます(ワイルドカードは使用不可) powerShellで -replaceを使うときは、注意しなくてはいけないとよくわかりました。 <以下を、試してみてください> 'aaa<bbb>ccc' -replace "<.*>","" 'aaa<bb>ccc' -replace "<.*>","" 'aaa<b>ccc' -replace "<.*>","" 'aaa<>ccc' -replace "<.*>","" すべて消えました。 「.ピリオドは、なんでもいい1文字 ←←← 質問の答え! *アスタリスクは、0回以上の繰り返し ←←← *アスタリスクは、コマンドプロンプトとは違う意味です。」 役割、考え方が違うと理解しました。 お気づき頂いたように正規表現を勉強したいのですが、 膨大な時間がかかるようですね。 無理をしない範囲でこつこつと実施してみようと思います。 ありがとうございます。 こちらは雪国で除雪のやりすぎで腰が痛いですが 無理しない程度にしてみようと思いますw 大変お世話になりました。 ありがとうございました!
ccc-

2021/12/28 14:00

Norichaさん、お返事ありがとうございます。 腰は大丈夫でしょうか? 本当に気をつけくださいね。 ここ南国では、雪が降りません。 気象庁のホームページによれば、明日は20度以上になりそうです。 あと、プログラミングも無理しないで。。。 早いもので今年も残すところわずかとなりました。 こちらこそ大変お世話になりました。 では、良いお年をお過ごしください。。。
Noricha

2021/12/31 13:05

ccc-さん。 今年は大変お世話になりました。 非公式ではありますが、職場の友人にツールをこっそり共有した所 大好評でした。 仕事が捗るとずいぶん喜んでいました。 改めてお礼を申し上げます。 本当にありがとうございます。 20度以上ってすごいですね! こちらはマイナスのようです。。。 それでは、よいお年をお過ごし下さい。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問