🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

PowerShell

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

Q&A

解決済

2回答

1931閲覧

PowershellでCSVファイルの決まった場所に指定した文字が含まれているか確認したい

shinra-men

総合スコア1

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

PowerShell

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

0グッド

0クリップ

投稿2021/02/19 09:06

編集2021/02/22 02:18

前提・実現したいこと

Powershell初心者です。
$pathにはCSVファイルがたくさん入っているとします。
すべてのCSVを1つずつ読み込み、2列目の2行目がABCDから始まっていたら、CSVを$Targetへ移動させたいです。

CSVはヘッダー有り・文字コードSJIS・区切り文字,です。

発生している問題・エラーメッセージ

エラーメッセージはないのですが、2列目2行目を指定できていません。
ちなみに、CSVファイルの中身はSQLから書き出ししたものです。おそらくカラム名あります。

該当のソースコード

Powershell

1 2#CSVがあるフォルダ 3$path = "" 4 5#移動先フォルダ 6$Target = "" 7 8#CSVファイルの一覧 9$array = Get-ChildItem -File -Name $path 10 11#CSVファイルを1つずつ読み込む 12$array | ForEach-Object{ 13 If(Select-String -Path $_ -Pattern "ABCD*" -Quiet){ 14 Move-Item $_ $Target -Force 15 } 16}

2/20追記 

Ifの中にCSVの2列目のヘッダーを指定する文を追加しました。
2列目から検索をしたいのに、1列目を検索してしまいます。

#CSVファイルを1つずつ読み込む $array | ForEach-Object{ If(Get-Content $_ | ConvertFrom-Csv -Header 2列目のヘッダー名 | Select-String -Pattern "ABCD*"){ Move-Item $_ $Target -Force }

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

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

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

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

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

t_obara

2021/02/19 10:14

2行目ということは1行目はヘッダ行とかですか?
shinra-men

2021/02/19 11:07 編集

一行目にヘッダ行あります!
guest

回答2

0

https://qiita.com/nimzo6689/items/4a6fcabc032f570de6f0
CSVとして読み込んで、2列目をカラム名で参照して、Select-Stringを使えば良いと思います。

投稿2021/02/19 11:46

t_obara

総合スコア5488

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

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

shinra-men

2021/02/20 06:17

ご回答、ありがとうございます。 URLを参考に、ConvertFrom-Csvを追加しました。(Import-Csvは文字化け) そうすると、今度は1列目しかSelect-Stringを使えなくなってしまいました。 $array | ForEach-Object{ If(Get-Content $_ | ConvertFrom-Csv -Header 2列目のヘッダー名 | Select-String -Pattern "ABCD*"){ Move-Item $_ $Target -Force }
t_obara

2021/02/21 11:51

csvの文字コードはSJISですか?
shinra-men

2021/02/22 00:43

SJISです。 Importに書き換えてみましたが、結果は同じで、1列目にABCDが入ってるCSVしか移動してくれません。 If(Import-Csv 'file.csv' -Header 2列目のヘッダー名 -Encoding Default | Select-String -Pattern "ABCD*")
guest

0

ベストアンサー

powershell

1#If(Select-String -Path $_ -Pattern "ABCD*" -Quiet){ 2if ((Import-Csv $_ | Where-Object { $_.2列目のヘッダー -match '^ABCD' }).Count -gt 0) { 3 Move-Item $_ $Target -Force 4}

投稿2021/02/22 02:33

編集2021/02/22 02:47
Y.H.

総合スコア7918

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

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

shinra-men

2021/02/22 04:00

こちらのコードを実践したところ、解決いたしました。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問