【.cmd】 バッチファイルスクリプト %14 【.bat】

■ このスレッドは過去ログ倉庫に格納されています
2020/08/15(土) 07:00:26.64ID:f3kW5kCx
拡張子が .cmd または .bat のバッチファイルのスクリプティング(プログラミング)に関わる
質問,テクニック(JScript,Perl等の埋め込みなど含む),関連情報のためのスレです

※何でも無理矢理バッチでやろうとせず、WSH等の使用も検討しましょう

過去スレ
%13 http://mevius.2ch.net/test/read.cgi/tech/1542779527/
%12 http://mevius.2ch.net/test/read.cgi/tech/1489207631/
%11 http://echo.2ch.net/test/read.cgi/tech/1424858999/
%10 http://peace.2ch.net/test/read.cgi/tech/1374205515/
%9 http://toro.2ch.net/test/read.cgi/tech/1335015478/
%8 http://toro.2ch.net/test/read.cgi/tech/1315844420/
%7 http://hibari.2ch.net/test/read.cgi/tech/1298873550/
%6 http://hibari.2ch.net/test/read.cgi/tech/1277465356/
%5 http://pc12.2ch.net/test/read.cgi/tech/1242268171/
%4 http://pc12.2ch.net/test/read.cgi/tech/1229955189/
%3 http://pc11.2ch.net/test/read.cgi/tech/1217860043/
%2 http://pc11.2ch.net/test/read.cgi/tech/1197881068/
【.cmd】 バッチファイルスクリプト %1 【.bat】
http://pc11.2ch.net/test/read.cgi/tech/1178281991/
バッチファイルプログラミング 3.bat
http://pc11.2ch.net/test/read.cgi/tech/1148485555/
バッチファイルプログラミング 2.bat
http://pc8.2ch.net/test/read.cgi/tech/1104911889/
バッチファイルプログラミング質問スレ
http://pc5.2ch.net/test/read.cgi/tech/1040614686/
2022/05/06(金) 05:51:24.45ID:QgRBAFzX
Dracura配色にしたら目に優しくオサレになった
https://draculatheme.com/contribute
PowerShellとかWindows Terminalとかのテーマもいろいろある
https://draculatheme.com/
767デフォルトの名無しさん
垢版 |
2022/05/08(日) 05:37:23.76ID:L9rI0dwl
お助けくださいm(vv)m
タスクスケジューラにAdministrators最上位権限の6時間おき無期限タスクを設置しました
エラーなども解決し、やっと定刻に指定したタスクを実行するよう調整出来たのですが、対象となるregファイルの起動≒実行ではなく「次のプログラムを使って開く」的なダイアログ表示になってしまいます

OS上ではダブクリで処理していた内容なので盲点でした
スケジューラでregファイルを使用しレジストリの改変を定期的に行う場合、操作の記述はどのようにすれば宜しいでしょうか?
それか、当該regファイルを実行するためのバッチファイル記述を願いたいです
スケジューラでバッチ実行を指定する方法はネット上にも複数ありました

reg系は散々ググっても検索に出ないのが辛いですね
アドバイスお願いしますm(vv)m
768デフォルトの名無しさん
垢版 |
2022/05/08(日) 06:42:10.44ID:21iaPdPG
>>767
単に regedit %1 すりゃいい話じゃなくて?
769デフォルトの名無しさん
垢版 |
2022/05/08(日) 07:07:27.41ID:L9rI0dwl
レジストリ等は長年平気で触っているくせに、コマンド的な知識・技量ともに不足しており、コピペやポン入れ以外の微調整が出来ませんでした

XPか7時代に作った
----------
@echo off

echo.
echo ==========================================
echo 「高速スタートアップを有効にする」の無効化
echo ==========================================
echo.

rem -----「高速スタートアップを有効にする」の無効化 -----
reg add "HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Session Manager\Power" /v "HiberbootEnabled" /t REG_DWORD /d "0" /f

pause

exit
----------
を発見し、そのままreg用バッチとして該当箇所コピー入れ替え→余裕のタスク発動→regも無事改変されました
元のソースがあるからこその応用ですが、スレをお騒がせして申し訳ありませんm(vv)m
コピペ文化は自業自得ながらも辛いものがありますね
2022/05/10(火) 23:03:26.14ID:gcxSlYEt
フリーランスに立ちはだかる「常駐」の壁。慣例を打ち壊し、
“テレワーク”案件3割→8割へと成長を遂げた「クラウドテック」の軌跡

リモートワーク求人専門サイト「プロリモート」がリニューアルオープン、
業務委託契約の求職者と企業をマッチング

1/3以上が採用につながる高マッチング率、リモートワーク×エンジニア・デザイナー専門の
人材紹介サービス「ReworkerAgent」正式リリース場所からも時間からも自由な働き方を実現!

『ReWorks(リワークス)』リモートワーク特化型転職サイトとして 3月5日 リニューアル

副業・兼業マッチングサービス「クラウドリンクス」登録者数2万人突破
中小企業で進む副業人材の採用、96%が継続採用を希望

茨城県日立市、県外からの「テレワーク移住者」に最大151万円の助成金

長野市、市内に移転・事業所設置し、移住することで最大550万円の支援金を支給

