PowerShell -Part 4

レス数が900を超えています。1000を超えると表示できなくなるよ。
2020/01/01(水) 16:08:31.66ID:4oQ1Kxot
前スレ
PowerShell -Part 3
https://mevius.5ch.net/test/read.cgi/tech/1539074808/

次スレは>>980が立ててね!!
2021/01/03(日) 04:03:05.06ID:leX2V3Ud
クラスごとにファイル分けてドットソースで読み込んで
2021/01/03(日) 04:09:59.45ID:ORVbOLX2
>>847
うちでも再現したわ Win10 1909
一応定義をC#で書いたら動いたから載せておく

Add-Type @"
public class Record {
public string Key;
public double Data;
}

public class MyCollection : System.Collections.ObjectModel.KeyedCollection<string, Record> {
protected override string GetKeyForItem(Record item) {
return item.Key;
}
}
"@

$r = [Record]@{ Key = "pi"; Data = 3.14 }
$c = [MyCollection]::new()
$c.Add($r)
$c["pi"].Data # 3.14と表示されてほしい
2021/01/03(日) 04:29:20.63ID:ORVbOLX2
ごめん >>846 宛ね
>>847
まじですか
でもPSの運用的にクラス定義で複数ファイルに分けるとかありえないわ
コンソールからだと丸ごとコピペじゃなくて定義を1個ずつコピペするとエラーにならないし
なんなのかね
2021/01/03(日) 08:40:29.46ID:MW0NgZmT
PowerShellのclassってどの段階で解釈されるんだろう
2021/01/03(日) 12:17:05.18ID:n1qZMfJK
実行文が入っていない

単にコンパイルされる文、型の宣言・定義しか入っていない。
インスタンスを作ったりする、実メモリの割り付けをされる文がない
852846
垢版 |
2021/01/03(日) 17:02:17.09ID:BT1KEPia
>>851
クラス定義のps1ファイルの中身はそうすべき、ということでしょうか?
>>849
確かにコンソールで全て定義すると動きますね。
クラス周りの動きが難しいです。。。
>>847
ありがとうございます。
下記のように書き直したところうまく動きました。
◆Record.ps1
class Record {
  [string] $Key
  [double] $Data
}

◆MyCollection.ps1
. .\Record.ps1 # ←これは無くても動く…??
class MyCollection : System.Collections.ObjectModel.KeyedCollection[string, Record] {
[string] GetKeyForItem([Record] $item) {
return $item.Key
}
}

◆Test.ps1
. .\Record.ps1
. .\MyCollection.ps1
$r = [Record]@{ Key = "pi"; Data = 3.14 }
$c = [MyCollection]::new()
$c.Add($r)
$c["pi"].Data # 3.14と表示されてほしい
853851
垢版 |
2021/01/03(日) 18:34:59.83ID:n1qZMfJK
ファイルA の中で、ファイルB を読み込むと、
依存ファイルであるファイルBが、先に実行される事が確定するのだろう

一方、同じファイルに、複数のクラスを書くと、依存関係が分からないのだろう
2021/01/07(木) 01:13:26.70ID:MvQgNxU+
すいません、Powershellって、変数が空だった場合の
デフォルト値を設定する方法ってありますか?

bashでいうところの、
${hoge:-fuga}

