【.cmd】 バッチファイルスクリプト %15 【.bat】 (843レス)
上下前次1-新
270(1): デフォルトの名無しさん [sage] 2023/05/06(土) 19:22:29.47 ID:l5Xh2UOq(2/2) AAS
 こっちのが短いし判りやすいか 
 $hash=@{}; $json | %{ if (!$hash.Contains($_.characterID) -or $_.Level -gt $hash[$_.characterID].Level) { $hash[$_.characterID] = $_ }}; $hash.Values 
271(1): デフォルトの名無しさん [sage] 2023/05/06(土) 21:10:41.34 ID:UyrtVAAx(1) AAS
 機能的にはあるっぽいよ 
 jq "group_by(.characterID) | map(max_by(.Level))" 
 ※動作未確認 
272: デフォルトの名無しさん [sage] 2023/05/06(土) 22:01:27.09 ID:gRoxw4m5(2/3) AAS
 >>269269(1): デフォルトの名無しさん [sage] 2023/05/06(土) 18:58:59.94 ID:l5Xh2UOq(1/2) AAS
 powershellで 
 $json_string = @' 
 [{"characterID": 1,"Level": 50, "Status": {"idx":1}}, 
 {"characterID": 1,"Level": 100, "Status": {"idx":2}}, 
 {"characterID": 2,"Level": 50, "Status": {"idx":3}}, 
 {"characterID": 3,"Level": 50, "Status": {"idx":4}}, 
 {"characterID": 3,"Level": 100, "Status": {"idx":5}}] 
 '@ 
 $json = $json_string | ConvertFrom-Json 
 $json | group characterID | select @{N='ID';E={$_.Name}},@{N='MaxL';E={[int]($_.group | measure -Maximum Level).Maximum}} | %{ $id=$_.ID; $maxl=$_.MaxL; $json | ?{ $id -eq $_.characterID -and $maxl -eq $_.Level}} 
 出力結果 
 characterID Level Status 
 ----------- ----- ------ 
           1   100 @{idx=2} 
           2    50 @{idx=3} 
           3   100 @{idx=5} 
 バッチファイルから呼び出す場合 
 set FILENAME=test.txt 
 powershell -c "$json=gc %FILENAME% | ConvertFrom-Json; $json | group characterID | select @{N='ID';E={$_.Name}},@{N='MaxL';E={[int]($_.group | measure -Maximum Level).Maximum}} | %%{ $id=$_.ID; $maxl=$_.MaxL; $json | ?{ $id -eq $_.characterID -and $maxl -eq $_.Level}}"  
powershell でできるのね 
 ありがとう 
 group characterIDでこうなって、 
 Count Name                      Group 
 ----- ----                      ----- 
     2 1                         {@{characterID=1; Level=50; Status=}, @{characterID=1; Level=100; Status=}} 
     1 2                         {@{characterID=2; Level=50; Status=}} 
     2 3                         {@{characterID=3; Level=50; Status=}, @{characterID=3; Level=100; Status=}} 
 selectの結果こうなってるみたいだけど 
 ID MaxL 
 -- ---- 
 1   100 
 2    50 
 3   100 
 select内の『E={[int]($_.group | measure -Maximum Level).Maximum}』でLevelの最大値が取れる構文が理解できてない 
 特に.Maximumの情報が見つからなくてわかってない 
 measure結果のMaximumの値を取得してるってこと? 
 Count             : 
 Average           : 
 Sum               : 
 Maximum           : 
 Minimum           : 
 StandardDeviation : 
 Property          : 
  
 その後はまだ全然わかってない 
 『%{ $id=$_.ID; $maxl=$_.MaxL;$json | ?{ $id -eq $_.characterID -and $maxl -eq $_.Level}}』 
 select結果のIDとMaxLとConvertFrom-Json結果のcharacterIDとLevelが同じ値のものだけ出力しているんだと思うんだけど構文が全く理解できない 
 %はForEach? 
 ?はWhere? 
 って思って調べてるけど記述が一致する説明を見つけられていない 