フリーランスが活用できる「最大1,000〜3,000万円・補助率50%〜75%」の
『ものづくり・商業・サービス補助金』とは?概要や条件を解説
771デフォルトの名無しさん
垢版 |
2022/05/19(木) 11:35:25.20ID:aWExf7Ea
C:\Freesoftというフォルダにtest.rarというファイルが置いてあって、
それをwinrarの64bit版で
Z:のルートにフォルダを作らずそのまま解凍させるというようなbatファイルが欲しいのですが
誰か記述例を教えてください。
当方batファイルに関しては無知です
2022/05/19(木) 12:12:20.87ID:aAlRquen
>>771
winrarの64bit版はどこにあるの?
そのパス名がわからないと記述例が書けない
2022/05/19(木) 14:15:05.74ID:Rn3o2leA
Ruby スクリプト内で、7-zip を呼び出す場合、
dest_dir に、a フォルダが作られて、その中に再帰的に階層が作られる。
ここで、aフォルダが作られず直接、tmp フォルダ以下へ展開されるオプションは、7-zipでは探せなかった

zip7_exe = "C:/Program Files/7-Zip/7z.exe"
archive_path = "C:/Users/Owner/Documents/test/a.zip"
dest_dir = "C:/Users/Owner/Documents/tmp"

# Program Files には半角空白があるので、"〜" で囲む。
# x で解凍する。-o で解凍先のフォルダを指定する
puts %x("#{ zip7_exe }" x -o#{ dest_dir } #{ archive_path }) # 解凍

つまり、コマンドプロンプトでは、
"C:/Program Files/7-Zip/7z.exe" x -oC:/Users/Owner/Documents/tmp C:/Users/Owner/Documents/test/a.zip

ここでの注意点は、Program Files には半角空白があるので、"〜" で囲む事と、
-oC:/ の、-oとC:/の間に、空白を入れない事

ここで、C:/Program Files/7-Zip を、Windows のユーザー環境変数パスに追加すれば、
絶対パス無しで、7z コマンドを使えるので、
7z x -oC:/〜 C:/〜 と書ける

もし、xではなく、e オプションを使うと、
dest_dirにアーカイブの階層をフラットにして、すべてのフォルダ・ファイルを展開する!
フォルダ構成を無視して解凍する!

限定的な使い方だが、アーカイブが再帰的なフォルダ構成ではない場合には、
これで、aフォルダが作られず直接、dest_dirフォルダへ展開できる!

RAR は試していないが、a.zipの代わりに、a.rarとすれば、
拡張子から自動判別して、解凍できると思う
774デフォルトの名無しさん
垢版 |
2022/05/20(金) 09:45:16.10ID:lLlVMTfc
>>772
C:\Program Files\WinRARのフォルダの中にWinRAR.exeがありますが
別に7zipででもzipでもrarでもかまわないという感じです。

>>773
ありがとうございます。
すいませんがこちらの勘違いで置き場所を間違ってたので変更させてください。

Yドライブ(外付けハードディスク)のsoftというフォルダにabc.zip(ファイル名は仮の名前)
というファイルがあるとして
「Y:\soft/abc.zip」
このabc.zipをZドライブ(RAMディスク)上にbatファイルダブルクリックで解凍したいです。

解凍の際にそのまま解凍でもフォルダを作ってそこに解凍ででもどちらでもかまわないです。
7zipはさっきインストールしました。

7zipと winrarはともに一時ファイルの作成場所をZのtempフォルダに指定してあります
「Z:\rartmp」←こんな感じ。

この場合のbatファイルはどうなりましょうか?

なぜbatで解凍したいかというと、某フリーソフトなんですが更新が頻繁にあって、更新の通知に対してYESを選ぶと小さいサイズの
ファイルを6000個以上書き込むみたいで、更新するのに20分ぐらいかかります。

それだったら更新の通知が来るたびにキャンセルして公式サイトから最新版のzipファイルを入手して
RAMディスク上に解凍したのを起動させたほうが、短い時間ですむんじゃないかという考えです
775773
垢版 |
2022/05/20(金) 12:29:11.62ID:SIlSZC9T
773 に書いてあるけど、
Program Files には半角空白があるので、実行ファイルの絶対パスを、"〜"で囲む

"C:/Program Files/WinRAR/WinRAR.exe" 引数1 引数2

ここで、C:/Program Files/WinRAR を、Windows のユーザー環境変数パスに追加すれば、
絶対パス無しで、WinRAR コマンドを使えるので、
「WinRAR 引数1 引数2」と書ける

ダブルクリックで起動したいのなら、
デスクトップにショートカットでも作れば?

例えば、773 のRuby スクリプトが、
C:/Users/Owner/Documents/Ruby/script.rb にある場合、

ショートカットのリンク先
C:\Windows\System32\cmd.exe /k "ruby C:/Users/Owner/Documents/Ruby/script.rb"

これは、コマンドプロンプト・cmd.exe を起動して、
ruby コマンドで、script.rbを実行する
(注意! 書き込めないので、cmd を英小文字に変換して下さい)

他には、VBScript でも、ダブルクリックで起動できたと思う。
漏れは、bat は知らないから、バッチファイルをダブルクリックで起動できるかどうかは知らない

7-zip のオプションで、一時ファイルの作成場所の指定も、見たような気もする。調べて下さい

ただ、7-zipの7z.exe はコマンド用じゃなく、画面操作用だから、
必ず、解凍先フォルダは空の状態で始めて下さい!
そこにファイルがあると、同じ名前の場合に、上書きしますかとか聞かれて、コマンドが止まる

だから本当は、7-zipのコマンド用実行ファイルを使った方がよいかも
2022/05/20(金) 20:38:33.57ID:8qofalUL
バカの話は必ず長い (宝島社新書) 櫻井 弘
777デフォルトの名無しさん
垢版 |
2022/05/20(金) 20:50:08.11ID:zxJBX/+G
と、バカが申しております。
2022/05/20(金) 23:38:55.76ID:MePC0rUW
バカって言う人は自分がバカなんだよ?
幼稚園児でも知ってるのに
779デフォルトの名無しさん
垢版 |
2022/05/21(土) 06:37:24.42ID:55Td3nWK
と、幼稚園児が申しております。
2022/05/21(土) 06:53:52.00ID:/PQRaHnB
ブログでやれよって感じ
2022/05/22(日) 18:17:57.65ID:RDTYjvSl
rarを解凍する機会なんてそんなないのにbatが欲しい?しかもbatファイルに関しては無知?妙だな…
2022/05/23(月) 07:47:47.45ID:Lvn387tn
forのin部で wmic を使って文字列取得しようとするとdo以後のコマンド類がバグる
for /f "tokens=2 delims==" %%a in ('wmic process where "name=\"hoge.exe\"" get CommandLine /value 2^>nul^|find "CommandLine"') do set RUNEXE=%%a
と最小限に留めたらecho on でプロンプトが削れて表示は少しおかしいものの一応動作はした
でも「バグってるものがたまたま動いてるだけ」の状態が心情的に嫌なので代替手段があれば教えて欲しい
やりたい事は特定のexeが実行中か否か
D:\app\a\hoge.exe が実行中かどうかを調べたいとして
D:\app\b\hoge.exe のような別ディレクトリにある同名のexeは実行中でもOK
tasklistだとhoge.exeが稼働してるかどうかは調べられるけどどのディレクトリのモノまでかは特定不能のよう
2022/05/23(月) 07:58:02.47ID:Lvn387tn
forで取らずにリダイレクトして一旦TMPファイルに書き出せば良いんだろうけどなんか負けた気がするのでそれは最終手段
784デフォルトの名無しさん
垢版 |
2022/05/23(月) 09:22:19.13ID:vgqZRn8w
パイプを犯人扱いしてfor内でifしちゃうのもありかな?

あと細かいけど"set RUNEXE=%%~a"としないとスペースとかで死ぬ
2022/05/23(月) 09:32:45.04ID:Lvn387tn
>>784
パスにスペースを含む場合、%%~aが利かない
頭の"だけ除かれてケツの"だけが残る罠
あとパイプ無くてもバグる
2022/05/23(月) 12:58:34.94ID:Lvn387tn
自己解決
> %%~aが利かない
はケツにスペース入ってたから
バグるのは文字コード上の問題のよう
http://scripting.cocolog-nifty.com/blog/2009/09/wmic-6efe.html
パイプだと改行コードがおかしくなるだけらしいけどその後のコマンド類がおかしくなるのは不明
URL先の説明にあるように直接ファイルへリダイレクトしてtypeで読めばバグらないようになった
wmic process where "name='hoge.exe'" get CommandLine 2>nul >$tmp.txt
for /f "delims=" %%a in ('type $tmp.txt^|find ":"') do for %%b in (%%a) do set "s=%%~b"
2022/05/23(月) 14:54:07.32ID:3pQwOKKR
set RUNEXE="%%~a"
じゃろが
788デフォルトの名無しさん
垢版 |
2022/05/23(月) 17:31:28.72ID:JTigk3sw
コマンドプロンプトはとても残念なので
set RUNEXE="%%~a"
echo RUNEXE: "%RUNEXE%"
とすると(%a=「t e s t」だった場合)RUNEXE: ""t e s t""と表示されるのだよ...
2022/05/23(月) 17:44:09.74ID:3pQwOKKR
すまんな
>>787>>784に対するレス
>>786は問題ない
ケツにスペースあってもいいようにしたんだろ
2022/05/23(月) 17:52:18.15ID:9Kev8wRG
>>782
wmicというのがあるんだ、知らなかった
wmic /?
とすると赤字で非推奨ですと出た
2022/05/23(月) 20:13:36.87ID:kx8uWZPf
非推奨烙印はcmdを滅ぼそうとしているMS内の一派の仕業だから気にするな
vbsやpowershellのようにcomの使える言語であれば同じことできるから要らんといえば要らんのだがな
2022/05/23(月) 22:36:34.02ID:vE3vs/4c
自分の周りではあまり知られてないようなのだけど、
setは代入文全体を"〜"で括るとうまくいく場合が多い。(確実ではない)

cmd /v:on
set "aaa=(bbb|ccc)<ddd"
echo aaa=[!aaa!]

aaa=[(bbb|ccc)<ddd]

引数でパスを受け取るバッチファイルでよく使う。
「〜」と「"〜"」のどちらの形式で指定されても同じ値を得られる。
@echo off
setlocal EnableDelayedExpansion
set "FilePath=%~1"
echo FilePath=[!FilePath!]
exit /b
2022/05/24(火) 15:42:40.62ID:DHD4MJfY
好みだろうけど
常に値はリテラルな""に埋め込まれたものと考えることにした
なんらかの一貫性を貫くのが精神衛生上よい
2022/05/24(火) 16:01:20.85ID:EZq8VYJv
不自由でも一貫性を好む者って多くの事に対応出来ない低脳だと言ってるようなもの
最適を選ばずワンパターンな手法に頼り用いたがる思考停止した老害へと一直線
2022/05/24(火) 16:09:51.54ID:DHD4MJfY
むしろワンパな%~の剥ぎ取りを信頼してるのが気になったんだが
ダメ文字入っててもサブストリング置換で最後と最初の文字削ったり頭を柔らかく持とう
2022/05/24(火) 16:12:20.60ID:fGpRFhuy
文字列の置換抜き出しを考えてるなら常に""の中の状態にするのは正解だと思う
2022/05/24(火) 16:32:08.01ID:wIwv7WB3
バッチには(残念ながら)絶対はないから、すぐに展開せず要時まで自由度を残す習慣は大事だと思う
798デフォルトの名無しさん
垢版 |
2022/05/24(火) 19:24:26.65ID:ZQNStJn7
ダブルクォートをまともに削除できるのが%~しかないのが全部悪い

環境変数にスペースが入っている「かもしれない」状態になるとまともにダブルクォートを外す手段がないんだよね。
set File1=X:\a a.txtとset File2="X:\a a.txt"から同じ状態に持ってこれるコードは簡潔に書く方法がないから諦めた。
sub.bat %File1% %File2% // File1が分裂して死ぬ
sub.bat "%File1%" "%File2%" // File2のダブルクォートが二重になって死ぬ

結局%~1ではがすのが1番まともに書けると思う
2022/05/25(水) 03:42:10.08ID:Mc6K3UpU
>>798
set "File2=X:\a a.txt"
だと何かハマるパターンがあるの?
普段こうするようにしてるから、後学のために知っておきたい
800デフォルトの名無しさん
垢版 |
2022/05/25(水) 09:12:08.26ID:nfFPZ/Hm
>>799
set "File2=X:\a a.txt" と
set File2="X:\a a.txt" で結果が違う
俺もファルパスなら上の書き方しか使わん
2022/05/25(水) 20:31:54.51ID:CvuRtmLM
C:\Program Files (x86)
結構昔からあるこのフォルダの配下に置かれたファイルをまともに扱えるバッチはどれだけあるだろうか…
2022/05/26(木) 00:47:09.31ID:/szrY+JV
>>800
いや、だからその結果が違うのを踏まえた上で、何か罠があったりするのか、という話
回避策があるのにわざわざ問題のある2例しか上げてないから、
何かしらの罠があるから例に出さずにいたのかな、と
2022/05/26(木) 13:33:44.93ID:eXnOjPn/
その書き方知らんかっただけでしょ
2022/05/26(木) 15:42:12.26ID:0e7T6NOT
半角スペースや&の付いたファイルなんか知った事かと言い切れるなら幸せなんだがな
2022/05/26(木) 15:55:49.96ID:J8y6hNBw
>>801
そこだけの問題なら、そのフォルダにシンボリックを張って別の入り口を作り、そこから出入りする
2022/05/26(木) 15:56:19.27ID:J8y6hNBw
シンボリックリンクね
807デフォルトの名無しさん
垢版 |
2022/05/27(金) 15:37:55.51ID:DoIFvz+R
>>802
環境変数にダブルクォートが入るかそうじゃないかだけの問題なのでそこだけの違いにした
こっちの書き方の方が好みか?
set "File3=X:\a a.txt"
set "File4="X:\a a.txt""
File4の書き方は受け入れられんだろうからこの書き方はやめた
2022/05/27(金) 21:59:22.03ID:cruiCFAs
>>807
さすがにそのFile4の書き方はないでしょ。好みの問題じゃない。
「&」とか含めないのでは?
2022/05/28(土) 00:40:39.75ID:eWdSCVXj
>>807
からかわれてるのか、はぐらかされてるのか判断つきかねる
最初の疑問には全く回答得られてないし

とりあえず半年ROMっときますわ
810デフォルトの名無しさん
垢版 |
2022/05/28(土) 01:15:25.17ID:N6SgNzpI
set File1=X:\a & b.txt
set File2="X:\a & b.txt"
set "File3=X:\a & b.txt"
set "File4="X:\a & b.txt""
File4駄目だったわ。File1もファイル名が切れるが

最初の疑問(>>799 >何かハマるパターンあるの?)なら、
俺がFile3のパターンでハマったことはない
2022/05/28(土) 01:53:02.54ID:sY9CTUi4
>>807
4はどういう状況で使うのか気になる。危険しか感じない
わざと反転させたい場合?

>>810
値に「"&"」など、"エスケープしてる状態で含んでいる場合、反転する
set S=abc"&"def
set "STR_A=hoge%S%fuga"

結局、「何でも許容出来るように」に対応するのはコストが高過ぎるので、想定され得るものに限定しそれに合わせて書くのが現実的
値にしろ運用にしろ何らかの制限付きという条件の下で割り切って使うならバッチは楽
全てのエラー判定とかやり出すと膨れ上がるしキリ無い
何を制限とするかの見極めと切り捨てが大切
2022/05/28(土) 02:02:37.06ID:4gWpv+XJ
BATでは取返しのつかない結果にならない限りエラーで止まる、期待した結果にならなかった
のは別にいいかなって思ってる
2022/05/28(土) 02:59:44.49ID:j34iIhvZ
エスケープ周りをしくじれば大抵は取り返しが付かないけどな
バッチでエスケープ処理が発生するようなら他のスクリプトを検討した方がいいね
814デフォルトの名無しさん
垢版 |
2022/05/28(土) 04:29:23.28ID:Ee8LXfQh
タスクスケジューラじゃregを起動できないから、間にbatファイルを挟み、その中でregを指定させたんよね
無事スケジューラの動作が確認できたものの、今度はPC操作中にcmdの起動が挟まってゲームその他の操作を阻害する
瞬間的なcmdウィンドウのポップアップを防ぐ手段はないものだろうか・・・

フリーソフト等にならタスクバー内で完結するプログラム動作も珍しくない、それを通常のcmd起動にも実現させたい^^;
2022/05/28(土) 05:13:46.22ID:sY9CTUi4
>>814
ttps://okwave.jp/qa/q852803.html
あとVBから出来たとか昔は出来たけど出来なくなったとか何処かで見た気がす
816デフォルトの名無しさん
垢版 |
2022/05/28(土) 05:50:05.93ID:Ee8LXfQh
>>814
え・・・ショートカットリンクにすると、bat発動時のウィンドウポップアップは消えるんですか?
発動、実行、処理に問題はありません
指定時刻で瞬間表示されたcmdウィンドウの影響で生じる、PCデスクトップ上の強制画面切り替えが問題なんです・・・
2022/05/28(土) 19:57:51.48ID:vVz/heur
>>816
「え・・・」とか言う前にリンク先ちゃんと読んだ?
リンク先に「最小ウィンドウ(バックグラウンド)」で実行できる事は書いてある。
ゲームが影響受けないようになるかは知らない。

タスクスケジューラでの実行でウインドウ出したくないなら
簡単なのはSYSTEMアカウントで実行するように変更すること。
HKCU使ってんなら変更が必要。
818デフォルトの名無しさん
垢版 |
2022/05/28(土) 20:45:56.96ID:Ee8LXfQh
>>817
的確な指摘をありがとうございます!
SYSTEMアカウントは最初の試行錯誤で試したものの、最上位命令でさえスケジューラの表示で[実行中]となるわりにbatの起動が見られず、その経緯を経てAdministratorsへ変更していました

batのショートカットを作成し、プログラム操作項目に.lnkを足し、さらにアカウントをシステムへ揺り戻すと、確かにcmdウィンドウの起ち上がり消失を確認できました
問題はタスクの表示が[実行されました]ではなく[現在タスクを実行中です]なところ
これが実際にbatを起動してくれているのか怪しいです・・・
もう少し経過観察してみます
2022/05/28(土) 20:49:45.87ID:4gWpv+XJ
systemアカウントでの実行だから
逆に現在ログインしてるユーザーの画面に何か表示するようなことは出来ない
batで何か表示しようとしても無理だから起動の確認は後に残るようなファイル出力等で確認
2022/05/28(土) 20:51:48.94ID:4gWpv+XJ
これはbatに限らないのでメモ帳とか何かのソフトを起動させても画面には現れない
2022/05/28(土) 21:07:54.58ID:Ee8LXfQh
仕組みの解説ありがとうございます
batの起動によりregファイルを実行することが目的ですので、SYSTEMアカウントのそのような仕様は有難いですね
だから各サイトで迷ったらSYSTEMで!と記されているのでしょうか(私も最初はそれに倣って試していました)

5ch掲示板の多くが「余所でやってください」となるので、ついでで恐縮ですが、こちらにコピー↓↓させてくださいm(vv)m
現状ではSYSTEMアカウントのbat強制発動力に疑問を抱くものの、可能なら私もSYSTEMでタスクを構築させたいです
経過観察後はAdministrators最上位でショートカットを指定起動させた場合のデスクトップ周りを検証するつもりです(bat不発かcmd出現になりそう)
------------------
タスクスケジューラでAdministrators+最上位にすると「正しく終了」+準備完了になります
しかしそれをSYSTEM+最上位にした場合、「現在タスクを実行中です」+実行中と変化します

このSYSTEMアカウント処理の際に設定項目の「新しいインスタンスを並列で実行」はどうなるのでしょうか?
実行中を上書き(もう一度プログラム起動)し続けるのであれば嬉しいのですが、並列という語句で「内部に延々と加算し続けるのか?」と不安に思いました
2022/05/28(土) 21:31:44.96ID:4gWpv+XJ
>>821
SYSTEMで実行しても実行完了してたら状態は「準備完了」に変わるよ
実行中ならまだそのbatは起動したままで終了してない
もし終了してないのが予期してない動作なら何か途中で止まってるので
複数起動を許可したのならbatのインスタンスが増殖することになる
2022/05/28(土) 21:38:44.30ID:4gWpv+XJ
想像するに
batが何かの応答を要求しててユーザーのアクション待ちなんじゃないかな
当然キー入力なんかはSYSTEMからは無理なので
タスクマネージャーから強制終了されることぐらいしかできない
上で言ってるようにカレントユーザーじゃないのでHKCUなんて存在しないんだがその点は大丈夫か
2022/05/28(土) 21:47:41.17ID:j34iIhvZ
SYSTEMタスクからHKCUをってことは、まず現在ログイン中のユーザーを特定してそいつのユーザープロファイルのNTUSER.DATを弄ることになるわけだよ
このスレの範疇だと無理っぽいけどがんばってね
2022/05/28(土) 21:55:22.65ID:4gWpv+XJ
実行したいユーザーは今の自分なんだからそこは固定にしとけばbatにできるだろ
他ユーザーのレジストリ操作はググれば出てくるよ
2022/05/28(土) 21:57:50.03ID:4gWpv+XJ
まあ色々言ったけど
画面表示をさけるだけなら、俺ならWSHかPowerShellを使うな
2022/05/28(土) 22:01:28.84ID:o4a1B59x
regファイルを実行ってレジストリ登録?それならbat使わなくても
最上位の特権で実行する
プログラム: C:\Windows\regedit.exe
引数: /s regファイルフルパス名
でよくない?
2022/05/28(土) 23:50:47.54ID:Ee8LXfQh
皆さんありがとうございます
やはり表示が「正常に」→準備完了ではない以上、タスクは途中状態でしたか・・・この分では肝心のbatも実行されそうにありませんね

最初のSYSTEMによるタスクの場合、管理者権限での実行に不備があるようで、それでタスクは発動するもののbat動かずという結果になると判断していました
それでAdministratorsへ変更し、命令そのものが管理者によるものへ置き換え、これまでの経緯に至っています

>>827
く、詳しくお願いします・・・自分でも相当な時間をネット検索に費やしましたが実現できませんでした
特に1文字でも損なうと完成されない、引数関連が上手くいかなくて
昔ながらのbatなら自分にもギリ可能でしたので今に至ります
regなら管理者権限も関係なく値を変更してくれるので、それさえ可能なら一番楽なんですよね
2022/05/28(土) 23:51:00.59ID:Ee8LXfQh
ことの発端は配信の最適化であるDelivery Optimizationのサービス無効化です
そのサービスの0004化が、batの場合管理者権限必須らしく、batを通常起動しただけではスルーされてしまう
reg単体で行えず(自分は)、管理者権限必須で、それらを自動タスク化した場合が大変でした

該当サービスは100%テレメトリながら、散々な細かい検証をしたもののWU関連を全て止めなければ勝手に手動(トリガー)状態へ強制されます
そしてサービスが手動状態にあるとき、ディスクのクリーンアップ他を少しでも伴うとそこで実行されてしまう
ならばどうせカタログで更新しているし?とWU関連全て無効化したのですが、そうすると今度はエクスプローラーが常時CPU使用率5-10%くらいになり微ラグ
appxのwsappxがC:\ProgramData\Microsoft\Windows\AppRepositoryで無限増殖する現象と似ていますね、こちらも8-10%とゾンビし、WU全無効化のエクスプローラーより酷いラグを発生させる

OSと密接に絡んでいるのは痛感していますが、WUを生かしつつ、元から無効化しているストアに加えて電卓等も捨ててappxサービスを完全無効化(こちらは手動ゾンビなし)
あとは如何にしてエクスプローラーのバグを招かずにDelivery Optimizationの恒久的な完全無効化を成せるか、なんです・・・
830デフォルトの名無しさん
垢版 |
2022/05/29(日) 00:21:06.26ID:XW+WDPtU
>>811
File4は環境変数の末尾にスペースが入らない&&環境変数をダブルクォートでくくる目的
setに与えるコマンドラインとしては正当だが、&とかエスケープが必要な文字が入ると構文解析で事故るのでFile1と同じくやらんほうがいい書き方だったわ
2022/05/29(日) 00:28:55.06ID:NHtpNvxH
>>829
そもそもなんだけど、レジストリを書き替えただけでうまくいくのは確かめてるの?
通常レジストリの書き換えを反映するには、HKCUの場合ログオンが、HKLMの場合再起動が必要なはずだけど
あとユーザーにadmin資格を追加するのは出来ないの
資格があれば最上位の特権にチェックでいけると思うけど
2022/05/29(日) 00:44:54.89ID:Dh5s7alL
>>831
長年自分好みのregを作成し続け、発動そのものはパンピーチンパン頭なわりに経験則の積み重ねで上手くいっています
再起動の観点は盲点でした、その辺りも毎回あやふやでしたので再確認しないとですね
regのみでサービスが[無効]へ書き換えられるのを何度か目にしている気もしますが

reg
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\DoSvc]
"Start"=dword:00000004

