- 1 名前:デフォルトの名無しさん mailto:sage [2022/02/13(日) 18:36:12.07 ID:LaQ04ZoE.net]
- 前スレ
PowerShell -Part 5 https://mevius.5ch.net/test/read.cgi/tech/1615994992/ 次スレは>>980が立ててね!!
- 281 名前:デフォルトの名無しさん mailto:sage [2022/05/12(木) 18:00:29.84 ID:J4rOXsT5.net]
- if やらforやらはBASICからやり直せ
- 282 名前:デフォルトの名無しさん mailto:sage [2022/05/12(木) 18:08:53.97 ID:3e5cbbRq.net]
- >>276
以下のサンプルみたいにForeach-objectとか使ってCompress-Archiveをファイル毎に実行すればいい $SrcPath = "C:\folderA\*.*" $DstPath = "C:\folderB\" Get-ChildItem $SrcPath| ForEach-Object {$DstFile = Join-Path $DstPath ($_.Name -replace '^(.+)\..+$','$1');$_}| ForEach-Object {Compress-Archive -LiteralPath $_.FullName -DestinationPath $DstFile}
- 283 名前:デフォルトの名無しさん mailto:sage [2022/05/12(木) 18:27:26.96 ID:ZUpAZ75N.net]
- PowerShellで複数アイテムに同じ処理をする場合は、アイテムをリストアップした出力をパイプでForEach-Objectに渡して
ForEach-Object の中で、一個ずつ($_ という変数で参照できる)処理するのが定番と思うの。 get-childitem | foreach-object { write-output $_.fullname $_.name } とりあえず、これをやってみると感じが分かると思うの。
- 284 名前:デフォルトの名無しさん [2022/05/12(木) 20:27:03 ID:QXSbgRzq.net]
- >>278
ありがとうございます。 ただ、フォルダAにファイル2つ置いて試してみたのですが、いずれも圧縮・移動されませんでした。。。 再度ご確認いただけますでしょか??
- 285 名前:デフォルトの名無しさん mailto:sage [2022/05/12(木) 22:15:13.98 ID:3P57KS6y.net]
- 何だその言い方
お前周りから嫌われてると思うぞ
- 286 名前:デフォルトの名無しさん mailto:sage [2022/05/12(木) 23:17:43.20 ID:TAn4nFm7.net]
- ここは労働の場じゃないからな
金のやり取りを伴ってる仕事とは違うのになんでお客様気分丸出しでいられるんだよ
- 287 名前:デフォルトの名無しさん mailto:sage [2022/05/12(木) 23:26:53.76 ID:C4APGYH2.net]
- 誰かが持ち上げてくれるからじゃないの
- 288 名前:デフォルトの名無しさん mailto:sage [2022/05/12(木) 23:56:30.38 ID:z9H8Cfuc.net]
- >>280
Compress-Archive の使い方(パラメーターの指定方法)は分かってますか? ファイル一個だけで試してみましたか? それを調べてから Get-ChildItem -path "C:\folderA" -File | ForEach-Object { Compress-Archive -LiteralPath $_.FullName -DestinationPath ("C:\folderB\" + $_.Name + ".zip") } これの意味を考えてみてください。
- 289 名前:276 [2022/05/13(金) 00:26:01.86 ID:/s7ZcOSV.net]
- 解決しました!ありがとうございます!
- 290 名前:デフォルトの名無しさん mailto:sage [2022/05/13(金) 03:41:22.40 ID:tKRLPzFb.net]
- Ruby で、7-zip なら、
a フォルダ以下を再帰的に圧縮して、a.zip アーカイブにする 圧縮 7z a (アーカイブ名) (圧縮したいフォルダ) 7z a sample.zip aaa_folder archive = "C:/Users/Owner/Documents/test/a.zip" src_dir = "C:/Users/Owner/Documents/test/a" # Program Files には半角空白があるので、"〜" で囲む puts %x("C:/Program Files/7-Zip/7z.exe" a #{ archive } #{ src_dir }) # 圧縮
- 291 名前:デフォルトの名無しさん mailto:sage [2022/05/13(金) 15:56:54.19 ID:LpRC3aDE.net]
- gciとかの-forceパラメータって必須だろうに
デフォでオフなのがなんだかな
- 292 名前:デフォルトの名無しさん mailto:sage [2022/05/13(金) 19:23:39.98 ID:Sc/EfT9l.net]
- わざわざ隠し属性で隠してるのにディフォで表示しろとか頭おかしい
- 293 名前:デフォルトの名無しさん mailto:sage [2022/05/13(金) 22:56:09.66 ID:uctr9r2r.net]
- foreach中に最後の要素でないって判定どこかでできないですか
これができなくてforに書き直すはめになること何回もあるんですけど… Foreach-Objectの場合もあったらお願いします
- 294 名前:デフォルトの名無しさん mailto:sage [2022/05/13(金) 23:28:29.60 ID:dqCr6D+p.net]
- 原理的に無理だろ...
- 295 名前:デフォルトの名無しさん mailto:sage [2022/05/14(土) 00:16:48.73 ID:5a0Y4MKv.net]
- 最後の要素でないってどういう目的で知りたいの?
本当に知りたいときもあるけど慣れてない人が書きがちなコードでもあるので気になった カンマ区切りにするために最後ならカンマを付けない分岐を書くとかそういうの
- 296 名前:デフォルトの名無しさん mailto:sage [2022/05/14(土) 00:17:48.74 ID:hb3+ANgg.net]
- カウンタを用意してforeach対象のコンテナのlengthと都度比較する
これがモダンプログラミング()
- 297 名前:デフォルトの名無しさん mailto:sage [2022/05/14(土) 00:27:25.14 ID:hb3+ANgg.net]
- >>291
次の処理の前準備を現在の要素も使ってやってて最後だけ不要なとき $i = 0 foreach ($item in $list) { # $itemの処理 # if (++$i -lt $list.length) { # 前準備 } } これなら普通にforのが見やすい
- 298 名前:デフォルトの名無しさん mailto:sage [2022/05/14(土) 05:45:14.69 ID:NJOQ17Ts.net]
- そういう最後だけ処理が違うってのは同じように処理しといて後から取り除く方が良くね?
二度手間で美しく無いように思えるけれどそれよりも 一々「最後かどうか」の判別に毎回if挿む方がバカらしく感じる
- 299 名前:デフォルトの名無しさん mailto:sage [2022/05/14(土) 05:57:00.05 ID:0bRjAEIy.net]
- 前準備ってなにさ
- 300 名前:デフォルトの名無しさん mailto:sage [2022/05/14(土) 06:07:55.24 ID:Wt4JCGPH.net]
- >>291
> カンマ区切りにするために最後ならカンマを付けない分岐を書くとかそういうの そう言うのは最初以外はカンマを頭に付けるようにしたほうがいいかと
- 301 名前:デフォルトの名無しさん mailto:sage [2022/05/14(土) 08:23:02.72 ID:m7B1u9M5.net]
- カンマ区切りしたいだけなら $list -join ',' で十分だな
- 302 名前:デフォルトの名無しさん mailto:sage [2022/05/14(土) 09:47:46.73 ID:R8RMhLQi.net]
- そう、joinで済むんだよね
慣れてない人はフラグや分岐で処理しがち だからまずは具体的にどんな処理をしようとしてるのか聞きたかったんだ
- 303 名前:デフォルトの名無しさん mailto:sage [2022/05/14(土) 10:32:45.51 ID:kcOGS6gO.net]
- カンマの話は>>291が勝手に言ってるだけなのにjoinですむとかあたおかかよw
- 304 名前:デフォルトの名無しさん mailto:sage [2022/05/14(土) 11:19:53.60 ID:0bRjAEIy.net]
- いや分からないから聞いてるのよ
- 305 名前:デフォルトの名無しさん mailto:sage [2022/05/14(土) 11:23:04.66 ID:etUAy71A.net]
- ID変わってるけど291=298な
判定する必要のない例としてカンマ区切りを挙げて、だから具体的な例を教えてくれと書いたのに、カンマ区切りのうまいやり方をレクチャーしてくれる人が出てきたから説明しただけよ
- 306 名前:デフォルトの名無しさん mailto:sage [2022/05/14(土) 12:41:49.36 ID:HwJxcgzF.net]
- >>294
後から取り消せないこともあるだろう 例えばライトワンスメディアに書くとか
- 307 名前:デフォルトの名無しさん mailto:sage [2022/05/14(土) 13:05:47 ID:Ws3jUYfQ.net]
- 具体的な処理が分からんとどうしようもないだろ
準備じゃなくて、準備のための情報の保存にすることならできるんじゃないか #itemの準備 #itemの処理 #次のitemの準備のための設定 として実際の準備は次のループの先頭で行うようにする
- 308 名前:デフォルトの名無しさん mailto:sage [2022/05/14(土) 13:37:46 ID:hb3+ANgg.net]
- はあ…やっぱり論点ズラしで無いことを正当化する流れになったかw
無いなら無いでいいよ
- 309 名前:デフォルトの名無しさん mailto:sage [2022/05/14(土) 13:39:58 ID:HwJxcgzF.net]
- >>289
最初、最後、何番目などには別処理をする場合は、foreachは向いてないというか もともと for があって、何番目かを気にせず全部の要素に同じ処理をすることが多いので、そういう場合用に foreach があると思ってます
- 310 名前:デフォルトの名無しさん mailto:sage [2022/05/14(土) 14:20:17 ID:lDPvxjtF.net]
- >>304
無いことを正当化してる書き込みは見当たらないけどどのレスのこと?
- 311 名前:デフォルトの名無しさん mailto:sage [2022/05/14(土) 15:09:44.46 ID:Y4vxLItZ.net]
- だからforeachでは原理的に無理
foreach($item in $items){ ... } はざっくり $e = $items.GetEnumerator(); while ($e.MoveNext()) { $item = $e.Current; ... } みたいなコードになるから$e.MoveNext()を呼ぶまで最後かどうかはわからない 極端な話、乱数で最後にするかを決めるような実装されたらどうしようもない
- 312 名前:デフォルトの名無しさん mailto:sage [2022/05/14(土) 16:18:41 ID:YaxyXfsS.net]
- 最後の要素って$list[-1]でいいんじゃないの?
if($item -ne $list[-1]){前処理}でいけると思うけど
- 313 名前:デフォルトの名無しさん [2022/05/14(土) 18:19:29.97 ID:POYL5zWo.net]
- <section id="image-test">
<a href="https://www~BBB.jpg"> <img src = "https://www~AAA.jpg"> </a> </section> があって、AAAとBBBのURLをそれぞれ変数にかくのうしたいのですが、これであってます? $AAA = $web_source_code.getElementById("image-test").getAttribute("src") $BBB = $web_source_code.getElementById("image-test").getAttribute("href")
- 314 名前:デフォルトの名無しさん mailto:sage [2022/05/14(土) 18:55:56.30 ID:QtW6yb+i.net]
- 合ってないよ
section要素にはsrcもhrefもないんだから取れない 子や孫の要素からイイ感じで取ってきてくれるような期待をしてるんだろうけど、内側がどんな構造でいくつのimg要素とかがあるのかわかんないんだから、そんなのでイイ感じに取られる曖昧な挙動は逆に困る 要素をid指定で取ったあと.ChildNodesで自分で辿ったりする必要がある querySelectorが使えれば楽なんだけどね 何度も似たような質問を繰り返すよりもまずHTML DOMの基礎を多少でも勉強しないとずっとハマるだけだし応用もできないよ
- 315 名前:デフォルトの名無しさん [2022/05/14(土) 19:43:46.46 ID:POYL5zWo.net]
- ありがとうございます。HTML DOMを勉強してみます。
- 316 名前:デフォルトの名無しさん [2022/05/17(火) 11:55:50.17 ID:w1KKtOUX.net]
- PowerShellである処理について、変数の値だけ変えてそれぞれに同じ処理を実行したい場合、以下のように変数の値の数だけ実処理を複数段書けば実行できました。
ただ、これだとスマートではないと思いますので、ループ処理?のような形で最初に全変数を定義する等して、実際の処理自体は1か所だけにしたいのですが、どなたか書き方教えろください。。 ------------ $変数a1 = 1-a $変数b1 = 1-
- 317 名前:b
~~処理~~ ------------ $変数a2 = 2-a $変数b2 = 2-b ~~処理~~ ------------ $変数a3 = 3-a $変数b3 = 3-b ~~処理~~ ------------ [] - [ここ壊れてます]
- 318 名前:デフォルトの名無しさん mailto:sage [2022/05/17(火) 15:36:54.01 ID:VMMgADOG.net]
- コンテナでググれ
- 319 名前:デフォルトの名無しさん [2022/05/17(火) 19:17:50 ID:ZA1GChKV.net]
- ググれとか言う奴はスレから出ていけ
- 320 名前:デフォルトの名無しさん mailto:sage [2022/05/17(火) 20:03:10 ID:xbjGOtM1.net]
- 配列でループ処理するといいぞなもし
https://docs.microsoft.com/ja-jp/powershell/scripting/learn/deep-dives/everything-about-arrays?view=powershell-7.2
- 321 名前:デフォルトの名無しさん mailto:sage [2022/05/18(水) 03:24:17.13 ID:CLYU5EG2.net]
- こんな初歩の初心者にpowershellの配列は難しい気がする
別の規格がちゃんとしてる言語を1つでも履修して出直してもらいたいな プロの俺でもフィルタ関連とか関数から返した場合とかでしょっちゅう間違えるんで…
- 322 名前:デフォルトの名無しさん mailto:sage [2022/05/18(水) 09:11:28.21 ID:b9KxG2vQ.net]
- ベテランでも諳んじて一発正解するのは難しいかったりするけど、シェルなんだから試行錯誤で構造化プログラミングの感覚を摑めばいいと思うよ
固定長配列でハコとして使う分には落とし穴もそうないのでは パイプは使うかもしれないし使わないかもしれない せっかくの気付きなんだから試してみるチャンス
- 323 名前:デフォルトの名無しさん mailto:sage [2022/05/18(水) 10:26:21.69 ID:Q05gEBgM.net]
- まずforeach文で作ってみればいい、そんな難しくはない
foreach-objectとかのコマンドレットにしたい、てのは次の段階にしてみよう
- 324 名前:デフォルトの名無しさん mailto:sage [2022/05/19(木) 01:52:14.72 ID:r92G1leA.net]
- .NETのジェネリックなコレクションを使う癖を付ければpsの変な仕様に振り回されないで済むかも
- 325 名前:デフォルトの名無しさん mailto:sage [2022/05/19(木) 10:22:09.77 ID:hhrIPFsF.net]
- そもそも配列やコレクションをループで回したりするのはPowerShell的な発想ではない
積極的にパイプを使うんだよ それに馴染めないならもうインラインでC#書いたほうがいい
- 326 名前:デフォルトの名無しさん mailto:sage [2022/05/19(木) 11:54:46.82 ID:AWcD8iuw.net]
- 初学者がパイプの意味を理解するのはハードル高いと思う
コードが長くてもいいから自分のやりたいことをロジックにして組み立てる それも出来ないうちからパイプでかくなんてさらに混乱するだけ コマンドレットを見てすぐ処理を想像できるような慣れてる人ならいいと思うけどね
- 327 名前:デフォルトの名無しさん mailto:sage [2022/05/19(木) 12:11:52.45 ID:vDWzHeJO.net]
- >>320
ドトネトのコレクションはそのままパイプに突っ込めるでしょ powershellのビルトイン配列(System.Array)をMS公開文書通りに使ってるとハマりやすいという話
- 328 名前:デフォルトの名無しさん mailto:sage [2022/05/19(木) 12:19:41.05 ID:HGJ493WX.net]
- 初心者ですでにスクリプトも書いていてリファクタの相談なのに、パイプ使わないならC#でって…
原理主義なのか話を聞かない人なのか柔軟性が動脈硬化起こしてる人なのか
- 329 名前:デフォルトの名無しさん mailto:sage [2022/05/19(木) 14:36:52.46 ID:mIjloFOo.net]
- パイプに拒絶反応してる奴らがわらわらとw
- 330 名前:デフォルトの名無しさん mailto:sage [2022/05/19(木) 15:37:07.78 ID:i7u7qPJB.net]
- PowerShellのパイプはクセあるからなあ
- 331 名前:デフォルトの名無しさん mailto:sage [2022/05/19(木) 15:57:51.90 ID:K1O9Nfx2.net]
- だが、そこが良い
- 332 名前:デフォルトの名無しさん mailto:sage [2022/05/19(木) 16:21:27.92 ID:vDWzHeJO.net]
- ドトネトのコレクションはPS的には未知の参照型オブジェクトだから
PSのスコープの影響も受けないし、 配列みたいに勝手に構造を壊されたりもしないから積極的に使う事をお勧めしたい
- 333 名前:デフォルトの名無しさん mailto:sage [2022/05/19(木) 17:15:25.08 ID:z1zzxM54.net]
- >>324
いや俺はpowershellのパイプは好きだぞ 反応頭悪すぎない?
- 334 名前:デフォルトの名無しさん mailto:sage [2022/05/19(木) 17:16:58.08 ID:z1zzxM54.net]
- ID変わったけど323=328な
好きなものを無条件に全肯定しないと則敵認定ってまさに信者やん
- 335 名前:デフォルトの名無しさん mailto:sage [2022/05/20(金) 15:12:12.74 ID:rcI504Fo.net]
- -pv/-ovで黒魔術できるのがpwshパイプの真骨頂、汚いけど…
パイプは一般にバッファ単位の目詰まりが難だけど、これは-obで自由に調節できる -pv/-ov/-ovは共通パラメータだからいつでも使えるしpitfallsは大体これで解決できるからパイプ活用したいなら、最重要で覚えるべし
- 336 名前:デフォルトの名無しさん mailto:sage [2022/05/20(金) 20:50:08.65 ID:8qofalUL.net]
- >>330
パイプで最重要で覚える事はさあ、パイプはめっちゃコストコが掛かる書き方だな!って理解することじゃないかなあ 1行ずつ読んでパイプに渡してたら日が暮れるし…ずっとパイプの中で暮らさないといけない程変な言語でもない… あっこの処理、パイプで連携したら効率いいかも…なんてあんまないのでな これがパイプの真骨頂!って例を見せてくれたら、まあ考えを改めてもいいが…君の発言は新しいもの好きの勇み足発言にしか見えなくて痛々しい…
- 337 名前:デフォルトの名無しさん [2022/05/20(金) 20:56:56.50 ID:zxJBX/+G.net]
- PowetShell大好きパイプ大好き
可能な限りパイプを使うように努めてるよ
- 338 名前:デフォルトの名無しさん [2022/05/20(金) 20:58:03.25 ID:zxJBX/+G.net]
- ちょっと間違えちゃった
- 339 名前:デフォルトの名無しさん mailto:sage [2022/05/20(金) 21:00:45.78 ID:slL0jKxc.net]
- アホらし
C#と同じように書きたいならAdd-TypeでC#書けばいいでしょ
- 340 名前:デフォルトの名無しさん mailto:sage [2022/05/20(金) 21:52:53.66 ID:XK9Y5vcV.net]
- 俺はバイブの方が好き♡
- 341 名前:デフォルトの名無しさん mailto:sage [2022/05/21(土) 04:11:37 ID:xI11xSxR.net]
- 結局どんな言語や書き方であろうと慣れでしか無い
読み辛いとか言う奴の大半が適応力やワーキングメモリの低い低能
- 342 名前:デフォルトの名無しさん mailto:sage [2022/05/29(日) 14:10:16.59 ID:KYl341LT.net]
- 2つ以上のcsvをできる限り簡単に結合する方法ありますでしょうか。
a.csv id,name,gender 以下データ b.csv address,phone 以下データ $firstcsv = a.csv $secondcsv. = b.csv $ketugou = connect-csv -delimiter ',' firstcsv[0] + firstcsv[1] + $secondcsv[0] + $secondcsv[1] + firstcsv[2] $ketugou id,name,address,phone,gender 以下データ という感じであれば最高です。
- 343 名前:デフォルトの名無しさん mailto:sage [2022/05/29(日) 15:56:20.58 ID:2VGP7oaH.net]
- bash -c "paste -d , a.csv b.csv"
- 344 名前:デフォルトの名無しさん mailto:sage [2022/05/29(日) 18:24:56.01 ID:maoDzYC5.net]
- カラムの順序指定もしたいみたいだから、cutとかでもう1処理いるね。
PowerShellだと (>>338) | ConvertFrom-Csv | select id,name,address,phone,gender | ConvertTo-Csv ただしConvertFrom-Csv・ConvertTo-Csvは 元データを正確に再現する必要がある場合には難あり。 (Trim()が掛かるとかダブルクォーテーションで括られるとか。)
- 345 名前:デフォルトの名無しさん mailto:sage [2022/05/29(日) 18:27:45.99 ID:maoDzYC5.net]
- paste使えない環境とか、Trim()掛かると困るとか、PowerShellだけで実装したい場合
function Merge-Csv { Param ( [Object[]] $InputObject, [string[]] $Header, [char] $Delimiter = ',' ) $tbl = [Data.DataTable]::new() # 1行目をカラム名として使用 foreach ($csv in $InputObject) { $tbl.Columns.AddRange(($csv[0].Split($Delimiter))) } # 各CSVの同じ行同士をDataRowにする。 for ($lineIdx = 0; $lineIdx -lt $InputObject[0].Length; $lineIdx++) { $rowData = @( foreach ($csv in $InputObject) { $csv[$lineIdx].Split($Delimiter) } ) $null= $tbl.
- 346 名前:Rows.Add($rowData)
} # カラム順序を指定順序に変更する。 for ($order = 0; $order -lt $Header.Length; $order++) { $tbl.Columns[$Header[$order]].SetOrdinal($order) } # CSV形式で出力 foreach ($row in $tbl.Rows) { $row.ItemArray -join $Delimiter } } [] - [ここ壊れてます]
- 347 名前:デフォルトの名無しさん mailto:sage [2022/05/29(日) 18:28:27.86 ID:maoDzYC5.net]
- 注意:
・CSVは1行1要素の配列で、1行目にヘッダがあり、データに区切り文字を含んでいない想定。 ・各CSVのヘッダに重複はない想定。 ・1つ目のCSVの行数を基準にしている。 ・エラーチェックしてないので適宜追加すること。 例: $csv1 = @( @" id,name,gender csv1.r1.id,csv1.r1.name,csv1.r1.genger csv1.r2.id,csv1.r2.name,csv1.r2.genger csv1.r3.id,csv1.r3.name,csv1.r3.genger "@ -split '\r?\n' ) $csv2 = @( @" address,phone csv2.r1.address,csv2.r1.phone csv2.r2.address,csv2.r2.phone csv2.r3.address,csv2.r3.phone "@ -split '\r?\n' ) Merge-Csv $csv1, $csv2 -Header id, name, address, phone, gender | ConvertFrom-Csv | ft -a id name address phone gender -- ---- ------- ----- ------ csv1.r1.id csv1.r1.name csv2.r1.address csv2.r1.phone csv1.r1.genger csv1.r2.id csv1.r2.name csv2.r2.address csv2.r2.phone csv1.r2.genger csv1.r3.id csv1.r3.name csv2.r3.address csv2.r3.phone csv1.r3.genger
- 348 名前:デフォルトの名無しさん mailto:sage [2022/05/29(日) 19:20:10.32 ID:KYl341LT.net]
- >>338-340
ありがとうございます! 書き起こしてくれるなんて、感謝のしようがありません・・。 少し読み解くのに時間がかかりそうですが、半日考えても良い手が思いつかなかったので しっかり読んで身に着けたいと思います。 ありがとうございました。
- 349 名前:デフォルトの名無しさん mailto:sage [2022/05/29(日) 23:48:36.53 ID:MBI5r2Hn.net]
- 割とちゃんとした風なのが出てきてよかったな
>>337の結合は別にCSVとして処理する必要ねーじゃんと思ってたわ
- 350 名前:デフォルトの名無しさん mailto:sage [2022/05/30(月) 22:45:36.14 ID:5eMIb3Vr.net]
- どこでみんな基礎を習得してるか気になる
都度ネット検索して見よう見まねでやってるけどちゃんと体型立てて学んだ方が良い気が最近してる 上のcsv解決の発想だって全然出てこないもの
- 351 名前:デフォルトの名無しさん mailto:sage [2022/05/30(月) 23:00:34.01 ID:1p0oXEXT.net]
- PowerShellから入る人なんていないでしょ
初学者がPowerShellでまともなプログラミングを学ぶのは難しいからC#でもやった方がいいよ
- 352 名前:デフォルトの名無しさん mailto:sage [2022/05/30(月) 23:03:23.68 ID:6thXMpkz.net]
- 薄々そうじゃないかと思ってた
やっぱC#行くべきなのね
- 353 名前:デフォルトの名無しさん mailto:sage [2022/05/30(月) 23:08:03.98 ID:fHLpS2ag.net]
- >>345
C#もJavaも含めてほぼプログラム言語扱えない非プログラマーだけどPowershellは普通に学習出来たよ
- 354 名前:デフォルトの名無しさん mailto:sage [2022/05/30(月) 23:14:06.95 ID:5eMIb3Vr.net]
- 会社では追加基本インストール禁止だから使える自動化ツールがVBA、WSH、CMD、Powershell くらいしか無いのです
VBA VBSは一通り使えるけどやっぱモダンなの使いたいって事でpowershellを使いこなしたいんですよ っていうパターンは自分以外にもきっといるんだろうなって思って
- 355 名前:デフォルトの名無しさん mailto:sage [2022/05/30(月) 23:14:46.76 ID:0w3w2Q9u.net]
- >>347
どうやって学習した?
- 356 名前:デフォルトの名無しさん mailto:sage [2022/05/30(月) 23:16:19.58 ID:bPn6KqG1.net]
- どの言語を学んでも解決ロジックなんかは数をこなして他人のソースサンプルを見るとかしていかないと見につかない
C#とか言語仕様は入門書が充実してるところが違うだけで読んだからといって 問題解決力が身につくわけではないことは心得ておかないとね 教科書を全部読んだからといって入試問題が解けるか?ってこと
- 357 名前:デフォルトの名無しさん mailto:sage [2022/05/30(月) 23:16:45.35 ID:0w3w2Q9u.net]
- >>348
>会社では追加基本インストール禁止 そうさせましょう、そのために弊社の何とかを使いましょう、と営業してくるウザい連中がいるからね
- 358 名前:デフォルトの名無しさん mailto:sage [2022/05/30(月) 23:29:45.91 ID:ArE2
]
- [ここ壊れてます]
- 359 名前:ZMbw.net mailto: >>348
プライベートのPCでやればいい プロでプログラミングやってる人間は学生時代やプライベートの時間など多かれ少なかれ仕事以外の時間を捧げてるんだよ 基礎から学ぶというのはそういう連中と同じ土俵に立つってことだ [] - [ここ壊れてます]
- 360 名前:デフォルトの名無しさん mailto:sage [2022/05/30(月) 23:38:38.76 ID:fHLpS2ag.net]
- >>349
MS365関連の処理やらcmdスクリプトの代替やらログ処理やらを目的に応じてパイプ処理やら勉強してたらどうにかなった 元々プログラム言語としての習得したんじゃないから特殊かも
- 361 名前:デフォルトの名無しさん mailto:sage [2022/05/30(月) 23:38:47.91 ID:5eMIb3Vr.net]
- 方法論を聞いてるのに精神論を語る奴っているよね
- 362 名前:デフォルトの名無しさん mailto:sage [2022/05/30(月) 23:49:53.74 ID:+PNdSWJO.net]
- 普通にpwsh使ってコマンドライン作業してれば覚える
スクリプトもその延長線上
- 363 名前:デフォルトの名無しさん mailto:sage [2022/05/30(月) 23:54:36.28 ID:9dnvWkql.net]
- いうほど精神論説いてるやついる?
〇〇論を聞いてるのに〇〇論を、そういう気の利いたフレーズを言ってみたい気持ちが先行してるように見える
- 364 名前:デフォルトの名無しさん mailto:sage [2022/05/30(月) 23:57:11.82 ID:NR5IHQxQ.net]
- 本腰入れて文法とかほじくりたいならまずはpowershellexplainedってブログオススメ
- 365 名前:デフォルトの名無しさん mailto:sage [2022/05/31(火) 00:32:11.60 ID:eW10AB/z.net]
- やりたいことが先にあって、それを如何に良く実現するかをあれやこれや試行錯誤していくのがいいよ
漠然と習得したいとか体系的にとかやってると漠然としか身につかない あと人のものをよく見ること こういうやり方があったのか、ってのを一つでも多く体験するのがいい
- 366 名前:デフォルトの名無しさん mailto:sage [2022/05/31(火) 00:43:09.74 ID:z7NqqS3T.net]
- コマンドラインで補完叩きながら必要そうなパラメータやメンバ探してれば大体望みのものが見つかるはず
フラッシュ暗記的にどこに使えそうなものがあったか思い出せればヘルプも引ける 俺がワンライナー以上の事をするときの具体的な手順 必要そうな関数を一つ定義してはパラメータ与えて何回かチェック、動けばfunction:から追記リダイレクトして最後にvimで手直ししてmainを添えて取り敢えず動くものを完成 暇なときに気が向いたら体裁整えたり関数まとめたり構造化 副産物として汎用性高そうなの出来たら$profileにも追記 こういうlisp的なサイクル回して使っていくのがいいと思う
- 367 名前:デフォルトの名無しさん mailto:sage [2022/05/31(火) 00:43:37.67 ID:BZqNx7Tc.net]
- >>357
ありがとうございます 髭のオッサンは気になりますがチラ見した程度だと復習がてら良さそうです
- 368 名前:デフォルトの名無しさん mailto:sage [2022/05/31(火) 23:10:25.48 ID:OuANH9gG.net]
- このコマンドがうまく動きません。
1行で書いて、うまく動かす方法を教えてください powershell -NoProfile -ExecutionPolicy unrestricted -Command "Start-Process remove-item -ArgumentList C:\Users\Public\Desktop\test -Verb runas" Start-Process : このコマンドは、次のエラーのため実行できません: 指定されたファイルが見つかりません。 とエラーが出て正常に実行できません。 powershell -NoProfile -ExecutionPolicy unrestricted -Command "Start-Process cmd -Verb runas" powershell -NoProfile -ExecutionPolicy unrestricted -Command "Start-Process notepad -ArgumentList C:\Windows\System32\drivers\etc\hosts -Verb runas" このコマンドはうまく動くので、同じ感じで行けるのかと思ったのですが、上のremove-itemコマンドの場合がうまくいきません。
- 369 名前:デフォルトの名無しさん mailto:sage [2022/06/01(水) 04:00:12.01 ID:U+A7iBPz.net]
- remove-item.***なんて言う実行ファイルは存在しないから無理なのは当たり前
どうしてもstart-processに繋げないといけないの?
- 370 名前:361 mailto:sage [2022/06/01(水) 05:21:30.48 ID:lJWk1HAY.net]
- >>362
レスありがとうございます。 > どうしてもstart-processに繋げないといけないの? というわけではありません。 1行で管理者権限でRemove-Item C:\Users\Public\Desktop\testを実行する ということが出来れば、どんな方法であっても構いません。 ①powershell -NoProfile -ExecutionPolicy unrestricted -Command "Start-Process powershell -Verb runas" ②Powershellが管理者:Windows Powershellとして起動する。 ③remove-item C:\Users\Public\Desktop\test を実行する という①と③を1行でまとめる方法です。
- 371 名前:デフォルトの名無しさん mailto:sage [2022/06/01(水) 11:08:03.91 ID:yxFCK4Jy.net]
- >>363
自分もこの問題は解決出来なかった UAC有効な環境で管理者権限使うならStart-processか管理者権限実行なのも一緒 しかしStart-processはコマンドレット実行出来ない模様 ワークアラウンドで別のcmdスクリプト作ってそいつをStart-processで実行させるという非スマートな力業でどうにかするしかなかった
- 372 名前:デフォルトの名無しさん mailto:sage [2022/06/01(水) 11:27:22.75 ID:HV/k13ls.net]
- powershell -NoProfile -ExecutionPolicy unrestricted -command "Start-Process -Verb runas -FilePath powershell.exe -ArgumentList ‘-command remove-item C:\Users\Public\Desktop\test'"
試してないけどこんな感じで出来ん? 不備とかエスケープ処理が必要だったりとかあるかも powershellから昇格させたpowershell呼んでそこでdel
- 373 名前:デフォルトの名無しさん mailto:sage [2022/06/02(木) 00:03:43.97 ID:B9Goniqn.net]
- >>365
出来ました
- 374 名前:361 mailto:sage [2022/06/02(木) 00:05:13.65 ID:B9Goniqn.net]
- >>365
出来ました!ありがとうございます!
- 375 名前:デフォルトの名無しさん [2022/06/04(土) 17:47:37 ID:TSmSPUgr.net]
- 定義した変数のメモリ開放は$nullの代入でいいのでしょうか?
メモリリソースが足りませんとエラーがでるので。
- 376 名前:デフォルトの名無しさん mailto:sage [2022/06/04(土) 18:56:11.76 ID:IRaDT1CY.net]
- Remove-Variable
まあ設計を見直した方がいいと思うけど
- 377 名前:デフォルトの名無しさん [2022/06/04(土) 20:19:25 ID:TSmSPUgr.net]
- ありがとうございます!
- 378 名前:デフォルトの名無しさん [2022/06/18(土) 20:04:49.41 ID:2rZBula1.net]
- フォルダ内にあるすべての画像ファイルにおいて、その画像のWidthが1280のものだけを削除するスクリプトを作成中ですが、ファイルはどうやって削除するのでしょうか?
Get-ChildItem "D:\Download\test" | Sort Name | % { $img = [System.Drawing.Image]::FromFile($_.fullname) if ($img.Width -eq 1280) { Remove-Item $_ } } だと Remove-Item : Cannot find path 'D:\Download\test_01.jpg' because it does not exist. とエラーがでるのですが、パスの設定方法がいまいちわかりません。
- 379 名前:デフォルトの名無しさん mailto:sage [2022/06/18(土) 20:44:46.51 ID:opzT6/bZ.net]
- Remove-Item $_.FullName
か $_ | Remove-Item かな
- 380 名前:デフォルトの名無しさん [2022/06/18(土) 20:51:53.83 ID:2rZBula1.net]
- ありがとうございます。やってみます!
- 381 名前:デフォルトの名無しさん mailto:sage [2022/06/19(日) 00:03:25.24 ID:d/5y1flf.net]
- VSCode でも、コマンドプロンプト・PowerShell を使うと、
ファイル・フォルダ操作のアクセス権限が無いから、 右下のトーストに、そういうエラー通知が来る そこで、アプリに対して、操作を許可する それと、Windows でもファイルパス区切りに、/ を使える。 C:/Users/Owner/Documents/a.txt
|

|