273: デフォルトの名無しさん [sage] 2023/05/06(土) 22:02:29.33 ID:gRoxw4m5(3/3) AAS
 唸ってる間に>>270-271が増えてた 
 ありがとう 
 調べたり確認してみる 
274: デフォルトの名無しさん [sage] 2023/05/07(日) 01:38:48.15 ID:OzRuG3KU(1) AAS
 > measure結果のMaximumの値を取得してるってこと? 
 そう。「集計プロパティ」とか「計算プロパティ」とかっていう構文。 
 learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about_calculated_properties?view=powershell-5.1#select-object 
  
 > %はForEach? 
 > ?はWhere? 
 そう。 
 ForEach-Object {} = % {} = foreach {} ≠ foreach () {} 
 Where-Object {} = ? {} = where {} ≠ where () {} 
  
 こうも書ける。 
 powershell -c "(gc 〜.txt -Raw | ConvertFrom-Json) | group characterID | foreach {$_.Group | sort Level | select -Last 1} | ConvertTo-Json" 
275(1): デフォルトの名無しさん [] 2023/05/09(火) 02:15:55.11 ID:ZvIGeNCt(1/2) AAS
 変数の値に含まれる全角のダブルクォーテーションを 
 半角のダブルクォーテーションに置換するにはどうすればいいですか? 
  
 setによる置換では期待通りに動作しませんでした 
  
   set BatFileTag=”test1“ 
   set "%BatFileTag:“="%" 
   set "%BatFileTag:”="%" 
   echo %BatFileTag% 
  
   set BatFileTag=”test2“ 
   set %BatFileTag:“="% 
   set %BatFileTag:”="% 
   echo %BatFileTag% 
276(1): デフォルトの名無しさん [] 2023/05/09(火) 05:44:06.79 ID:uZ4E3DcQ(1/5) AAS
 動くのか確認してないけどBing AIに丸投げしてみたw 
  
 バッチファイルで変数の値に含まれる全角のダブルクォーテーションを半角のダブルクォーテーションに置換するには、以下のような方法があります。 
  
 - 変数を`%%`で囲んで`set`コマンドで置換する場合、`%%`の前に`~`を付けるとダブルクォーテーションが除去されます¹。例えば、 
  
 ```bat 
 set BatFileTag=”test1“ 
 set BatFileTag=%~BatFileTag% 
 echo %BatFileTag% 
 ``` 
  
 - 変数を`!`で囲んで遅延展開を有効にすると、全角のダブルクォーテーションも置換できます²。例えば、 
  
 ```bat 
 setlocal enabledelayedexpansion 
 set BatFileTag=”test2“ 
 set BatFileTag=!BatFileTag:“="! 
 set BatFileTag=!BatFileTag:”="! 
 echo !BatFileTag! 
 endlocal 
 ``` 
  
 - ダブルクォーテーションを含む変数を別のコマンドに渡す場合は、ダブルクォーテーションをエスケープする必要があります³。例えば、 
  
 ```bat 
 set BatFileTag=”test3“ 
 echo ^"%BatFileTag%^" 
 ``` 
277: デフォルトの名無しさん [] 2023/05/09(火) 05:44:21.88 ID:uZ4E3DcQ(2/5) AAS
 続き 
  
 これらの方法はどれも期待通りに動作しますか?😊 
  
 ソース: Bing との会話 2023/5/9 
 (1) バッチで変数にダブルクオーテーションを格納したい. 外部リンク:teratail.com 
 (2) バッチファイルで変数を複数行にわけて指定したときのダブル .... 外部リンク:ja.stackoverflow.com 
 (3) バッチファイルのダブルクォート地獄を回避する方法 - Qiita. 外部リンク:qiita.com 