bat
sc stop DoSvc
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\DoSvc" /v "Start" /t REG_DWORD /d "4" /f

SYSTEM最上位+C:\Windows\regedit.exe /s D:\aaa\bbb\ccc.regで新規タスクを設けたところ、正しく終了し、感触が良さげ
cmdのようなポップアップもありません、この環境で経過観察したいと思います

ただ、今気づきましたが、regは実行中のサービスを止める内容が抜けているので、その線も追加で調べ直します
reg書き込みで駄目ならsc stop特化のSYSTEM最上位batタスクを別途用意する必要がありそうですね
偶然にも、今までの調整が無駄になっていない様子で嬉しいです
2022/05/29(日) 01:40:32.51ID:MBI5r2Hn
対象がHKLMならSYSTEMタスクで普通にバッチ呼び出せばいいんじゃないの
っていうかレジストリいじらんでも「sc config DoSvc start= disabled」でいいんじゃないか
2022/05/29(日) 03:14:11.71ID:YV7/1RzI
文章に顕れている
835デフォルトの名無しさん
垢版 |
2022/05/29(日) 07:42:31.92ID:Dh5s7alL
幾つかあるOS連動のサービスは、それぞれで通常と異なる処置が求められるんですよ・・・
Delivery Optimizationもそのひとつ
今のwin10版はギリ対応可能ながらも、win11の現行はバイパスが削除されたり、これまたさらに面倒な様子で将来が不安