って方法です。
2021/01/07(木) 02:45:37.83ID:CsAW39lY
ねーよ
VBSで言うIsEmpty相当すらない
せいぜい$nullかどうか調べてちっ仕方ねーなってやるしかない
2021/01/07(木) 08:03:25.19ID:1A0NtNS9
($nullでなく)空って状態はないと思うから、しいてやるならGet-Variableで変数が存在するか調べるくらいかね
2021/01/07(木) 08:17:46.65ID:7KuEq4Kq
>>854
PowerShell 7の??演算子はいかがでしょうか
2021/01/07(木) 08:28:41.55ID:6ewH2FY0
>>854
変数が空の定義次第だけど$nullでよくてPowerShell 7以降なら$hoge ?? 'fuga' でいける
空の定義に空文字を含むとかPowerShell 6以下とかなら素直に if([string]::IsNullOrEmpty($hoge)){ 'fuga' } else { $hoge } とやればいい
2021/01/07(木) 08:34:36.49ID:6ewH2FY0
>>856
変数の存在確認ならTest-Path Variable:hogeの方が楽だと思う
2021/01/07(木) 13:21:05.91ID:ht1NLYQc
7って便利なんだな
2021/01/07(木) 21:21:38.47ID:R2rezzh3
>>854
>${hoge:-fuga

サザエさんかよw
2021/01/07(木) 21:59:07.15ID:o0FdcV6b
えっ?
2021/01/07(木) 22:43:44.97ID:IvTx7xdj
foo,barも知らない人でしょ
864デフォルトの名無しさん
垢版 |
2021/01/07(木) 22:50:20.03ID:iqGL0Mlk
ほげふがの語源ってサザエさんだったの!? マジで!
2021/01/08(金) 00:22:33.24ID:s1r0Khta
来週もまた観てくださいね
$hong -or $fouf
2021/01/08(金) 10:41:54.36ID:zUQduDYO
逆にメタ変数でhoge、fugaってそこまでマイナーか?
2021/01/08(金) 11:27:10.91ID:3ONG9Jp/
>>866
誰もマイナーとか言ってない
2021/01/08(金) 11:53:36.70ID:zUQduDYO
>>867
そうか、それはすまなかった。
早とちりでございました。
お詫び申し上げます。
869デフォルトの名無しさん
垢版 |
2021/01/08(金) 12:25:26.48ID:eXVg8SYp
>>868
詫びろとは言ってない

>>867
誰かがマイナーと言ったとは言ってない

>>865
今週観たとは言ってない

>>861
ご指摘にはあたらない
870デフォルトの名無しさん
垢版 |
2021/01/08(金) 12:25:53.52ID:eXVg8SYp
これ万能論法ですな
2021/01/08(金) 12:36:55.29ID:2lGGPyYq
そう思ってるのは言ってる本人だけだろう
2021/01/09(土) 01:01:42.83ID:KQEfE/JM
※すべてのネットワークアダプタを無効にして、
Get-NetConnectionProfileは必ずエラーになる状態で実行しています。

$result=Get-NetConnectionProfile -InterfaceAlias Wi-Fi 2>$null
$?
False


$result=(Get-NetConnectionProfile -InterfaceAlias Wi-Fi 2>$null)
$?
True

この場合、マル括弧がどんな働きをして
結果が変わってしまうのか教えてください。
2021/01/09(土) 01:03:45.10ID:KQEfE/JM
ちなみにこうしても

$result=Get-NetConnectionProfile -InterfaceAlias Wi-Fi
エラーメッセージ
$?
False


$result=(Get-NetConnectionProfile -InterfaceAlias Wi-Fi)
エラーメッセージ
$?
True

という状態でした。
2021/01/09(土) 08:27:17.19ID:kPw1IBO3
>>872-873
まあバグ(MS的には仕様とも言う)みたいなもんやね

Until PowerShell 7, containing a statement within parentheses (...), subexpression syntax $(...) or array expression @(...) always reset $? to True , so that (Write-Error) shows $? as True.
This has been changed in PowerShell 7, so that $? will always reflect the actual success of the last command run in these expressions.

https://docs.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about_automatic_variables?view=powershell-7.1#short-description

なのでPowerShellを7にすれば解決するかと
2021/01/09(土) 09:13:27.43ID:iGxXP/Ic
5.1はメンテしないってことか?
OSにデフォで入ってるバージョンなんだから直せよ
2021/01/09(土) 09:49:28.96ID:kPw1IBO3
いきなり直したらユーザースクリプトのバグが顕在化したりするだろ
どうでもいいようなスクリプトなら7に上げろよ
2021/01/09(土) 10:38:48.10ID:amtktMoR
どうでもいいスクリプトで問題回避できるなら7に上げなくてもいいんじゃね。
2021/01/09(土) 11:36:00.49ID:KQEfE/JM
>>874
ありがとうございます。
あげるのも怖いので別の方法にします。
2021/01/09(土) 11:45:27.45ID:vKxQ0OMt
>>877
そう言うのは>>875に言ってやれよ
2021/01/09(土) 16:15:40.54ID:WaDdsN2m
>>878
あげる?のではなくて別物なので併用できるけど。
5.1 → powershell.exe
7.x → pwsh.exe
2021/01/10(日) 04:54:33.84ID:3v4yt86U
以下の表記の意味を教えてください。
void Queue[TResponse](Google.Apis.Requests.IClientServiceRequest request, Google.Apis.Requests.BatchRequest+OnResponse`1[TResponse] callback)
メソッドに角カッコ?や、型指定に+や`1[TResponse]の意味がわかりませんでした。

$batch = New-Object Google.Apis.Requests.BatchRequst($service)
$batch.Queue
で表示される内容です。
2021/01/10(日) 08:11:25.80ID:a907yL+h
クラスのメンバーにクラスがある時は+になるんじゃなかったか
System.Environment+SpecialFolder みたいな

[TResponse]はジェネリックの型引数
`1は型引数を1つ取るって意味
883881
垢版 |
2021/01/10(日) 21:15:33.29ID:3v4yt86U
>>882
ありがとうございます。ジェネリックというのは知らなかったので調べてみます。
あと、その、Queue[TResponse]、というメソッドに型が付いている?のもジェネリック関連でしょうか。
884デフォルトの名無しさん
垢版 |
2021/01/12(火) 16:53:39.85ID:0UGYDHaB
pythonに飲み込まれるってマジ?
2021/01/12(火) 18:35:28.45ID:U7HouJQi
pythonが吐血しちゃいますよ
2021/01/13(水) 11:04:50.14ID:u12/DUzm
>>884
え?Pythonから.NET Framework扱えるようになるの?
2021/01/13(水) 12:04:34.41ID:JJnXAm01
知らんけど今はまだ使えないの?
2021/01/13(水) 12:35:42.75ID:u12/DUzm
ironpythonなら
2021/01/16(土) 08:03:53.11ID:4aouipyb
v7.1.1
https://github.com/PowerShell/PowerShell/releases/tag/v7.1.1
890デフォルトの名無しさん
垢版 |
2021/01/18(月) 22:22:09.29ID:6Ncg8pZo
【D:\】の全てのフォルダやファイルに対して、作成日時や最終アクセス日時などを設定したいのですが、
PS D:\> Get-ChildItem -Path "D:\" | Where-Object { $_ -is [System.IO.FileInfo] } | ForEach-Object { Set-ItemProperty $_.FullName -Name CreationTime -Value "2021/01/01 00:00:00" }
ではエラーが出ます。

何がいけないのでしょうか?
2021/01/18(月) 22:59:36.90ID:Pb59NPOt
例えば特定の一つのファイルやフォルダなら上手く行くとか
パイプを分解してどこでエラーになってるのかを突き止めるとか
丸投げするにしてもエラーメッセージ位は出してあげると答える人も喜ぶと思いますよ
2021/01/19(火) 02:44:39.14ID:m3MeBQ6p
1.D:\が存在していない
2.D:\へのアクセス権がない
3.D:\にあるファイルに読み取り専用属性が設定されてるものが混ざってる
どれかな?

Where-Object { $_ -is [System.IO.FileInfo] }抜き、ファイルに限定しないで実行したときは
フォルダへのアクセス時にエクスプローラー開いてると
”別のプロセスで使用されているためアクセスできません”となった(たとえ操作対象のフォルダを開いていなくても)

変更された日時を確認するためにエクスプローラー開いたまま実行してたりする?
893デフォルトの名無しさん
垢版 |
2021/01/19(火) 21:02:07.64ID:qrtgnbPs
# set the target folder path
$targetFolder = 'I:\';

# get all files including files in sub folders
$itemList = Get-ChildItem $targetFolder -Recurse;

foreach($item in $itemList){
$item.CreationTime = '2020/12/21 00:00:00'
}
なスクリプトで実行したらエラーなく出来ました。
お騒がせしてすみませんでした。
2021/01/19(火) 23:49:36.84ID:XQEllFmW
>>893
>>890
私の環境で実行したら何のエラーもなく、CreationTimeが2021/01/01 00:00:00
になったの。

逆質問だけど、どんなエラーだったのか教えてください。
2021/01/20(水) 10:29:40.54ID:sOzWFlEJ
エクスプローラーとか、バックグラウンドで動いているシステムなどが、
フォルダをロックしていたら、失敗する

だから、タイミングによって、成功したり失敗したりする

読み取りロックは、読み取り同士では共有できるけど、
書き込みロックは、その他すべてと共有できないから、失敗する確率が高い
2021/01/25(月) 21:14:40.94ID:PMAucoEc
v7.0.4
https://github.com/PowerShell/PowerShell/releases/tag/v7.0.4
2021/01/27(水) 19:49:56.64ID:BJM8Dy5y
テキストファイルに設定できるストリームって何に使うんすか?
2021/01/27(水) 21:16:07.96ID:lPCF/h8Q
テキストストリームの事なのかNTFSの代替データストリームの事なのか
どちらなんだ
2021/01/27(水) 22:11:57.22ID:qq3K45Kg
代替データストリームはテキストに限った話じゃないのでは
2021/01/27(水) 22:45:50.85ID:9akTDBYB
テキストに限った話ではないけど、質問者が正確に把握してるともまた限らない
901デフォルトの名無しさん
垢版 |
2021/01/29(金) 23:59:43.31ID:t1LR5As2
PoweShellのクラスで、C#と同様にインデクサーを定義することはできますか?

例えば、あるクラスのインスタンス$hogeに対して
$hoge[$i] という感じで添字でアクセスしたいです。
2021/01/31(日) 14:37:31.38ID:jsWOzGKR
C#の演算子オーバーロードがPSで使えるかと同じ無意味な質問
2021/01/31(日) 16:01:58.79ID:sgLd3qg+
>>902
使えるの?
2021/01/31(日) 17:07:09.19ID:Ti7TRi+9
>>898
たぶんテキストストリームのことです
file:stream1
↑これ
2021/01/31(日) 17:24:57.96ID:x4IKZ5QX
そのファイルに付属させたい情報を一緒にいれておくということだろう
ソースだったら、開発秘話とか入れとけば?
2021/01/31(日) 17:26:58.51ID:x4IKZ5QX
あと自分の写真とか連絡先とかプロフィールを入れとけばいいかもW
2021/01/31(日) 19:01:56.87ID:Ti7TRi+9
>>905
>>906
ああREADME.md的なものをですか?
なるほどそれは便利そう
908901
垢版 |
2021/01/31(日) 19:31:38.13ID:yFPHlREj
>>902
PowerShellでも.Netの
コレクションクラスを使えますので、
インデクサーを使うこと自体はできますよね?
同様のことをユーザー定義クラスで実現できないかと思ったのですが、
無意味でしょうか…
2021/01/31(日) 20:11:33.10ID:IDCaHEld
>>904
それ代替データストリームに見えるけどどの辺がテキストストリームなんだろ
しかも、NTFSに依存する機能で.mdの代替とか悪手でしかない
2021/02/01(月) 11:36:09.24ID:XDbQ82ak
>>909
結局何に使うのか言ってないじゃん
911デフォルトの名無しさん
垢版 |
2021/02/05(金) 00:48:27.75ID:a81hUa+F
PowerShellのパイプやリダイレクトは仕様が良くないね。
エンコードせずにバイナリデータのままパイプする従来の方法も選べたほうが良かったね。
2021/02/05(金) 14:45:47.08ID:PbAzOwWf
cmd /c foo `| bar `> baz
とでもしておけ
2021/02/05(金) 21:20:19.10ID:FdcfXC45
>>911
これじゃあかんの
[byte[]]$bin = cat -encoding byte
2021/02/06(土) 08:02:58.77ID:xZe5l+zL
パイプを使いたいんだよ
2021/02/06(土) 09:37:27.62ID:ya6+Y4aC
パイプカットするの?
2021/02/06(土) 14:28:17.57ID:0arkAH5a
>>914
encoding byteがどういう型が返るか示しただけでもちろんパイプにも使えるけど
917デフォルトの名無しさん
垢版 |
2021/02/06(土) 23:58:30.54ID:5Ze23T9D
>>912
`| や`>が解説されているマイクロソフト公式ページはどこになりますか?
検索キーワードが記号ばかりなので探し方が分からず困っております。

>>913
私の環境では、以下のエラーが出て動きませんでした。
Get-Content: Cannot process argument transformation on parameter 'Encoding'.
'byte' is not a supported encoding name. For information on defining a custom encoding,
see the documentation for the Encoding.RegisterProvider method. (Parameter 'name')
2021/02/07(日) 01:02:44.55ID:hwDwbBnD
>>917
'|'はパイプ'>'はリダイレクトで調べれば出てくるよ
bashの知識が必要になるな
919デフォルトの名無しさん
垢版 |
2021/02/07(日) 01:34:59.08ID:IiZq+u+t
>>918
具体的なURLはどこになりますか?
920デフォルトの名無しさん
垢版 |
2021/02/07(日) 01:38:10.26ID:IiZq+u+t
>>918
検索にbashの知識が必要というのは具体的にどういう意味ですか?
2021/02/07(日) 01:46:34.08ID:IiZq+u+t
ひょっとして>>912>>918は別人なのかな。
もし別人なら>>918への質問はなかったことにしてください。論点がずれてるようだから。
2021/02/07(日) 07:11:26.49ID:jVPjdJHk
@パターン1
$data = @('red','green','blue')
if ( $data -ne 'green' )
{
'greenはありません'
}

greenはありません

Aパターン2
$data = @('red','green','blue')
if ( $data -ne 'pueple' )
{
'greenはありません'
}
greenはありません


両方とも同じ結果を返してしまいます。
配列と比較して、無かったらtrue、あったらfalseみたいな書き方ってありませんか?
イメージとしては

if ( $data.notContains('green'))

みたいな書き方です。

用としては、if ( $data.Contains('green'))で足りるのですが、
気持ちの問題として、無かったらtrue、あったらfalseという書き方をしたいです。

よろしくお願いいたします。
2021/02/07(日) 09:44:27.16ID:jX/y7Db/
>>922
> 両方とも同じ結果を返してしまいます。
まず
$data = @('red','green','blue')
$data -ne 'green'
で何が戻ってくるか確認すればなぜそう言うふうに動くかわかると思う

> 気持ちの問題として、無かったらtrue、あったらfalseという書き方をしたいです。
どうしても-eqとか使いたい場合、俺なら($data -eq 'green').Count == 0って書くかな
どう見ても$data.Contains('green')の方がわかりやすいと思うけど
2021/02/07(日) 09:58:10.78ID:fgGFki9a
$data = @('red','green','blue')
if (not ($data -eq 'green')) {}
if (not ($data.Contains('green'))) {}
if (not ($data -contains 'green')) {}
if ($data -notcontains 'green') {}
if ('green' -notin $data) {}

-eq演算子はフィルタとして働くのでここでの用法は微妙
-in系の演算子は配列が大きいとオーバーヘッドが大きいらしい
2021/02/07(日) 09:59:45.82ID:fgGFki9a
否定をtrueにするってどういうことだろ
$colors = @('red','green','blue')
$found = $data -contains 'green'
if ($found) {
} else {
}
なら自然に読み下せる
ここで$notFoundという変数を使われると気になる
if (not $found) {
# 先に書いておきたい処理
} else {
# 長々とした本処理
}
としたいという趣旨ならわかる
2021/02/07(日) 10:03:05.78ID:fgGFki9a
変数名を変え忘れたので訂正
$found = $colors -contains 'green'
2021/02/07(日) 10:18:17.21ID:jVPjdJHk
>>923-925
レスありがとうございます。

> 否定をtrueにするってどういうことだろ
> どう見ても$data.Contains('green')の方がわかりやすいと思うけど

$exec_shinai_jikan=@('01','02','03')
$imananji=Get-Date -Format HH

if ($exec_shinai_jikan -notcontains $imananji){
"実行するよ"
} else {
"実行しないよ"
}

実際のコード(一部)はこれです。変数名のセンスが独特ですよね・・(By 開発の人、私は開発じゃないです)といわれているので
出すのが恥ずかしかったんです。混乱を生んだようでして申し訳ない。

>で何が戻ってくるか確認すればなぜそう言うふうに動くかわかると思う

 ・0か0を超える値か
 ・nullかnullを除く何らかの値か

でtrue or falseが決まる感じでしょうか?
 
-notって、-notだけじゃ赤傍線引かれるけどなにがだめなんだと思ったら、-not〜って表現があったんですね。
ありがとうございます。
2021/02/07(日) 10:22:55.16ID:5sEA4G4p
>>918
bashの知識は不要でしょ
DOSですらパイプやリダイレクト存在するんだし
2021/02/07(日) 10:24:14.00ID:fgGFki9a
なるほどそういう感じか
-not演算子のハイフン書き忘れてた
ごめんね
2021/02/07(日) 10:26:29.15ID:fgGFki9a
>>923
($data -eq 'green').Count -eq 0
これってgreenが含まれない場合は最初の-eq演算による絞り込み結果が$nullになって
ぬるぽになるかと思いきや$null.Countの呼び出しは特例的に0を返すんやね
またPowershellの妙な癖を覚えてしまった
2021/02/07(日) 11:48:29.36ID:jX/y7Db/
>>930
> これってgreenが含まれない場合は最初の-eq演算による絞り込み結果が$nullになって
ならないよ、単に空の配列になるだけ
gm -inputobject ($data -eq 'yellow')
とかやればわかる
2021/02/07(日) 12:10:49.69ID:fgGFki9a
>>931
ありがとう、勘違いしてた
そこは自然な動きなんやね
2021/02/07(日) 13:45:02.08ID:hwDwbBnD
>>919
https://docs.microsoft.com/ja-jp/powershell/

ここでリダイレクトとかパイプとか検索ワードを入れれば解説が出てくるよ
2021/02/07(日) 20:57:33.01ID:rt2m338a
>>913,917
6.0で仕様変更された

https://docs.microsoft.com/ja-jp/powershell/scripting/whats-new/breaking-changes-ps6?view=powershell-7.1#unify-cmdlets-with-parameter--encoding-to-be-of-type-systemtextencoding-5080
-Encoding の値 Byteはファイルシステム プロバイダーのコマンドレットから削除されました。 新しいパラメーター -AsByteStream を使用して、入力としてバイト ストリームが必要なこと、あるいは出力がバイト ストリームであることを指定してください。
2021/02/10(水) 10:00:24.88ID:hefdb5Yb
可変長配列数?的なものの実現方法を教えてください。
CSVを以下の通り加工したいのですが、

1554412,A,B,C,D
2176944,D,C,E,F,G,H,I,J
4887447,F,H,J,A,K

こんな感じのカンマ区切りcsvを

1554412,A
1554412,B
1554412,C
1554412,D
以下同じパターン

で成形したいのです。

csv区切り文字は必ずカンマで、
フィールド数は行により異なります。

行を読み込んで、配列に入れて〜、配列の最初のフィールドを入れて〜
とぼんやり想像しているのですが、「個数が定まっていない行を、配列に入れる方法」が想像つきません。
可変長配列数?的なものの実現方法を教えてください。
2021/02/10(水) 18:12:00.38ID:hRqw8VTE
2つ目のカンマ or 改行まで読んでから要素数2の固定長配列に入れるのはどうですか。
エレガントな方法ではないと思うので、他の方の意見も参考にしてください
2021/02/10(水) 18:19:41.40ID:hRqw8VTE
あ、A, D, FじゃなくてA, B, Cでしたか。
マルチバリューカラムになっているのを正規化したいんですね。
最初の一つ目だけ取るのと勘違いしてました。

1. 一行読んでstring
2. カンマでstring.splitしてstring[]
3. [1]からstring.lengthまでを、[0]とstring.joinして、string[]
4. 全行ループ
これでどうですか
2021/02/10(水) 19:17:13.97ID:JrOSOdLx
PowerShell っぽくならこんな感じかな
'1554412,A,B,C,D', '2176944,D,C,E,F,G,H,I,J', '4887447,F,H,J,A,K' | %{
$a, $b = $_ -split ',', 2
$b -split ',' | %{ "$a,$_" }
}
2021/02/10(水) 19:51:01.55ID:hRqw8VTE
どうしてこれ動かないの?
$fが更新されない
スマホでコード書くの疲れたんで、誰か教えて下さい。

https://tio.run/##TY3LCsIwEEX38xVDyEJxLEaiVUHw/cYfkC5EUluoqTRFreK316kguBm4hzn3XtO7yVxkkqQs5cPhEEcCVKejtWrTmCY0pRm0ld/ta00zTnNa0JJWtKYN6F7P19pnsqINf29BjLDprkmcozjM7S3OUnsxNg8Gg72572JrBECYZuZ4irAmHxhb5NU6vkAW1Tijn08CZFihwh1awZ9VfC2myvM4OW9n7DmPmqoefIuelRRio6rgKwtG8IZ3WX4A
2021/02/10(水) 21:07:38.33ID:bnTPmcqs
>>939
$xs[0]としてごらん
5行目"@ -split "`n"で意図通りになると思う
2021/02/10(水) 21:45:54.25ID:JrOSOdLx
>>939
"[Environment]::NewLine"

"$([Environment]::NewLine)"
2021/02/10(水) 21:58:58.82ID:hefdb5Yb
>>937
とりあえず用は足せました。が、多分ご紹介の内容と全然違うことをやってると思います。
レスの内容が半分分かりませんでした。

>3. [1]からstring.lengthまでを
ここが猛烈にヒントになってこんな感じにしました。

foreach ($l in Get-Content C:\temp\test.txt) {
$l=$l.Split(",")
1..(($l.Length) - 1) | % {write-host ($l[0],$l[$_]) }
}

サンプルのコードをいただけると幸いです。

>>938
これも無事動きました。ありがとうございます。
%ってのを知りませんでした。

Powershell難しすぎです。
勉強してるんですが、正直心折れそうです。
bashはそこそこ使えるので行けるだろと思ってたんですが、ナメてました。
死にそうです。
2021/02/10(水) 22:00:44.14ID:hefdb5Yb
>>942
自己レスすいません。

これも結局、

write-host ($l[0],$l[$_]) }
で間をカンマ区切りにしたかったんですけど、
1時間手を変え品を変えで結局ダメでした。

何が悪いんでしょうか。
2021/02/10(水) 22:12:55.91ID:hefdb5Yb
何度もすいません。

write-hostで標準で区切り文字が半角スペースになってるという事実がやっとわかりました。
{write-host -Separator "," $l[0]$l[$_]}

で無事に希望の出力を得ることができました。

ありがとうございました。
2021/02/11(木) 00:08:14.80ID:lj0aoxL+
すっきり書けなくてもどかしい
$csv -split "\r\n" | % { $a = $_ -split ','; $a[1..($a.Count - 1)] } | % { $a[0], $_ -join ',' }
2021/02/11(木) 19:38:29.26ID:rrBqcjKj
>>939
newlineにクォートつけてたわw
>> 940, 941 さんthx

一応quote外した結果。
https://tio.run/##TY3dCoJAEIXv5ykG2YuiUdrY0oKg/396gfAiYk3B1nClsujZbYwuuhk4H/Odc83uOrexTtOqEg@LQxw5ILtdpWSHxjShKc2gI/1eXymacZrTgpa0ojVtQAWBr5TPZEUb/t6CM0LXXtOkwMPc3JI8MxdtinAw2Ov7LjEaIMpyfTzF2BAPTAzyZhNfIMp6mtHPdsgBEdWotId2@GeVX4up9DxO1ttpcy5iVzbDb9GzliJs1RV8RckI3vCuqg8
レス数が900を超えています。1000を超えると表示できなくなるよ。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況