278: デフォルトの名無しさん [] 2023/05/09(火) 05:55:08.97 ID:uZ4E3DcQ(3/5) AAS
 いいえ。まだ問題があります。 
 サンプルのどこにも全角のダブルクォーテーションがでてきません 
  
 すみません、サンプルの全角のダブルクォーテーションは見えにくいかもしれませんが、実際にはあります。 
 コピーしてテキストエディタに貼り付けてみてください。 
 半角のダブルクォーテーションと比べると、全角のダブルクォーテーションは少し太くて長いです。😊 
  
 だそうだ 
 スマホだとわからんわ 
279: デフォルトの名無しさん [] 2023/05/09(火) 05:56:33.76 ID:uZ4E3DcQ(4/5) AAS
 バッチの中身もオレはちゃんと読んでないんでBingが意図を正しく理解したかも確認してない 
280: デフォルトの名無しさん [] 2023/05/09(火) 05:59:48.56 ID:uZ4E3DcQ(5/5) AAS
 リンクのコピペに失敗したやつはこれ 
  
 外部リンク:teratail.com 
  
 外部リンク:qiita.com 
281: デフォルトの名無しさん [sage] 2023/05/09(火) 08:56:45.57 ID:bGbmh2Wb(1) AAS
 そんな難問なのか? 
 set BatFileTag=“test1” 
 set BatFileTag 
 set BatFileTag=%BatFileTag:“="% 
 set BatFileTag=%BatFileTag:”="% 
 set BatFileTag 
282: デフォルトの名無しさん [sage] 2023/05/09(火) 09:15:19.23 ID:TEEc9Eeb(1) AAS
 >>275 
 変換結果を変数に格納してないだけじゃん 
 set BatFileTag=”test1“ 
 set "BatFileTag=%BatFileTag:“="%" 
 set "BatFileTag=%BatFileTag:”="%" 
 echo %BatFileTag% 
  
 set BatFileTag=”test2“ 
 set BatFileTag=%BatFileTag:“="% 
 set BatFileTag=%BatFileTag:”="% 
 echo %BatFileTag% 
283: デフォルトの名無しさん [] 2023/05/09(火) 12:45:29.09 ID:ZvIGeNCt(2/2) AAS
 >変換結果を変数に格納してないだけじゃん 
  
 おっしゃる通りでした、そのコードで期待通り動作しました。 
 ありがとうございました。 
284: デフォルトの名無しさん [sage] 2023/05/09(火) 12:54:13.19 ID:0Hn95uhF(1) AAS
 ケアレスミスやね 
 自分もよくある 
285(1): デフォルトの名無しさん [sage] 2023/05/09(火) 15:10:57.87 ID:cxHUCWoc(1) AAS
 見覚えのある変数名だと思ったらDTV板の人か 
286(1): デフォルトの名無しさん [] 2023/05/10(水) 02:46:49.16 ID:7WScgW4R(1/3) AAS
 >>276 
 変数を`%%`で囲んで`set`コマンドで置換する場合、`%%`の前に`~`を付けるとダブルクォーテーションが除去されます 
  
 え、ホント?と思って やってみたら 
  
 バッチ パラメーターの置き換えで、パス演算子の次の使用法は無効です: 
 %~BatFileTag% 
  
 と出力されたんですが、できないですよね? 
  
 >>285 
 EDCBの 録画タグ の話でした。。 