最初に書きましたが、SYSTEM最上位の単純な指定ではタスク上で「正常に」となってもサービス側が受け付けなかったんです
ネット情報だとSYSTEMアカウントに管理者権限が内包されているそうなんですけどね・・・
そこで試行錯誤の上、Administratorsで茶を濁していた→またSYSTEMタスクでやったらいいんじゃね?というのは堂々巡りになってしまいますわー

貴重な意見有難うございました
836773
垢版 |
2022/06/01(水) 01:09:04.33ID:ixkk/oFB
>>775
の続き

7-zip の一時・作業フォルダの指定

Command Line Switches
https://sevenzip.osdn.jp/chm/cmdline/switches/index.htm

-w Set Working directory

例には、-wc:\temp と書いてあるので、-wZ:/rartmp と書けばよい。
注意点として、-wz:/ の、-wとz:/の間に、空白を入れない事

-wだけを指定して、パスを指定しなかった場合、Windows の一時ディレクトリを使用する。
-wを指定しない場合、解凍元のフォルダを使うみたい
837デフォルトの名無しさん
垢版 |
2022/06/01(水) 06:20:00.46ID:L0Bj7AY3
ウヒ、プヒヒ・・・
reg手段は結局タスク発動のみが空振りするだけで、肝心のプログラムをサービス変更まで繋げることが出来ませんでしたわorz
引数云々の方法や自分が採った記述の成否・不備は定かではありませんが、まあ、涙目
引数の書き方など、ネット上にさえ適切な情報がなくこれは厳しいですな
カリキュラムや資格を取る過程などで自然と学ぶような内容なんですかね・・・そもそもタスクスケジューラへの強い関心が一般的な日本人の中に存在しないらしいです→グーグルロボット検索が拾えるサイトも無い

