前スレ
PowerShell -Part 4
https://mevius.5ch.net/test/read.cgi/tech/1577862511/
次スレは>>980が立ててね!!
探検
PowerShell -Part 5
■ このスレッドは過去ログ倉庫に格納されています
2021/03/18(木) 00:29:52.04ID:/MpReTiX
657デフォルトの名無しさん
2021/10/29(金) 09:10:35.42ID:354Lg8uj vscodeでスクリプト書いてると略すなって怒られるからね
658デフォルトの名無しさん
2021/10/29(金) 13:55:51.86ID:o1+BEtnt ターミナルでポチポチ動かす時は%や?を使ってる
コマンドレットもlsやcdを使ってるし
スクリプトはvscで指摘されるし補完も効くからエイリアス使わないかな
コマンドレットもlsやcdを使ってるし
スクリプトはvscで指摘されるし補完も効くからエイリアス使わないかな
659デフォルトの名無しさん
2021/10/29(金) 14:41:44.53ID:+PKyqpbv660デフォルトの名無しさん
2021/10/29(金) 18:01:47.11ID:83FlvPlk スクリプトで低速のforeach-objectなんて使わないから、
結局本名で書く機会なんて無い。
結局本名で書く機会なんて無い。
661デフォルトの名無しさん
2021/10/29(金) 19:43:20.82ID:o1+BEtnt 俺は結構使ってるなあ
662デフォルトの名無しさん
2021/10/29(金) 22:42:07.83ID:354Lg8uj663デフォルトの名無しさん
2021/10/29(金) 22:52:08.43ID:AeZX10et ボトルネックになるような場所に使うなってのは当然だが
使う場所が無いってのはどうなんだろ
使う場所が無いってのはどうなんだろ
664デフォルトの名無しさん
2021/10/30(土) 00:33:36.76ID:AwW6Wn8r 早すぎる最適化は諸悪の根源定期
性能改善を覚えるとそれが目的化するんや
そこに山があるんや
性能改善を覚えるとそれが目的化するんや
そこに山があるんや
665デフォルトの名無しさん
2021/11/02(火) 01:45:01.96ID:MFLvMhie666デフォルトの名無しさん
2021/11/02(火) 01:50:33.01ID:MFLvMhie iwr や gciなども アイリアス元なんか覚えてない
667デフォルトの名無しさん
2021/11/02(火) 01:51:33.79ID:MFLvMhie668デフォルトの名無しさん
2021/11/02(火) 07:40:44.52ID:+RlBaHPb669デフォルトの名無しさん
2021/11/02(火) 07:45:59.56ID:BCReJeM/ gciは使わないなぁ
lsか、補完でエイリアス元を使うかどっちか
オプション指定が必要な時はget-childitemですね
invoke-restmethodはproxy指定しないといけないから、コマンド履歴から呼び出してる
本当によく使うならプロファイルに書くんだけど、そこまででもない
lsか、補完でエイリアス元を使うかどっちか
オプション指定が必要な時はget-childitemですね
invoke-restmethodはproxy指定しないといけないから、コマンド履歴から呼び出してる
本当によく使うならプロファイルに書くんだけど、そこまででもない
670デフォルトの名無しさん
2021/11/02(火) 07:53:21.41ID:BCReJeM/671デフォルトの名無しさん
2021/11/02(火) 18:18:01.02ID:xDEug3LM >>670
$array | &{process{ 何か処理 }}
スクリプトブロックのprocess部はパイプから受け取ったオブジェクトを1つずつ処理するのでこれでループ処理書ける
良いところ
パイプから渡せる
当然begin部とend部も使える
動作速度は%どころかforeach文すら上回る
悪いところ
&で呼び出すとスコープ周りが面倒臭い(ドットソースで呼べばいいだけだが)
$array | &{process{ 何か処理 }}
スクリプトブロックのprocess部はパイプから受け取ったオブジェクトを1つずつ処理するのでこれでループ処理書ける
良いところ
パイプから渡せる
当然begin部とend部も使える
動作速度は%どころかforeach文すら上回る
悪いところ
&で呼び出すとスコープ周りが面倒臭い(ドットソースで呼べばいいだけだが)
672デフォルトの名無しさん
2021/11/02(火) 18:52:00.08ID:BCReJeM/ すげー!
見た目Foreach-Objectと大して変わんないように見えるけど、なんで早いんだろう?
見た目Foreach-Objectと大して変わんないように見えるけど、なんで早いんだろう?
673デフォルトの名無しさん
2021/11/02(火) 19:10:27.17ID:BCReJeM/ 全然意味ない例だけど試してみた
PS C:\> Measure-Command { ls -Recurse c:\Qt | & { process{$_.fullname > $null} } }
Days : 0
Hours : 0
Minutes : 0
Seconds : 5
Milliseconds : 196
Ticks : 51967700
TotalDays : 6.01478009259259E-05
TotalHours : 0.00144354722222222
TotalMinutes : 0.0866128333333333
TotalSeconds : 5.19677
TotalMilliseconds : 5196.77
PS C:\> Measure-Command { ls -Recurse c:\Qt | % {$_.fullname > $null} }
Days : 0
Hours : 0
Minutes : 0
Seconds : 6
Milliseconds : 190
Ticks : 61909279
TotalDays : 7.16542581018519E-05
TotalHours : 0.00171970219444444
TotalMinutes : 0.103182131666667
TotalSeconds : 6.1909279
TotalMilliseconds : 6190.9279
確かに速いね!不思議
PS C:\> Measure-Command { ls -Recurse c:\Qt | & { process{$_.fullname > $null} } }
Days : 0
Hours : 0
Minutes : 0
Seconds : 5
Milliseconds : 196
Ticks : 51967700
TotalDays : 6.01478009259259E-05
TotalHours : 0.00144354722222222
TotalMinutes : 0.0866128333333333
TotalSeconds : 5.19677
TotalMilliseconds : 5196.77
PS C:\> Measure-Command { ls -Recurse c:\Qt | % {$_.fullname > $null} }
Days : 0
Hours : 0
Minutes : 0
Seconds : 6
Milliseconds : 190
Ticks : 61909279
TotalDays : 7.16542581018519E-05
TotalHours : 0.00171970219444444
TotalMinutes : 0.103182131666667
TotalSeconds : 6.1909279
TotalMilliseconds : 6190.9279
確かに速いね!不思議
674デフォルトの名無しさん
2021/11/02(火) 20:10:29.35ID:cNrRrDlB 裏を返せばforeachは毎回スコープの是正処理が走るから遅いということか
675デフォルトの名無しさん
2021/11/02(火) 21:22:55.57ID:BCReJeM/ PS C:\> Measure-Command { ls -Rec c:\Qt |&{Begin{$f = [System.Collections.ArrayList]::new(); $d = [System.Collections.ArrayList]::new()} Process{if($_.Mode[0] -eq 'd'){$d.Add($_)}else{$f.Add($_)}} End{Write-Host "Directory: $($d.count), File: $($f.count)"}} }
Directory: 4915, File: 50123
Days : 0
Hours : 0
Minutes : 0
Seconds : 5
Milliseconds : 645
Ticks : 56455459
TotalDays : 6.53419664351852E-05
TotalHours : 0.00156820719444444
TotalMinutes : 0.0940924316666667
TotalSeconds : 5.6455459
TotalMilliseconds : 5645.5459
PS C:\> Measure-Command { ls -Rec c:\Qt |ForEach-Object -Begin{$f = [System.Collections.ArrayList]::new(); $d = [System.Collections.ArrayList]::new()} -Process{if($_.Mode[0] -eq 'd'){$d.Add($_)}else{$f.Add($_)}} -End{Write-Host "Directory: $($d.count), File: $($f.count)"} }
Directory: 4915, File: 50123
Days : 0
Hours : 0
Minutes : 0
Seconds : 6
Milliseconds : 736
Ticks : 67362805
TotalDays : 7.79662094907407E-05
TotalHours : 0.00187118902777778
TotalMinutes : 0.112271341666667
TotalSeconds : 6.7362805
TotalMilliseconds : 6736.2805
なるほどなぁ
Directory: 4915, File: 50123
Days : 0
Hours : 0
Minutes : 0
Seconds : 5
Milliseconds : 645
Ticks : 56455459
TotalDays : 6.53419664351852E-05
TotalHours : 0.00156820719444444
TotalMinutes : 0.0940924316666667
TotalSeconds : 5.6455459
TotalMilliseconds : 5645.5459
PS C:\> Measure-Command { ls -Rec c:\Qt |ForEach-Object -Begin{$f = [System.Collections.ArrayList]::new(); $d = [System.Collections.ArrayList]::new()} -Process{if($_.Mode[0] -eq 'd'){$d.Add($_)}else{$f.Add($_)}} -End{Write-Host "Directory: $($d.count), File: $($f.count)"} }
Directory: 4915, File: 50123
Days : 0
Hours : 0
Minutes : 0
Seconds : 6
Milliseconds : 736
Ticks : 67362805
TotalDays : 7.79662094907407E-05
TotalHours : 0.00187118902777778
TotalMinutes : 0.112271341666667
TotalSeconds : 6.7362805
TotalMilliseconds : 6736.2805
なるほどなぁ
676デフォルトの名無しさん
2021/11/02(火) 21:31:08.82ID:k6b2gzuo PowerShellのForeach-Objectは一体何をしているのか
https://tech.guitarrapc.com/entry/2013/03/09/210303
https://tech.guitarrapc.com/entry/2013/03/09/210303
677デフォルトの名無しさん
2021/11/02(火) 21:53:02.25ID:0RYZAUU5 凄い懐かしい書き込みを見てしまった、書いた記憶ないよ
678デフォルトの名無しさん
2021/11/02(火) 22:32:36.74ID:BCReJeM/ え?もしかして???
実践ガイドブック買ってましたよ!
会社の備品でですが
実践ガイドブック買ってましたよ!
会社の備品でですが
679デフォルトの名無しさん
2021/11/03(水) 00:42:33.36ID:5s18AOu6 2022/1からの電子帳簿保存法改正の関係で、フォルダに格納した電子取引のファイルを
検索できるようにするためにWindowsPowerShellを使ってみようかと思っています。
ひとまずファイルの命名規則を社員に周知して、それを
Get-ChildItem -Name -Recurse | Where-Object { $_ -match ・・・
で正規表現で検索できそうなのは分かったのですが、これをサーバーの上位階層で使うと
それなりに時間がかかりそうです。
そこで以下質問なのですが、
電子取引ファイルを格納するフォルダにも新たに命名規則を適用したうえで
Get-ChildItem * | Where-Object { $_.PSIsContainer }
のようにフォルダ名のみを検索するコマンドを使って、
「サーバー上位階層以下の全てのフォルダから、
複数のAAAで始まるフォルダ名のフォルダの中のみを対象に
BBBで始まる電子取引ファイルのみを表示する」
というコマンドは可能でしょうか?
検索できるようにするためにWindowsPowerShellを使ってみようかと思っています。
ひとまずファイルの命名規則を社員に周知して、それを
Get-ChildItem -Name -Recurse | Where-Object { $_ -match ・・・
で正規表現で検索できそうなのは分かったのですが、これをサーバーの上位階層で使うと
それなりに時間がかかりそうです。
そこで以下質問なのですが、
電子取引ファイルを格納するフォルダにも新たに命名規則を適用したうえで
Get-ChildItem * | Where-Object { $_.PSIsContainer }
のようにフォルダ名のみを検索するコマンドを使って、
「サーバー上位階層以下の全てのフォルダから、
複数のAAAで始まるフォルダ名のフォルダの中のみを対象に
BBBで始まる電子取引ファイルのみを表示する」
というコマンドは可能でしょうか?
680デフォルトの名無しさん
2021/11/03(水) 03:45:40.30ID:RbvYqhXw こんな感じですかね
$dir_list = Get-ChildItem -rec -Directory -Filter 'AAA*'
foreach($d in $dir_list) { Get-ChildItem "$($d.FullName)\BBB*" -File }
$dir_list = Get-ChildItem -rec -Directory -Filter 'AAA*'
foreach($d in $dir_list) { Get-ChildItem "$($d.FullName)\BBB*" -File }
681デフォルトの名無しさん
2021/11/03(水) 03:55:12.55ID:XfZZ+0lv Ruby で作った
# 絶対パスのディレクトリ名の後ろに、* を付けること!
# . で始まる、隠し directory, file は抽出されない
src_dir = "C:/Users/Owner/Documents/Ruby/test"
glob_pattern = src_dir + "/**/*" # 以下のすべてのファイル
# 指定する語句
dir_substr = "/test1"
file_substr = "test"
target_files = Dir.glob( glob_pattern )
.select { |full_path| File.file?( full_path ) } # ファイルのみ
.select { |full_path|
# フルパスのフォルダ名だけを取り出して、その先頭から、src_dirの部分を削除する。
# つまり、src_dir見た、相対パスのフォルダパスだけにする。
# そこから、include?で、指定の語句で始まる、フォルダ名を含むものだけを抽出する
File.dirname( full_path ).delete_prefix( src_dir ).
include?( dir_substr )
}
.select { |full_path|
# ファイル名だけを取り出して、指定の語句で始まる、ファイル名を含むものだけを抽出する
File.basename( full_path ).start_with?( file_substr )
}
puts target_files
出力
C:/Users/Owner/Documents/Ruby/test/csv/test10/test10.rb
C:/Users/Owner/Documents/Ruby/test/test141/test.ini
# 絶対パスのディレクトリ名の後ろに、* を付けること!
# . で始まる、隠し directory, file は抽出されない
src_dir = "C:/Users/Owner/Documents/Ruby/test"
glob_pattern = src_dir + "/**/*" # 以下のすべてのファイル
# 指定する語句
dir_substr = "/test1"
file_substr = "test"
target_files = Dir.glob( glob_pattern )
.select { |full_path| File.file?( full_path ) } # ファイルのみ
.select { |full_path|
# フルパスのフォルダ名だけを取り出して、その先頭から、src_dirの部分を削除する。
# つまり、src_dir見た、相対パスのフォルダパスだけにする。
# そこから、include?で、指定の語句で始まる、フォルダ名を含むものだけを抽出する
File.dirname( full_path ).delete_prefix( src_dir ).
include?( dir_substr )
}
.select { |full_path|
# ファイル名だけを取り出して、指定の語句で始まる、ファイル名を含むものだけを抽出する
File.basename( full_path ).start_with?( file_substr )
}
puts target_files
出力
C:/Users/Owner/Documents/Ruby/test/csv/test10/test10.rb
C:/Users/Owner/Documents/Ruby/test/test141/test.ini
682681
2021/11/03(水) 09:08:04.21ID:XfZZ+0lv >>681
基準とするフォルダが、C:/Users/Owner/Documents/Ruby/test の時、
出力
C:/Users/Owner/Documents/Ruby/test/csv/test10/test10.rb
C:/Users/Owner/Documents/Ruby/test/test141/test.ini
は、
基準フォルダのフルパス/csv/test10/test10.rb
基準フォルダのフルパス/test141/test.ini
そこで、フォルダ名に含まれる語句が、test1 の場合、
基準フォルダの直下・子だけでなく、/csv/test10/test10.rb など、
子孫のフォルダ名に含まれる場合も抽出している
基準とするフォルダが、C:/Users/Owner/Documents/Ruby/test の時、
出力
C:/Users/Owner/Documents/Ruby/test/csv/test10/test10.rb
C:/Users/Owner/Documents/Ruby/test/test141/test.ini
は、
基準フォルダのフルパス/csv/test10/test10.rb
基準フォルダのフルパス/test141/test.ini
そこで、フォルダ名に含まれる語句が、test1 の場合、
基準フォルダの直下・子だけでなく、/csv/test10/test10.rb など、
子孫のフォルダ名に含まれる場合も抽出している
683デフォルトの名無しさん
2021/11/03(水) 09:42:35.20ID:ZuZHjCnO これはRuby信者を装ったRubyアンチ
684デフォルトの名無しさん
2021/11/03(水) 12:57:54.90ID:iUEuUW7J ファイルシステム走査するのが遅いのは仕方ないからCSVでパスと検索フラグ保持するのがよさそう
685デフォルトの名無しさん
2021/11/03(水) 13:30:44.29ID:Xpnui0Lt ローカルドライブの話ならWindows Searchサービスの機能って使えないの
あれ何なの
あれ何なの
686デフォルトの名無しさん
2021/11/03(水) 14:28:09.82ID:S9aFy+Xx ゴミ
687デフォルトの名無しさん
2021/11/03(水) 14:45:47.88ID:Sv+q3Yur688デフォルトの名無しさん
2021/11/03(水) 14:46:11.73ID:RbvYqhXw 検索出来ればよいだけで、サーバーがWindowsなら、Everything使ってもいいんじゃないでしょうか
689デフォルトの名無しさん
2021/11/03(水) 14:47:13.93ID:NXjfZMEM インデックス貼ればいいんでは。知らんけど。
690デフォルトの名無しさん
2021/11/03(水) 14:48:03.76ID:RbvYqhXw691デフォルトの名無しさん
2021/11/03(水) 14:54:32.83ID:RbvYqhXw ファイル名検索で十分そうなんで、全文検索の例は違うかと
692デフォルトの名無しさん
2021/11/03(水) 15:12:50.54ID:A+jxlAHC まずは目標性能を提示した上で実測するところからじゃろ
693デフォルトの名無しさん
2021/11/03(水) 15:25:21.20ID:RbvYqhXw 680で試してもらって、もっと速度が必要ならEverythingを検討するのがよいと思います
694601
2021/11/03(水) 16:05:48.67ID:5s18AOu6 ありがとうございます。
PGかじっただけの事務方でWindowsPowerShellも5日くらい前から
仕事の合間に調べ始めた初心者なので>>680の中身もパッと見よくわかりませんが
明日にでも調べながら試してみます。
Rubyは名前しか知らないのでごめんなさい。
上手くいかないようならEverythingというのを試してみます。
PGかじっただけの事務方でWindowsPowerShellも5日くらい前から
仕事の合間に調べ始めた初心者なので>>680の中身もパッと見よくわかりませんが
明日にでも調べながら試してみます。
Rubyは名前しか知らないのでごめんなさい。
上手くいかないようならEverythingというのを試してみます。
695679
2021/11/03(水) 16:06:34.89ID:5s18AOu6 ↑なぜか名前が601になってました
696デフォルトの名無しさん
2021/11/03(水) 20:50:39.41ID:RbvYqhXw ここら辺が参考になると思います
https://docs.microsoft.com/en-us/powershell/scripting/learn/deep-dives/everything-about-string-substitutions?view=powershell-5.1
https://docs.microsoft.com/en-us/dotnet/api/system.io.directoryinfo?view=net-5.0&viewFallbackFrom=net-4.8#properties
https://docs.microsoft.com/en-us/powershell/scripting/learn/deep-dives/everything-about-string-substitutions?view=powershell-5.1
https://docs.microsoft.com/en-us/dotnet/api/system.io.directoryinfo?view=net-5.0&viewFallbackFrom=net-4.8#properties
698デフォルトの名無しさん
2021/11/05(金) 03:47:54.25ID:UB8UVAT8 >>673
実は配列にもドット演算子が定義されていて、こういう書き方も出来る
処理も速く、書きやすいので記述量のコスパがいい
配列.要素のプロパティ名 → 要素のプロパティ名配列
Measure-Command { (ls -Recurse c:\Qt).fullname > $null} }
実は配列にもドット演算子が定義されていて、こういう書き方も出来る
処理も速く、書きやすいので記述量のコスパがいい
配列.要素のプロパティ名 → 要素のプロパティ名配列
Measure-Command { (ls -Recurse c:\Qt).fullname > $null} }
699デフォルトの名無しさん
2021/11/05(金) 04:18:51.55ID:UB8UVAT8 >>679
自分もファイル検索するスクリプト作ってるが、
速度は Where-Object と -match がボトルネックになってた
PSは特定の演算子の左オペランドを配列にすることでフィルタになるんだが、
これは処理が速いので置き換えた方がいい
配列 | Where-Object{ if($_ -match "正規表現"){$_} }
は、
配列 -match "正規表現"
で置き換えられる。
ただしパイプ処理ではなくなるので使用メモリは増える。
自分もファイル検索するスクリプト作ってるが、
速度は Where-Object と -match がボトルネックになってた
PSは特定の演算子の左オペランドを配列にすることでフィルタになるんだが、
これは処理が速いので置き換えた方がいい
配列 | Where-Object{ if($_ -match "正規表現"){$_} }
は、
配列 -match "正規表現"
で置き換えられる。
ただしパイプ処理ではなくなるので使用メモリは増える。
700デフォルトの名無しさん
2021/11/05(金) 04:57:04.64ID:booIrJ0X ワイルドカードで事足りるならget-childitemのfilterオプションが早いんじゃない?
701デフォルトの名無しさん
2021/11/05(金) 05:09:54.73ID:UB8UVAT8 確かに
702デフォルトの名無しさん
2021/11/07(日) 20:09:58.83ID:xhLNYeNd シェルスクリプト板にも書いてしまったんやが
スクリプト内で関数をサブプロセスで動かして出力も表示させる書き方ってどうすればええんや?
shでの func & 的なことをしたい
スクリプト内で関数をサブプロセスで動かして出力も表示させる書き方ってどうすればええんや?
shでの func & 的なことをしたい
703679
2021/11/07(日) 21:31:53.47ID:eC/ipH+D 脱線話になってしまうんですが、そもそもの国税庁の通達らしきものが全く流れてきていない中で
営業チラシとかからこの電子帳簿保存法の話を知って自分で調べている次第で…
で、調べてみると
https://www.nta.go.jp/law/joho-zeikaishaku/sonota/jirei/pdf/0021005-038.pdf
の2ページ目、検索要件として
「@取引年月日・取引先・金額で検索できること」
「A日付または金額の指定範囲検索」
「B2つ以上の任意の項目による検索」
とあり、そうなるとファイル名の命名規則に上記3項目を組み込み、
正規表現で検索する必要があるかな、という結論になったわけですが…
どうもこの2ページ目の※1に該当してABが不要になる可能性があり、
さらには
https://www.nta.go.jp/law/joho-zeikaishaku/sonota/jirei/pdf/0021006-031_06.pdf
の問12によると、そもそも既存のファイル管理だけしていれば検索機能要らないんじゃ…
というところに行きついたのが先週金曜の夜になります。
税理士に聞いても持ってる情報はこちらと大差なく、どう転んでいくか分からない状況 (;´д`)
営業チラシとかからこの電子帳簿保存法の話を知って自分で調べている次第で…
で、調べてみると
https://www.nta.go.jp/law/joho-zeikaishaku/sonota/jirei/pdf/0021005-038.pdf
の2ページ目、検索要件として
「@取引年月日・取引先・金額で検索できること」
「A日付または金額の指定範囲検索」
「B2つ以上の任意の項目による検索」
とあり、そうなるとファイル名の命名規則に上記3項目を組み込み、
正規表現で検索する必要があるかな、という結論になったわけですが…
どうもこの2ページ目の※1に該当してABが不要になる可能性があり、
さらには
https://www.nta.go.jp/law/joho-zeikaishaku/sonota/jirei/pdf/0021006-031_06.pdf
の問12によると、そもそも既存のファイル管理だけしていれば検索機能要らないんじゃ…
というところに行きついたのが先週金曜の夜になります。
税理士に聞いても持ってる情報はこちらと大差なく、どう転んでいくか分からない状況 (;´д`)
704デフォルトの名無しさん
2021/11/08(月) 00:13:47.57ID:bmKVlrQF 大変ですね。。。
税務署に問い合わせれば教えてくれるもんなんでしょうか?
税務署に問い合わせれば教えてくれるもんなんでしょうか?
705デフォルトの名無しさん
2021/11/08(月) 00:23:43.73ID:bmKVlrQF >>702
バックグラウンドで動かすのはstart-jobだけど、receive-jobしないといけないから、shと同じ雰囲気で動かすのは難しいんじゃないかな?
バックグラウンドで動かすのはstart-jobだけど、receive-jobしないといけないから、shと同じ雰囲気で動かすのは難しいんじゃないかな?
706デフォルトの名無しさん
2021/11/08(月) 00:48:09.32ID:j5xrb+V9707デフォルトの名無しさん
2021/11/08(月) 01:18:37.98ID:bmKVlrQF 標準出力じゃなくてファイルに出力するなら、何も考えなくてよくて簡単なんですけどねぇ
708デフォルトの名無しさん
2021/11/08(月) 14:40:09.96ID:ATC6W+sR (echo foo &) | Receive-Job -Wait
709デフォルトの名無しさん
2021/11/08(月) 15:36:36.21ID:J2dLpPYS 配列にしてファイル名取得してコピーする動きさせたです
以下のようなイメージを浮かべていますが上手くいかなくてどう書いたらいいか有識者の方教えてください
$aaa[0]=〜.txt
$aaa[1]=〜.log
$aaa[2]=〜.sh
foreach($i in 0..2){
copy-item -force aaa[$i] $コピー先
}
$?で戻り値判定
以下のようなイメージを浮かべていますが上手くいかなくてどう書いたらいいか有識者の方教えてください
$aaa[0]=〜.txt
$aaa[1]=〜.log
$aaa[2]=〜.sh
foreach($i in 0..2){
copy-item -force aaa[$i] $コピー先
}
$?で戻り値判定
710デフォルトの名無しさん
2021/11/08(月) 15:58:10.99ID:J2dLpPYS 自己解決したかも
下記でうまく動きましたわ頭悪い書き方かもしれないが
$aaa=@(ファイルパス,ファイルパス,ファイルパス)
$aaa | foreach-object { copy-item -force $aaa コピー先}
下記でうまく動きましたわ頭悪い書き方かもしれないが
$aaa=@(ファイルパス,ファイルパス,ファイルパス)
$aaa | foreach-object { copy-item -force $aaa コピー先}
711デフォルトの名無しさん
2021/11/08(月) 17:02:26.88ID:UsmHmtDw パスの引数はliteralpath使った方がいいよ
普通のpathだとワイルドカードが有効になって面倒なことになる
普通のpathだとワイルドカードが有効になって面倒なことになる
712デフォルトの名無しさん
2021/11/08(月) 17:32:28.75ID:bmKVlrQF literalpathを使った方が安全安心というのはその通りとして
戻り値チェックがなくなってるけど,それでよいのならこれでもいいんじゃないかと
foreach($i in ファイルパス,ファイルパス,ファイルパス){
copy-item -force $i コピー先
}
戻り値チェックがなくなってるけど,それでよいのならこれでもいいんじゃないかと
foreach($i in ファイルパス,ファイルパス,ファイルパス){
copy-item -force $i コピー先
}
713デフォルトの名無しさん
2021/11/08(月) 17:45:54.79ID:J2dLpPYS714デフォルトの名無しさん
2021/11/08(月) 19:18:19.58ID:bmKVlrQF []*なんかはファイル名としては普通に使えるけどpowershellではワイルドカードとして扱われるんでliteralpath使うとよいです
715デフォルトの名無しさん
2021/11/08(月) 20:03:51.47ID:Rlzdbs4L さすがに * は使えないよ
716デフォルトの名無しさん
2021/11/08(月) 21:40:49.31ID:Umd1M9Ks *は使えないけど*は使える
<>は使えないけど<>は使える
つまり
<>は使えないけど<>は使える
つまり
717デフォルトの名無しさん
2021/11/08(月) 22:58:01.79ID:bmKVlrQF718デフォルトの名無しさん
2021/11/09(火) 09:20:55.86ID:6HgHkORr719デフォルトの名無しさん
2021/11/09(火) 18:10:17.23ID:m+qVFCof720デフォルトの名無しさん
2021/11/09(火) 18:14:06.31ID:m+qVFCof721719
2021/11/09(火) 18:25:01.42ID:m+qVFCof CSV なら、
VSCode の拡張機能・Rainbow CSV で、
RainBow Query Language(RBQL)とか、
GrapeCity のExcel Viewer などで、フィルター出来るのでは?
VSCode の拡張機能・Rainbow CSV で、
RainBow Query Language(RBQL)とか、
GrapeCity のExcel Viewer などで、フィルター出来るのでは?
722デフォルトの名無しさん
2021/11/10(水) 23:58:41.48ID:s7s2g3pi Objectの配列ってあるやん?
例えばGet-childitemで返ってくるような奴。
こいつのあるプロパティの値で検索かけて、ヒットするオブジェクトを返してくれるコマンドレットってある?
例えばGet-childitemで返ってくるような奴。
こいつのあるプロパティの値で検索かけて、ヒットするオブジェクトを返してくれるコマンドレットってある?
723デフォルトの名無しさん
2021/11/11(木) 07:34:27.20ID:rdUNi5nM Where-Object
てかそれ知らなくても
Get-Childitem | %{ if($_.プロパティ -eq 'xxxx') $_ }
ってやればいいだけ
てかそれ知らなくても
Get-Childitem | %{ if($_.プロパティ -eq 'xxxx') $_ }
ってやればいいだけ
724デフォルトの名無しさん
2021/11/11(木) 08:50:00.49ID:UywKMbXB パイプラインからオブジェクトを削除する (Where-Object)
https://docs.microsoft.com/ja-jp/powershell/scripting/samples/removing-objects-from-the-pipeline--where-object-
PowerShell には、Where-Object コマンドレットがあります。これを使用すると、パイプラインの各オブジェクトをテストし、特定のテスト条件を満たしている場合にのみ、オブジェクトをパイプラインに沿って渡すことができます。 テストを通過しなかったオブジェクトは、パイプラインから削除されます。 テスト条件は、FilterScript パラメーターの値として指定します。
https://docs.microsoft.com/ja-jp/powershell/scripting/samples/removing-objects-from-the-pipeline--where-object-
PowerShell には、Where-Object コマンドレットがあります。これを使用すると、パイプラインの各オブジェクトをテストし、特定のテスト条件を満たしている場合にのみ、オブジェクトをパイプラインに沿って渡すことができます。 テストを通過しなかったオブジェクトは、パイプラインから削除されます。 テスト条件は、FilterScript パラメーターの値として指定します。
725デフォルトの名無しさん
2021/11/11(木) 09:52:00.76ID:73eTlo3I >>723
サンクス。
サンクス。
726デフォルトの名無しさん
2021/11/11(木) 09:52:38.35ID:73eTlo3I >>724
サンクス。
サンクス。
727デフォルトの名無しさん
2021/11/11(木) 09:58:56.40ID:GzUsv1SA プロパティの名前で検索するならこんな方法もありますよ
https://stackoverflow.com/questions/26997511/how-can-you-test-if-an-object-has-a-specific-property
https://stackoverflow.com/questions/26997511/how-can-you-test-if-an-object-has-a-specific-property
728デフォルトの名無しさん
2021/11/11(木) 13:58:48.12ID:AMbWD73B 質問です。
連想配列Aがあって、このAのkeyを要素とする配列Bがあります。
この配列Bの各要素の値のkeyを連想配列Aで対応するValueに全て置き換えたいのですがどうすれば良いでしょう?
新たに配列Cを作ってそこに置き換えた値を代入でもかまいません。
シンプルに出来れば良いのですが。
連想配列Aがあって、このAのkeyを要素とする配列Bがあります。
この配列Bの各要素の値のkeyを連想配列Aで対応するValueに全て置き換えたいのですがどうすれば良いでしょう?
新たに配列Cを作ってそこに置き換えた値を代入でもかまいません。
シンプルに出来れば良いのですが。
729728
2021/11/11(木) 14:20:34.82ID:7Xqdpo5k 重要な事書き忘れてました。
配列Bの要素にマッチする連想配列Aのkeyが存在しなければ、その配列の要素自体削除したい。
配列Bの要素にマッチする連想配列Aのkeyが存在しなければ、その配列の要素自体削除したい。
730デフォルトの名無しさん
2021/11/11(木) 14:30:48.53ID:GzUsv1SA 新規に$cを作ってよいのなら
PS C:\> $a = @{ a=1; b=2; c=3}
PS C:\> $b = @('a','b','c','d')
PS C:\> $c = @()
PS C:\> foreach ( $k in $b ) {
>> if ( $k -in $a.keys ) {
>> $c += $a[$k]
>> }
>> }
PS C:\> $c
1
2
3
PS C:\>
ではどうでしょう?
PS C:\> $a = @{ a=1; b=2; c=3}
PS C:\> $b = @('a','b','c','d')
PS C:\> $c = @()
PS C:\> foreach ( $k in $b ) {
>> if ( $k -in $a.keys ) {
>> $c += $a[$k]
>> }
>> }
PS C:\> $c
1
2
3
PS C:\>
ではどうでしょう?
731デフォルトの名無しさん
2021/11/11(木) 16:10:35.43ID:VwMpkHW9 >> if ( $k -in $a.keys ) {
>> $c += $a[$k]
keysで文字列の配列を作って更にそれを[]で検索して値を得る
って凄く無駄な気がするんだけど
KeyValuePairってPowerSellで使えないんだっけ
>> $c += $a[$k]
keysで文字列の配列を作って更にそれを[]で検索して値を得る
って凄く無駄な気がするんだけど
KeyValuePairってPowerSellで使えないんだっけ
732デフォルトの名無しさん
2021/11/11(木) 17:00:05.70ID:GzUsv1SA getenumeratorでとれますね
733デフォルトの名無しさん
2021/11/11(木) 17:08:23.09ID:GzUsv1SA valueが$nullではない,もしくは,valueが$nullの場合は$cに含めなくてもよいなら
ifの条件を( $null -ne $a[$k] )にできるね
$aの要素がたくさんあるならgetenumeratorでforeachを回して
$bから見つかった要素を削除するのがよいのかな?
ifの条件を( $null -ne $a[$k] )にできるね
$aの要素がたくさんあるならgetenumeratorでforeachを回して
$bから見つかった要素を削除するのがよいのかな?
734デフォルトの名無しさん
2021/11/11(木) 22:45:45.51ID:opowWSFy $a = @{a=1;b=2;c=3}
$b = @("a", "z", "c")
$c = $b | %{ $a[$_] }
これで出来てる?
$b = @("a", "z", "c")
$c = $b | %{ $a[$_] }
これで出来てる?
735デフォルトの名無しさん
2021/11/12(金) 01:15:10.90ID:M7lyd7nj Ruby なら、配列同士の積を使える
hash = { "a"=>1, "b"=>2, "c"=>3 }
p hash.keys #=> ["a", "b", "c"]
p hash.values #=> [1, 2, 3]
ary_1 = [ "c", "x", "b" ]
p ary_2 = ary_1 & hash.keys #=> ["c", "b"]
hash = { "a"=>1, "b"=>2, "c"=>3 }
p hash.keys #=> ["a", "b", "c"]
p hash.values #=> [1, 2, 3]
ary_1 = [ "c", "x", "b" ]
p ary_2 = ary_1 & hash.keys #=> ["c", "b"]
736デフォルトの名無しさん
2021/11/12(金) 04:44:44.57ID:ZAoNN4kS GetEnumerator使ったらこんな感じ
$a.GetEnumerator() |? {$_.key -in $b} | select -exp value
$a.GetEnumerator() |? {$_.key -in $b} | select -exp value
737デフォルトの名無しさん
2021/11/12(金) 04:50:17.45ID:ZAoNN4kS これでも
$a.GetEnumerator() | &{process{if ($_.key -in $b) {$_.value}}}
$a.GetEnumerator() | &{process{if ($_.key -in $b) {$_.value}}}
738デフォルトの名無しさん
2021/11/12(金) 16:12:33.21ID:xE6WDQNQ やたら凝った回答が多いけど、素直に>>734でいいと思うんだが・・・
739デフォルトの名無しさん
2021/11/12(金) 19:04:08.47ID:a3j0d+bF だめじゃね?
$c[1] に $null が入るよ
仕様は
> 配列Bの要素にマッチする連想配列Aのkeyが存在しなければ、その配列の要素自体削除したい。
だし
$c[1] に $null が入るよ
仕様は
> 配列Bの要素にマッチする連想配列Aのkeyが存在しなければ、その配列の要素自体削除したい。
だし
740デフォルトの名無しさん
2021/11/12(金) 19:19:41.08ID:0Z8rlyMb $a.GetEnumerator() |?{$_.key -in $b} |% valueか
GetEnumeratorってすぐ忘れそうだけど補完で出てくるからいっか
GetEnumeratorってすぐ忘れそうだけど補完で出てくるからいっか
741デフォルトの名無しさん
2021/11/12(金) 19:38:43.32ID:ZAoNN4kS おー、Foreach-Objectの短縮記法か
オシャレっすね
そう書けるのは知識として知ってるんだけど、全然出てきませんわ
Select-Object -ExpandProperty使っちゃう
オシャレっすね
そう書けるのは知識として知ってるんだけど、全然出てきませんわ
Select-Object -ExpandProperty使っちゃう
742デフォルトの名無しさん
2021/11/12(金) 19:54:08.84ID:a3j0d+bF > valueが$nullの場合は$cに含めなくてもよい
が許されるなら
$a[$b] -ne $null
でいけそうだけどあとで何やってるのかわからなるなw
が許されるなら
$a[$b] -ne $null
でいけそうだけどあとで何やってるのかわからなるなw
743デフォルトの名無しさん
2021/11/12(金) 22:25:34.60ID:bmw0W+Zd744デフォルトの名無しさん
2021/11/12(金) 22:36:54.20ID:bmw0W+Zd >>740
というか$a.GetEnumerator()から順序が考慮されないから正しい実装としては下記と思われる
$c = $b | ?{$a.contains($_)} | %{ $a[$_] }
というか$a.GetEnumerator()から順序が考慮されないから正しい実装としては下記と思われる
$c = $b | ?{$a.contains($_)} | %{ $a[$_] }
745デフォルトの名無しさん
2021/11/12(金) 23:08:41.99ID:ZAoNN4kS 730に戻ったね
746デフォルトの名無しさん
2021/11/13(土) 00:03:49.31ID:IngrJLwZ >>739
確認したから嘘だろと思ったら本当に入ってた・・・
表示されないのか
じゃあ途中でキーの有無を確認すればいいから、
$b | ?{ $a.ContainsKey($_) } | %{ $a[$_] }
でどうだろう。
「aのキーにあれば出力」をそのまま描いた感じ
確認したから嘘だろと思ったら本当に入ってた・・・
表示されないのか
じゃあ途中でキーの有無を確認すればいいから、
$b | ?{ $a.ContainsKey($_) } | %{ $a[$_] }
でどうだろう。
「aのキーにあれば出力」をそのまま描いた感じ
747デフォルトの名無しさん
2021/11/13(土) 00:04:11.42ID:IngrJLwZ >>744でもう書かれてた
748デフォルトの名無しさん
2021/11/13(土) 07:10:49.19ID:ugM6VKHw 順序気にするなら[ordered]を付ければいい
$a = [ordered]@{a=1;b=2;c=3}
$a = [ordered]@{a=1;b=2;c=3}
749デフォルトの名無しさん
2021/11/13(土) 12:11:25.74ID:DOOK67wF 質問よく見てないからかもしれんけど、$aの順序じゃなくて$bの順序を保証しないとだから意味ない
750デフォルトの名無しさん
2021/11/13(土) 13:11:51.91ID:Z2vNsa/D 最初の質問も曖昧な点多くてグダグダになってる感
こんなんでいいか?
$a=@{a=1;b=2;c=3}
$b=@("a","z","c")
$c=[ordered]@{}
$b|? {$_ -in $a.keys}|% {$c[$_]=$a[$_]}
こんなんでいいか?
$a=@{a=1;b=2;c=3}
$b=@("a","z","c")
$c=[ordered]@{}
$b|? {$_ -in $a.keys}|% {$c[$_]=$a[$_]}
751デフォルトの名無しさん
2021/11/13(土) 13:40:06.49ID:P6Qu4JtN a 暗号解読用テーブル
b 暗号化された本文
て感じ?
b 暗号化された本文
て感じ?
752デフォルトの名無しさん
2021/11/13(土) 14:05:31.30ID:DncAOgGY >>750
元の$bと同じ単純配列が欲しいって書いてあるのにわざわざ連想配列作るとかグダグタになってるのはお前だけだろw
元の$bと同じ単純配列が欲しいって書いてあるのにわざわざ連想配列作るとかグダグタになってるのはお前だけだろw
753デフォルトの名無しさん
2021/11/15(月) 09:18:13.04ID:xJpmlO5M754デフォルトの名無しさん
2021/11/15(月) 09:24:47.63ID:xJpmlO5M すぐ上に同じような事書いてたごめん>>742
valueが$nullな病的なケースまでは扱いたくないから知らん
valueが$nullな病的なケースまでは扱いたくないから知らん
755デフォルトの名無しさん
2021/11/16(火) 08:21:35.56ID:lP4cPAw+ ($b | %{ $a[$_] }) -ne $null が好きだな
-ne はこのための仕様なので合目的的
わかりにくさが不安ならコメントを添えてもいい
containsとアクセサでハッシュテーブルを2回ずつ検索するより好き
-ne はこのための仕様なので合目的的
わかりにくさが不安ならコメントを添えてもいい
containsとアクセサでハッシュテーブルを2回ずつ検索するより好き
756デフォルトの名無しさん
2021/11/17(水) 16:30:42.17ID:DmPYFyCr >>755
結果は同じだけど定義通りじゃないのがな
存在しないキーの値がたまたまnullだった、フィルタしたら偶然求めたい値と一致したに過ぎない
既に言われてるけどValueがnullだと食い違う
やはりcontainsKeyが1番だと思う
パイプが連続してる方がシェルっぽくて見た目もかっこいいし
結果は同じだけど定義通りじゃないのがな
存在しないキーの値がたまたまnullだった、フィルタしたら偶然求めたい値と一致したに過ぎない
既に言われてるけどValueがnullだと食い違う
やはりcontainsKeyが1番だと思う
パイプが連続してる方がシェルっぽくて見た目もかっこいいし
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 日本行き空路49万件キャンセル 中国自粛呼びかけ 日本行きチケット予約の約32%に相当 ★2 [ぐれ★]
- 【中国外務省】日中関係悪化は高市氏に責任と名指しで非難… ★4 [BFU★]
- 中国の局長は「両手をポケット」で対峙 宣伝戦で国民に示す [蚤の市★]
- 【中国局長】両国関係に「深刻な影響」 首相発言の撤回要求 [蚤の市★]
- 外務省局長は無言で厳しい表情…日中の高官協議終了か 高市首相“台湾”発言で中国が強硬対応 発言撤回求めたか…★3 [BFU★]
- 【卓球】早田ひな、「総額100万スられた」「ずっと憧れていたスペインとイタリア…」ヨーロッパ旅行で悲劇 スリ被害を告白 [muffin★]
- 【緊急】佳子さま、コロナ感染!高市発言なんかより非常事態※最新画像 [219241683]
- 【悲報】ネトウヨ「なんで高市が謝るんだよ!岡田が謝れ!😡」 [359965264]
- 【実況】博衣こよりのえちえち歌枠🧪★2
- 産経新聞「高市早苗の答弁さぁ……思慮が足りてなくね?官僚と詰めずに思いつきで話しているでしょ」 [175344491]
- 【高市速報】日本人の3割「中国への武力行使に踏み切る必要がある」ANN世論調査 [931948549]
- 【雑談】暇人集会所part18