287: デフォルトの名無しさん [sage] 2023/05/10(水) 03:43:26.68 ID:fIRqc6o3(1) AAS
 >>266266(1): デフォルトの名無しさん [sage] 2023/05/06(土) 17:23:48.16 ID:gRoxw4m5(1/3) AAS
 jqコマンドってどっかにスレないかな 
 cmdでバッチ作って動かしてるんだけど 
 jsonで 
 "characterID": 1,"Level": 50, "Status": {~ 
 "characterID": 1,"Level": 100, "Status": {~ 
 "characterID": 2,"Level": 50, "Status": {~ 
 "characterID": 3,"Level": 50, "Status": {~ 
 "characterID": 3,"Level": 100, "Status": {~ 
 みたいにキャラごとにレベル50と100があったり50しかない場合があったりするんだけど 
 キャラごとに100があったらそれだけなかったら50を拾うみたいな条件で引っこ抜きたいんだけど上手くいかないので何かいい方法ないかなって探してます 
 何かいい方法ないでしょうか  
Ruby なら、 
  
 require 'json' 
  
 # 改行を削除する。削除しなくても同じ結果 
 input_json_str = <<'JSON'.delete( "\n" ) 
 [{"ID": 1,"Level": 50, "Status": {"idx":1}}, 
 {"ID": 1,"Level": 100, "Status": {"idx":2}}, 
 {"ID": 2,"Level": 50, "Status": {"idx":3}}, 
 {"ID": 3,"Level": 50, "Status": {"idx":4}}, 
 {"ID": 3,"Level": 100, "Status": {"idx":5}}] 
 JSON 
  
 input_json_obj = JSON.parse( input_json_str ) 
  
 # ID でグループ化して、最大Level のものを取得する 
 result = input_json_obj.group_by { |hash| hash[ "ID" ] }.map do |row|  
  row[ 1 ].max_by { |hash| hash[ "Level" ] } 
 end 
  
 p result 
  
 出力 
 [ {"ID"=>1 "Level"=>100 "Status"=>{"idx"=>2}},  
 {"ID"=>2 "Level"=>50 "Status"=>{"idx"=>3}},  
 {"ID"=>3 "Level"=>100 "Status"=>{"idx"=>5}} ] 
288(1): デフォルトの名無しさん [sage] 2023/05/10(水) 07:27:54.84 ID:7bNTa4KZ(1) AAS
 >>286 
 エラー表示で 「CALL /?」または「FOR /?」 とあるだろ 
 それ見ると %~ の使い方がわかるよ 
 どちらにせよ全角の引用符は消えない 
  
 AIがまだポンコツだし、その翻訳もおかしいので 
 あまり参考にならない 
289: デフォルトの名無しさん [] 2023/05/10(水) 17:07:25.20 ID:7WScgW4R(2/3) AAS
 >>288 
 ありがとうございます、ヘルプを参照しました。 
  
 %~0 で 周りを囲んだダブルクォーテーションは除去できる、 
  
 %~BatFileTag% は 構文エラー、ですね。 
290: デフォルトの名無しさん [sage] 2023/05/10(水) 19:56:46.59 ID:8YKnH4aX(1) AAS
 for文の%%iみたいな変数に入れても%0とかと同じように操作できるよ。 
 いずれにしても全角ダブルクォーテーションは除去できないけど 
291: デフォルトの名無しさん [] 2023/05/10(水) 23:36:37.50 ID:7WScgW4R(3/3) AAS
 バッチスクリプトの引数参照(?)の展開を 通常の変数でも使いたい時ありますよね。 
 forを使えば、わざわざ関数に渡さなくていいってことですよね。覚えておきます。 
292: デフォルトの名無しさん [sage] 2023/05/14(日) 01:53:53.57 ID:4Al5Gork(1) AAS
 ばっちこーい! 
293: デフォルトの名無しさん [sage] 2023/05/21(日) 15:26:18.55 ID:/zBPnU/J(1/2) AAS
 Sendtoに置いたバッチがある。 
 ここに複数のファイルを送り、それぞれのパスをプログラムに送りたい。 
 送った複数のファイル、はどう表現すればいいのでしょうか。 
 @echo off 
 for %%F in (*.jpg) do call :sub "%%F" 
 goto :EOF 
 :sub 
 echo "C:\hoge.exe" "%~dpnx1" 
 goto :EOF 
  
 sub以下は様子見コード 
294: デフォルトの名無しさん [sage] 2023/05/21(日) 15:31:45.83 ID:WLjUQB8s(1) AAS
 shift /? 
上下前次1-新書関写板覧索設栞歴
あと 549 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.025s