その涙目でまた振り出しに戻り、システム最上位のbat単純起動からやり直すと、なんと達成(・д・)
システムアカウントに含まれるバックグラウンド動作、最上位に含まれる優先度、そして内包されているらしい管理者権限
regについてもデスクトップから普通にクリックすると再起動無しで値を4へ変更可能でしたので、やはりスケジューラ登録の過程またはサービス仕様に問題があったようですね

何をもって今回、システム最上位が上手く機能したか不思議でなりませんが、そしてこれが今後もしっかり継続的に発動・反映してくれるか分かりませんが、
当面はAdministratorsで生じていた「cmdポップアップによるデスクトップ阻害」を得ることなくタスクが実行でき、サービスの値もきっちり変わり、嬉しく思います
ポップアップさえ無ければ1/1hでスケジューリングし、より高頻度にサービスを強制無効化可能ですので、快適

関連する中で色々と指導して下さった皆さん有難うございましたm(vv)m
2022/06/01(水) 06:50:47.32ID:2JSbHFne
レジストリ書き込み禁止にすりゃイイんじゃねーの?
知らんけど
2022/06/01(水) 09:39:14.46ID:HV/k13ls
質問
PIDが正しいとして taskkill /f /pid "%PID%" が失敗するケースって何かありますか?
現在以下のように書いてるのですが無駄だったらバカ臭いなと
taskkill /f /pid "%PID%" || (
echo エラーメッセージ
echo エラーメッセージ
echo エラーメッセージ
echo hoge.exe を終了汁!
pause
exit /b 1
)
840デフォルトの名無しさん
垢版 |
2022/06/01(水) 10:15:17.37ID:iPR+cHIm
https://docs.microsoft.com/ja-jp/windows/win32/api/processthreadsapi/nf-processthreadsapi-terminateprocess
悲しいことに公式のドキュメントには何も書いてない

指定したPIDのプロセスが存在しない
(PIDを取得した後に正常終了したとかで起こりうる)
プロセスを殺す権限がない

ぐらいのはず
2022/06/01(水) 11:32:04.25ID:HV/k13ls
>>840
ありがとう
一応エラー判定残しといた方が良さそうですね
2022/06/01(水) 21:11:06.31ID:wWdJLXtL
プロセスは非同期だからエラーよりはkillした後の存在の有無を判定した方がいい
2022/06/02(木) 15:41:59.23ID:Bch8jX4P
>>839
プロセス側にも事情があり間に合わないなどでできないことは多い
live2chはkill、確認を数回繰り返してやっといなくなる
2022/06/03(金) 03:02:05.90ID:LtGyf47s
ちっきしょーうのAAを貼りたい気分

結局、Delivery Optimizationサービスの0004化はSYSTEM最上位アカウントだとすかしっぺになる
案の定ふりだしやんけwww
なら操作の引数で管理者権限を付与出来ないかと模索するも、ネット情報じゃ無さげ
cmd他、どれもコンテキストメニューなど、OSのUIから指定起動させる例ばかりでコマンド的なものがない
在るとしてもネット上で指南されるような内容ではないらしい

タスク上は「正しく終了しました」が初回のみ出て、それ以降は常に[次回の実行時刻]を更新するのみ=つまり発動さえしていない
該当するプログラム=batを自分でデスクトップから起動→cmd発動でもサービスが変わらず
同条件で右クリ→管理者権限で実行すると余裕の発動・・・

だからそれをタスクのバックグラウンドでやりたいんだよおおおおおおおおおおorz
SYSTEMアカウントはバックグラウンドで動作してくれるけど管理者権限をすかしっぺ、Administratorsアカウントは余裕で発動するけどバックグラウンドじゃない
どうしろっつーねん!SYSTEMアカウントが管理者内包ってのは都市伝説なのかああああ

天才様助けてー!
2022/06/03(金) 03:30:52.82ID:X5NsBG94
日記は日記帳へどうぞ

余計な修飾子や個人的感想が多く、読ませる気の無い文章
「わざわざ読んで頂き申し訳ございません」という謙虚さが皆無
長々とおまえの頭悪そうな臭い愚痴駄文を読んでやるほど暇じゃない
質問や説明は具体的、且つ、必要最小限、シンプルに
何なら箇条書きでも良いくらい
言葉は齟齬が生じないよう正確に
「発動」って何やねん
DQN特有の独自定義
まず正しい日本語と用語を学び直せ
2022/06/03(金) 03:34:09.46ID:X5NsBG94
> ネット情報じゃ無さげ
無かったら英語でググれ
いくらでも出て来る
2022/06/03(金) 03:52:08.48ID:oul3t3W9
他ユーザーのレジストリも弄れるってあっただろ
2022/06/03(金) 05:56:36.90ID:LtGyf47s
>>846
いつも英字でも検索しているんですけど、OS関連は意外に多く抽出されるものの、何故かタスクスケジューラに関してのみ微妙なんですよね・・・
検索ワードがシビアなのか、昨今不評なグーグル検索ロボットの偏向かもしれません
とはいえ2019年10月からガチテレメトリとなったyahooを利用する気にもなれませんし・・・
それだけ世間的な意味でタスクに関心がないのだと思いますorz

百歩譲って、system最上位アカウントに管理者権限を強制付与出来ればいいんですが
引数もタスクのようなbatに対したコマンドではなく(そもそもタスクの引数に関する指南が超少ない)、batの中で特定のプログラムを管理者権限で実行する方法ばかり見つかって意味無し

自分がデスクトップ上の右クリでbatを直接管理者権限実行させ、サービスの値が0004の状態はsystem最上位アカウントでも定刻の1時間刻みで「正常に終了」となる
0004を0004に上書きするbat(笑)は管理者権限の壁が無いようだw
この場合は次回の予定のみが更新されることもなく、しっかりと前回の実行結果を残す(1時間刻みで)

それが!WUか何かのOS強制により手動(トリガー)と改変されたとき、system最上位アカウントではフリーズしてしまう様子なんですよねorz
何なんだよ[配信の最適化]ゾンビ・・・ほんまキモいわ・・・
2022/06/03(金) 06:25:04.10ID:25hReR0t
文章力皆無なのに自分ではちゃんと書けてるつもりなんだろうなぁ・・・ほんまキモいわ・・・
2022/06/03(金) 06:33:18.50ID:oU3L37au
相手すんなよ...
851デフォルトの名無しさん
垢版 |
2022/06/03(金) 08:41:36.30ID:r3SSykMX
お前の書いていることが省略しすぎたり独自用語か混ざってたりで読むのに疲れる
書いてることからやりたいことの確認をしなきゃいけないし

> Delivery Optimizationサービスの0004化
特定のサービスの挙動を変えたいor止めたいらしいのがググってようやくわかった
0004が何を示してるか未だにわからん

> なら操作の引数で管理者権限を付与出来ないかと模索するも、ネット情報じゃ無さげ
> cmd他、どれもコンテキストメニューなど、OSのUIから指定起動させる例ばかりでコマンド的なものがない
ここでのお前がやりたいことは管理者特権を付与してコマンドラインを実行したい」でいいんだよな?

> タスク上は「正しく終了しました」が初回のみ出て、それ以降は常に[次回の実行時刻]を更新するのみ=つまり発動さえしていない
イベントビューアーで確認したんか?サービスの動作ログだよな?
852デフォルトの名無しさん
垢版 |
2022/06/03(金) 08:52:40.64ID:rHBirywu
cmdに管理者特権とかいう概念はないのでpowershellを経由するしかない。runasでググれ。
プロセスが管理者特権で動いているかはタスクマネージャーから確認できる(表示列を追加する必要があるが)

サービス関連は触ったことないから知らんが、cmdでいくら探してもないならpowershellから動かすしかないんじゃない?
2022/06/03(金) 10:14:29.24ID:84QuKkvW
そもそもの方法論がもうね
そこまでバカでそこまで必死なんだったらローカルグループポリシー使えよっていう
HomeならPro化すればいいだけなんだから
2022/06/03(金) 10:34:45.22ID:CIdSIcJr
動詞を指定して実行する事は他の言語でもできるけど、
powershell程には簡潔に書けないからね
2022/06/03(金) 10:42:06.97ID:CIdSIcJr
ちな0004はREG_DWORDの値4で場所的にそのサービスの無効を意味してる
こういうの知らないなら何のこっちゃだろうな
2022/06/03(金) 10:52:22.42ID:CIdSIcJr
一見高度な事の様で大した中身でもなく、文体が気持ち悪いから知ってる人がいてもスルーされる。
案の定相手にしてるのはルビキチだけ
857デフォルトの名無しさん
垢版 |
2022/06/03(金) 14:11:38.16ID:LtGyf47s
くっそワロた・・・
0004さえも理解に乏しい、知識量や発想力の人達へ向けて私は質問していたのだろうか^^;
runasなどもとっくに調べているし、グルポは超初期に実行済みで、Delivery Optimizationは突破してくるから今日に至っている話なわけで

こういうのも過去に書いているんですけど、虫食いで読んで適当に回答している方や、そもそもの知識量・発想・知能的な面で素人の私より劣っていそうな人が
いえ、これ以上は暴言になりそうですし省略しますわ
・・・バッチ専用スレとのことで、私も皆さんへ過大評価や虚像を抱いていたのかもしれません

powershell、完全に時代錯誤な私の知識・技量では厳しかったものの、これを機に学んでみましょうかね
batの代わりにps1か・・・自分に使いこなせるか不安ですorz
皆さん数々の意見を有難うございました
2022/06/03(金) 14:54:57.72ID:oCwyAce/
ごめんあんまり読んでないんだけど、対話が求められて自動化できない?のならdoskeyのマクロは試した?
GUIでのダイアログだったら無理だけど
2022/06/03(金) 16:20:46.55ID:gMGR7N6s
そもそも対象のサービスが無効にできない (ようにみえる) 類のものなのではないか?
2022/06/04(土) 00:01:31.51ID:qz14Jeu3
AWS の本にも、Windows サーバーの記述は、1% ぐらいしかない。
システムで、Windowsを使う香具師がいない

ファイル共有・Active Directory・タスクスケジューラ・Remote Desktop、
バッチ・コマンドプロンプト・PowerShell ぐらいが、簡単に紹介されているだけ

ほとんどがDocker を使う。DockerはLinuxの技術。
だから、Windows 10のWSL2 で、Linuxを使えるようにしている
2022/06/04(土) 03:03:41.49ID:nWFOJiT2
ソフト板のVLCスレで暴れてたガイジに似てるな
2022/06/04(土) 03:16:47.38ID:4DyQyO7v
SYSTEMアカウントで書き替えたら再起動が必要なんじゃないの?
2022/06/04(土) 14:29:54.55ID:bgz5gZEc
サービスの無効化なんか sc config でできるだろ
なんでわざわざレジストリを直接編集しなきゃいけないんだ?しかもSYSTEMで

https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/sc-config

そもそもDelivery Optimizationを無効化したい理由は何なんだ
2022/06/04(土) 15:01:48.75ID:M0jEQKIa
ID:LtGyf47s みたいに要点を簡潔にまとめられず矢鱈とグダグダ書いちゃう人って何かそういう頭の障害でもあるの?
言葉遣いも変だし外国人なのかな
2022/06/05(日) 07:44:59.76ID:7J0TRviH
簡単なことを難しく言うやつを世間一般ではhorse and deerという
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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