22/01/02 20:13:43.31 Wx5RR6tp.net
とりあえず何も追加する必要ないので PowerShell がお手軽
例えばクリップボードの内容を tmp.txt に出すならバッチファイルやコマンドプロンプトで
>powershell -NoProfile -ExecutionPolicy Unrestricted -Command Get-Clipboard > tmp.txt
先に
>chcp 65001
しておくと UTF8 での出力もいけるっぽい
620:デフォルトの名無しさん
22/01/03 02:27:56.29 /1+Dp4vp.net
for /f "delims=" %%a in ('powershell -c "get-clipboard"') do hoge.bat "%%~a"
621:デフォルトの名無しさん
22/01/03 07:54:20.63 yGzP40SI.net
>>611-612
powershellの1行呼び出しに-c or -Commandって必要ある?
いつもpowershell -nop "コマンド"てやってるわ
622:デフォルトの名無しさん
22/01/03 09:26:29.55 BdaWP45p.net
漏れは下のような、Ruby スクリプト内で、powershell コマンドを呼んで、
クリップボード内の文字列を処理している
# クリップボード内の複数行文字列の、各行の先頭・末尾から、
# 連続する空白類を除去して、クリップボードに入れる
str = `powershell Get-Clipboard`
str.encode! Encoding::UTF_8, Encoding::CP932 # UTF_8 へ変換
ary = str.each_line.map( &:strip ) # 連続する空白類を除去する
IO.popen( 'clip', 'w:cp932' ) do | clip | # CP932 へ戻す
clip.print( ary.join "\n" )
end
623:デフォルトの名無しさん
22/01/03 10:45:31.38 CWfpiD5B.net
>>613
この場合なら最低限で書くと
for /f "delims=" %%a in ('powershell get-clipboard') do
で良い
624:デフォルトの名無しさん
22/01/03 13:18:16.70 0LszXjQc.net
環境変数名に一部記号も使えることを発見
#で始まれば一時変数、$で始まればバッチ間共通など、少しわかりやすくできる
625:デフォルトの名無しさん
22/01/04 00:14:37.12 a2P6Hn/H.net
塩野義製薬が週休3日制導入へ 来年4月、副業も解禁
塩野義製薬が「週休3日」選択可能に 給与は『週休2日の8割』副業や学び直しを支援
【フォーカス】サタケ/週休3日制 通年導入めざし夏季のみ試行中 交代制で水曜を休日に
旅館なのに週休3日!?陣屋・若女将の常識を覆した組織改革
“時代錯誤”から残業ゼロ、週休3日に! 鳥取の不動産会社が
レガシー企業からDX先進企業になれたワケ
ネクスウェイ、週休4日制・1日3時間勤務選択できる勤務体系を導入
日本初「週休4日制度」で、優秀な人材を採用するしくみとは? ?
ナレッジソサエティ久田社長に聞いてみた
626:デフォルトの名無しさん
22/01/06 07:53:54.89 JIskJ1L9.net
ファイルのリネームと
ファイルの移動
フォルダ自動作成
これだけで普段の作業の手間がほんとうに省ける
逆に何ができると便利だろう
627:デフォルトの名無しさん
22/01/06 08:04:00.41 JIskJ1L9.net
環境変数って
普通の変数とは違うの?
バッチファイル特有の言い回し?
%1
%i
%hoge
だっけ?
628:デフォルトの名無しさん
22/01/06 13:18:17.45 nDo7QbOD.net
アプリケーションプログラムの環境という意味
例えば一時作業フォルダを TEMP に指定するとアプリが参照して使ってくれる(事がある)
dirコマンドのデフォルトオプションはdircmd変数に設定出来る
いわゆる環境設定と呼ばれるね
そしてバッチファイル内でプログラミング言語の変数としても使える
629:デフォルトの名無しさん
22/01/06 13:23:22.58 nDo7QbOD.net
ちなみに %1 %%i は環境変数じゃないね
shift /? や for /? を読もう
環境変数はsetコマンドでセットして参照は%変数名%
set /? を読もう
630:デフォルトの名無しさん
22/01/20 04:31:27.84 a6a8bxfJ.net
最低限
for /f "delims=" %a in ('powershell clipboard') do echo %a
631:デフォルトの名無しさん
22/01/25 21:13:49.45 aASmTB60.net
dir /b の結果を explorerの名前順(昇順|降順)にソートする簡単な方法無い?
数字を数値と見做してソート
バッチから利用出来るならOK。ps全く分からんけど powershellとかで出来ないかな?
カレントディレクトリの dir /b 相当なら dirで無くてもいい
for /f "delims=" %%a in ('dir /b ^| numsort.exe') do
みたいな感じで外部ソートツール導入でもOK。むしろ理想形
ファイル数は2000未満くらい。万単位とか考慮しなくていい
なるべくなら余計なインストールは避けたいけど自前でパースとソート作るのはハードル高過ぎなので何か方法があれば教えて欲しい
最悪逆順にするだけなら自前でも出来そうなのでせめて(昇順|降順)どちらかだけでも出来れば
632:デフォルトの名無しさん
22/01/25 21:22:10.78 s4YEdFZn.net
>>623
dir /b の結果とexplorerの名前順(昇順|降順)って違うん?
もし同じなら、単に dir /b > uuu.txt でリダイレクト
633:デフォルトの名無しさん
22/01/25 21:28:36.67 OaU1XWUD.net
半角数字だけでいいなら GnuWin の sort.exe を gsort.exe にリネームして使ってる
URLリンク(gnuwin32.sourceforge.net)
の Binaries の zip に入ってるやつ
>dir /b *.txt | gsort -n
11.txt
0123.txt
2222.txt
3333.txt
11111.txt
>dir /b *.txt
0123.txt
11.txt
11111.txt
2222.txt
3333.txt
こんな具合
漢数字とかは知らないので日本語(漢数字・全角)に対応したの
あれば知りたい……
634:デフォルトの名無しさん
22/01/25 21:53:08.80 aASmTB60.net
>>625
ありがとう試してみます
635:デフォルトの名無しさん
22/01/25 21:59:16.95 s4YEdFZn.net
>>626
あんた数字を数値と見做すて言うたやん?
11.txt
11111.txt
2222.txt
になっていいわけ?
636:デフォルトの名無しさん
22/01/25 22:26:05.82 aASmTB60.net
>>625
教えてもらったようにgsort.exeにリネームして使ってみたら
libintl3.dll が見つからないため、コードの実行を続行できません。プログラムを再インストールすると、この問題が解決する可能性があります。
とアラート出て使えなかった。win10
libintl3.dllをググったらjp.dll-files.comてとこ検索出て落とせるようなんだけどこれ入れて大丈夫?
637:デフォルトの名無しさん
22/01/25 22:30:15.41 OaU1XWUD.net
>>627
落ち着いて
そこは比較のために出した素の 「dir /b 」 の結果ですよ
>>628
ごめんなさい
上のページの Binaries の下の Dependencies も要るんだった
638:デフォルトの名無しさん
22/01/25 23:14:16.23 aASmTB60.net
>>629
ありがとう
libをシステムにコピーして使えました
でもコレ
dir /b *.ext | gsort -n
1.txt
2.txt
…
9.txt
10.txt
と、数字.ext なら数値順にソート出来ましたけど
文字列+数字.ext だと無理なようです
xxx1.txt
xxx10.txt
xxx2.txt
xxx20.txt
みたいになります
xxx_1.txt と文字列と数字の間に区切り記号入れても駄目
エクスプローラーのようには並ばないみたいですね
win32api使うかvbかpowershellかで出来るような事を以前どこかで読んだ気がするのですがそのソースが見付けられない。。
639:デフォルトの名無しさん
22/01/26 01:07:47.03 td9ayUMw.net
普通に見つかったけど、本当に探した?
@echo off
echo class P{[System.Runtime.InteropServices.DllImport("shlwapi.dll", >SortLogical.cs
echo CharSet = System.Runtime.InteropServices.CharSet.Unicode, ExactSpelling = true)] >>SortLogical.cs
echo public static extern int StrCmpLogicalW(string str1, string str2); >>SortLogical.cs
echo static void Main(){ string[] lines = System.Console.In.ReadToEnd().Split >>SortLogical.cs
echo (new string[] { "\r\n" }, System.StringSplitOptions.RemoveEmptyEntries); >>SortLogical.cs
echo System.Array.Sort(lines, StrCmpLogicalW); >>SortLogical.cs
echo System.Console.Out.WriteLine(string.Join("\r\n",lines));}} >>SortLogical.cs
for /f %%i in ('dir /s /b "%windir%\Microsoft.NET\csc.exe"') do set csc="%%i"
%csc% /nologo SortLogical.cs
dir /b | SortLogical
640:デフォルトの名無しさん
22/01/26 04:18:02.04 aOgfZBdB.net
>>631
すげぇ。生成されたexeで希望するソートが出来るようになりました
マジ感謝です
ありがとう
> 本当に探した?
検索語すら分からず「バッチ dir エクスプローラー並び順」とか他にも結構色々試して探しては見たのですが。。
StrCmpLogicalW が分かった今でもその方法を見付けられていません
641:デフォルトの名無しさん
22/01/26 06:51:01.88 fC9okRVc.net
エクスプローラーの並び順って
辞書順か数字順か
レジストリで変更可能だよね
642:デフォルトの名無しさん
22/01/26 08:10:19.47 JawhZMcA.net
何のために並び順を揃えるの?
643:デフォルトの名無しさん
22/01/26 08:34:25.15 e2k0MxNT.net
なるほど、数字の部分だけは数値に変換してから、小さい順に並べるのか
このアルゴリズムを考えるのは、難しい
644:デフォルトの名無しさん
22/01/26 09:10:13.24 TX0OTodc.net
俺なら必要な桁分0パディングするなあ
連番ファイルをエクスプローラーで直接使うなんてことはないし
645:デフォルトの名無しさん
22/01/26 09:20:50.79 JawhZMcA.net
エクスプローラーで選択してパスのコピーでいいやん
646:デフォルトの名無しさん
22/01/26 11:52:52.47 +BcwC06P.net
>>635
スクリプトでやるなら正規表現などで数字部分を置換11→0000000011してからソートかな?
小数点以下ってどうなってたっけ?
でも記号 _ の並びまで違うから鬱陶しい
631のAPIはWin7には無いっぽいから需要はあるかもよ
647:デフォルトの名無しさん
22/01/26 12:06:15.68 +BcwC06P.net
あれ?XPから使えるのか…
あの外人許さん
648:デフォルトの名無しさん
22/01/26 12:08:29.20 JawhZMcA.net
A01BとA001Bが同じ評価になって順番どうするのとか思う
649:デフォルトの名無しさん
22/01/26 20:44:37.41 rJwWcbPl.net
>>631をスイッチで逆順に出来ない?
650:デフォルトの名無しさん
22/01/26 22:43:54.21 2NoDFTFY.net
>>631
おおーっ、いいなコレ
>>630
今更感が強いけど、文字列やセパレータがはっきりしてるならこんな事も
>dir /b *.txt | gsort -g --key=4 --field-separator=x
xxx11.txt
xxx0123.txt
xxx2222.txt
xxx3333.txt
xxx11111.txt
>dir /b *.txt | gsort -n --key=2 --field-separator=-
xxx-01-23.txt
xxx-1-1.txt
xxx-2-222.txt
xxx-33-33.txt
xxx-111-11.txt
>dir /b *.txt | gsort -n --key=3 --field-separator=-
xxx-1-1.txt
xxx-111-11.txt
xxx-01-23.txt
xxx-33-33.txt
xxx-2-222.txt
ひとつ目はちょっと無理やりw
651:デフォルトの名無しさん
22/01/26 22:54:09.19 e2k0MxNT.net
11
011
0011
のソート順が分からない
652:デフォルトの名無しさん
22/01/27 00:04:18.32 L9fnubfL.net
>>641
もちろんできる
下記をSortの後に追加
if "%1"=="/R" echo System.Array.Reverse(lines); >>SortLogical.cs
653:デフォルトの名無しさん
22/02/05 23:16:58.61 ICS6MdcL.net
・画像ファイルが縦長か横長か?
・画像ファイルの拡張子判別
上記2点をバッチから行いたい
縦横に関してはimageMagickで出来そう
identify -format "%[fx:h>w?1:2]" "ファイルパス"
拡張子判別も同様に %m でファイルタイプからやれそうではあるのですが
何か更に良い方法やコマンドラインアプリなどがあったらアドバイス欲しいです
654:デフォルトの名無しさん
22/02/06 04:23:41.63 D8jWL7f3.net
画像のサイズはOS標準の方法としてシェルネームスペースからファイルのプロパティの詳細タブの値を拾ってくるやつがあったと思う
COMが使えるスクリプトで取ってくる必要がある
拡張子はバッチファイル 拡張子 取得でぐぐったら出てくるんじゃないの
655:デフォルトの名無しさん
22/02/06 05:53:39.32 ZVoj0wBD.net
Param([Parameter(mandatory=$true)][String]$inputFile)
Add-Type -AssemblyName "System.Drawing"
try{
$img = [System.Drawing.Image]::FromFile($inputFile)
if ($img.RawFormat.Equals([System.Drawing.Imaging.ImageFormat]::Jpeg)) {
$mimetype = 'image/jpeg'
} elseif ($img.RawFormat.Equals([System.Drawing.Imaging.ImageFormat]::Png)) {
$mimetype = 'image/png'
} elseif ($img.RawFormat.Equals([System.Drawing.Imaging.ImageFormat]::Bmp)) {
$mimetype = 'image/bmp'
} elseif ($img.RawFormat.Equals([System.Drawing.Imaging.ImageFormat]::Gif)) {
$mimetype = 'image/gif'
} elseif ($img.RawFormat.Equals([System.Drawing.Imaging.ImageFormat]::Icon)) {
$mimetype = 'image/icon'
} elseif ($img.RawFormat.Equals([System.Drawing.Imaging.ImageFormat]::Tiff)) {
$mimetype = 'image/tiff'
} elseif ($img.RawFormat.Equals([System.Drawing.Imaging.ImageFormat]::Wmf)) {
$mimetype = 'image/wmf'
} elseif ($img.RawFormat.Equals([System.Drawing.Imaging.ImageFormat]::Exif)) {
$mimetype = 'image/exif'
} else {
$mimetype = 'image/unknown'
}
$w = $img.Width
$h = $img.Height
$img.Dispose()
}
catch{ $mimetype='unknown' }
echo "$mimetype`t$w`t$h"
656:デフォルトの名無しさん
22/02/06 05:54:07.77 ZVoj0wBD.net
↑
getDetailsOfでプロパティを取ってくる以外の方法
jpg/png/gifぐらいだけど
powershell ./test.ps1 "画像ファイルのパス"
プロパティだと拡張子に関連付けられたものになる
中身がjpgなのにファイル拡張子が.pngの場合とかある?
なお、batに埋め込みたいならググれば方法は出てくる
657:デフォルトの名無しさん
22/02/06 09:33:19.21 T20/oaZi.net
>>647-648
ありがとうございます
最初、実行ポリシーが云々でエラーになったものの、ググって
powershell -NoProfile -ExecutionPolicy Unrestricted .\test.ps1 '%~1'
としたら動きました
シングルクォートにしないとスペースを含むパスでエラーになりました
> 中身がjpgなのにファイル拡張子が.pngの場合とかある?
バッチでリネームついでにそういった間違っている拡張子を正しいものに直したいと思いまして
image/jpeg とかを .jpg に変えたら面倒も無くそのまま使えそうです
powershell凄いですね。外部アプリ使わずに判別出来ちゃうんですね
WINEX32.DLL
URLリンク(www.vector.co.jp)
こういうのが必要なのかと思ってました
ただファイル一つ一つをバッチからpsを起動してたら遅いのだけが難点ですね
速さは重要ではないので構わないのですが
いっそ全部psで書けるスキルがあれば良いんですけどねー
バッチですら四苦八苦してる身としてはさくっと書ける人が羨ましいです
658:デフォルトの名無しさん
22/02/16 16:36:49.58 w27+Spzi.net
初心者過ぎて分からないんだが
�
659:Rマンド >nul 2>&1 if "!ERRORLEVEL!" == "0" ~ ってちゃんと意味ある? 出力捨てるのは成功するから毎回リターンコード0になったりする?
660:デフォルトの名無しさん
22/02/16 17:40:22.47 SGx0nl/1.net
正常時に出力の無いコマンドはリダイレクトできないからエラーになるんじゃね。
異常時にコマンドがエラー出してもエラーになるから
結局、区別がつかない。
661:デフォルトの名無しさん
22/02/16 18:08:47.78 5G/Gik2e.net
>>651
辞めといた方がいいか
前の処理が正常終了したら次に進むベストプラクティスってなんだろう
662:デフォルトの名無しさん
22/02/16 18:18:47.77 t0Nu4cH6.net
コマンドの復帰コードと標準(エラー)出力のリダイレクトとは無関係なので
ちゃんとコマンドが復帰コードを返していたら問題ないはず
errorlevel環境変数を見るのはちょっとリスクがあるけどわかっているなら問題はない
if errorlevel 1 ~
なら確実
663:デフォルトの名無しさん
22/02/16 18:26:54.82 lGeZIdOq.net
コマンド
if not errorlevel 1 echo ok
コマンド >nul 2>&1 && echo ok || echo fail
664:デフォルトの名無しさん
22/02/16 18:31:31.49 5G/Gik2e.net
ifのパラメーターにerrorlevelがあったのね
確かに環境変数使うより良さそう
PC起動時に毎回開きたいアプリを順番(前後関係あり)に開いてくだけだから基本startコマンドなのよね
665:デフォルトの名無しさん
22/02/16 18:32:09.18 5G/Gik2e.net
おーありがてえ
666:デフォルトの名無しさん
22/02/16 18:39:35.08 IpLn/l6Q.net
>>651
> 正常時に出力の無いコマンドはリダイレクトできないからエラーになるんじゃね。
どこからこんなアホな知識を仕入れたのか知らんが、そんな知識を開陳する度胸に感心したわ
667:デフォルトの名無しさん
22/02/16 18:44:42.98 91qDUo1j.net
>>655
if errorlevelは 以上 だから気をつけろよ
DOS時代の使い勝手重視だ
668:デフォルトの名無しさん
22/02/16 18:50:49.88 t0Nu4cH6.net
>>658
DOSだと、gotoしか書けなかったね
669:デフォルトの名無しさん
22/02/16 22:29:00.93 5G/Gik2e.net
>>658
以上なのか…
勘違いしそうだったわ気を付けよ…
670:デフォルトの名無しさん
22/02/20 02:07:07.44 UpXKcN5y.net
これなんでこうなるの?
echo abc 行末|findstr "^abc"
一致
(echo abc 行末)|findstr "^abc"
一致
echo abc 行末|findstr "行末$"
一致
(echo abc 行末)|findstr "行末$"
不一致
echo abc 行末| findstr /r /c:"^abc 行末$"
一致
(echo abc 行末)| findstr /r /c:"^abc 行末$"
不一致
元はこういう感じでハマっててやっと原因突き止めたんだけど理由が分からん
(for /L %%j in (1,1,%i%) do for /f "delims=/" %%a in ('echo "%%B_%%j%%"') do echo %%~a
)|findstr "^001a\.txt$" || echo ok
因みに /x オプションも駄目だった
('echo "%%B_%%j%%"') の部分も元は ("!B_%%j!") で単独では展開されてたのにパイプ繋ぐと展開されずハマってた
パイプ繋いだら遅延展開無効化されるん?
671:デフォルトの名無しさん
22/02/20 02:58:56.00 WlVIdNMt.net
(echo abc 行末)|findstr "行末 $"
は一致する
スペースが入るみたいだね
672:デフォルトの名無しさん
22/02/20 03:21:58.43 j5UZdGyh.net
>>662
それだと、空白は文字列のOR扱いで、"行末"と"$"のどっちかってことになる
が、まあそういうことだね
echo onの状態で実行してみりゃわかる
673:デフォルトの名無しさん
22/02/20 03:38:00.04 UpXKcN5y.net
ありがとう
(echo abc 行末)|findstr /r /c:"^abc 行末 $"
これで一致したから半角スペース入ってしまってるで間違いないみたい
674:デフォルトの名無しさん
22/02/20 03:42:58.59 j5UZdGyh.net
echo onでどう展開されるかみればどうしてそうなったのかわかるよ
675:デフォルトの名無しさん
22/02/20 05:28:05.67 UpXKcN5y.net
>>665
当然echo onでも確認してる
例えばこんなの
for %a in (a b c) do (echo %a|findstr "b$")
echo onでの表示では %a | とパイプとの間にスペース入るけどechoの末尾にゴミなんて付かないのよ
元のバッチやコマンドプロンプトの入力で以下のようにスペース入ってれば末尾にスペース入るけど上記のように詰めて書けば入らない
for %a in (a b c) do (echo %a |findstr "b$")
676:デフォルトの名無しさん
22/02/20 05:50:10.39 WlVIdNMt.net
>>663
ん?
空白区切りってダブルクォートを無視するの?
"行末(sp)(sp)$" で不一致になるから "行末(sp)$" に一致してるんだと思ったけど
677:デフォルトの名無しさん
22/02/21 23:05:19.75 J9914B5I.net
>>661
URLリンク(scripting.cocolog-nifty.com)
678:デフォルトの名無しさん
22/02/25 18:44:29.79 xURWaPVP.net
同じアプリのファイルを複数起動していて
コマンドラインが同じになっているとき
閉じたいものだけ閉じる方法ってありますか?
679:デフォルトの名無しさん
22/02/25 18:45:11.42 xURWaPVP.net
すいません、コマンドラインでなくプロセス名でした
680:デフォルトの名無しさん
22/02/25 20:06:56.37 zbdaU1gm.net
>>670
全く同じexeを複数起動してるんなら、プロセスID指定しかないけど
プロセスID見たってどっちが消したいexeなのか判別できる?
・リスト表示
tasklist /fi "IMAGENAME eq xxx.exe"
・削除
taskkill /pid 9999
パスが違うとかならパス情報を見るとかでプロセスIDを特定できる
wmic process list full format:csv|findstr "C:\foo\bar\baz.exe"
681:デフォルトの名無しさん
22/02/25 20:12:59.55 xURWaPVP.net
>>671
ありがとうございます
パスは違うので、その方法でやってます
助かりました
682:デフォルトの名無しさん
22/02/25 22:00:00.64 zbdaU1gm.net
>>672
もう出来たとは思うけど、上のだとfindstrも一緒に検出されるので出した責任として訂正しとく
for /f "tokens=6 delims=," %%i in ('wmic process list full /format:csv^|findstr "C:\bin\INET\Jane"^|findstr /v findstr') do set pid=%%i
tasklist /fi "pid eq %pid%"
683:デフォルトの名無しさん
22/02/26 12:26:06.99 2NOKllqN.net
>>673
ありがとうございます!
頂いたコードもとても参考になります
684:デフォルトの名無しさん
22/02/26 16:12:21.37 XLKEJl76.net
アクティブウィンドウ名がわかればいいんだね
vbaでできるらしいが
685:デフォルトの名無しさん
22/03/10 14:32:21.94 53waehJr.net
あるフォルダROOTの配下にフォルダ001~フォルダ999があり、その中にはAAA,BBB,CCCという3ファイルがあるとします。
フォルダ001から999配下の全てのAAAをZZZにコピーするために
コマンドプロンプトでROOTフォルダで「for /r %i in (AAA) do copy %i %~pi\ZZZ」としたら求める結果になりましたが
これをバッチファイルに書くと構文エラーみたいなエラーがでます。
バッチファイルに書く場合どうしたらいいでしょうか。
686:デフォルトの名無しさん
22/03/10 15:13:37.97 jqA3dRQ6.net
魔空空間では
%i in (AAA) do copy % という名前の環境変数に展開されて消えてしまうのだ!
すべての%を%%に書き換えて対抗しよう!
なおコマンドラインでも環境変数が定義されていたら展開されてしまうぞ
こちらは対処不能だキヲツケロぉ
687:デフォルトの名無しさん
22/03/10 15:28:31.03 23a2YeOc.net
>>676
コピーするファイル数が膨大でなければバッチより2画面ファイラーの方が便利
ファイル検索して、反対側窓のフォルダーにコピー、移動する
dynaやafx
688:デフォルトの名無しさん
22/03/10 15:52:45.58 53waehJr.net
>>677
ありがとうございます。うまくいきました!
理由まで教えていただきありがとうございました。
>>678
ファイラ、懐かしいです。からこれ20年くらい前??FDとか使っていたことがありますが、、、、また使ってみようかと思います。
689:デフォルトの名無しさん
22/03/12 02:42:22.51 1/likOkq.net
家の光回線をIPv4 over IPv6に変えたら、「VPN931でしょ?」ERRORが出て書き込めなくなった
試行錯誤の後、携帯回線を無線子機経由、テザリングで繋いでおき
「ネットワークアダプター」のページからイーサネット(有線)を無効にして書き込み、
書き込みが終わったら再び光回線を有効にするようにした
しかし、つい携帯回線に切り換えたのを忘れたまま動画を観てしまうようなことが何度もあり、
1回で月無料分のギガを使い切ってしまい、有料になったり速度制限がかかったりして不便&勿体ないので
なんとかバッチ処理出来ないかと思い、
「有線LAN 無効化 バッチ」で検索して見つけた下記のページを参考にしてバッチファイルを作ってみた
↓
URLリンク(mseeeen.msen.jp)
----------
@ECHO OFF
netsh interface set interface "イーサネット" disabled
ECHO 一時的に光回線(有線・イーサネット)をOFFにしました
timeout 30
netsh interface set interface "イーサネット" enabled
if ERRORLEVEL = 1 PAUSE
----------
上記を拡張子batで保存し、参考URL同様にショートカット経由で管理者権限で起動するようにしました。
※メモ帳で編集したとき、デフォルトでUTF-8→ANSIにすることを知らずに文字化けして上手く動かなかったのはお約束。
これで、書き込む直前にショートカットで起動すれば
30秒だけ光回線が切れ、wifi=携帯回線で書き込める
その後は自動復帰するので繋ぎ忘れが無くなった
もしもっと良い方法があれば教えてくださいm(_ _)m
690:デフォルトの名無しさん
22/03/12 10:55:59.83 i3Z8TR4r.net
ネットワークの有効無効を変える必要はなくて、単にどっちがデフォルトゲートウェイになるかを制御するだけで十分だよ
スマホ側にプロキシたてて、専ブラ(だよね?)からそのプロキシを使うように設定すれば常時5chだけスマホ側に流すこともできる
691:デフォルトの名無しさん
22/03/12 12:05:05.72 vZQIGC81.net
5chのipでルーティングの設定するだけでは?
692:デフォルトの名無しさん
22/03/12 13:36:04.21 i3Z8TR4r.net
理論的にはそうだけど実際5chが使ってるIP範囲調べたことあるかい?
CDN通してるから、取りうるIP範囲まるごとスマホに流したら5ch以外の多くのサイトのトラフィックもそっちに流れてデータ通信容量が消費されてしまう
693:デフォルトの名無しさん
22/03/12 13:41:51.25 i3Z8TR4r.net
途中で書き込んでしまった
消費されてしまうので、L3レベルでの経路選択は現実的ではない
なので一時的にまるごと切り替えてしまうか、URLを指定してシステム全体でプロキシ設定を行う、専ブラについてるプロキシ機能を使うとかのが良い
しっかりインスペクションして経路振り分けられるルーターを用意して設定できるならそれもありだが一般人向けではない
694:680
22/03/12 14:48:36.28 1/likOkq.net
>>681
流石ですね!あっという間に より良い方法を考えつくとは!
…ですが、専ブラに登録している全てのスレの新着チェック(=下り)は光回線で出来るので、
ギガ節約のためにも、無理にスマホに流さなくて良いのですよ
専ブラの上り(=書き込み)だけ携帯回線に流すバッチなんて作れますかね?
ヒントや参考になるURLでも構わないのですが
695:デフォルトの名無しさん
22/03/12 14:54:48.13 1/likOkq.net
PC再起動したら、 >>680 のバッチ実行時に「この関数を完了できません」が出て 狙い通りに動かなくなってしまった
仕方なく、以前と同じように 「アダプターのオプションを変更する」 からイーサネットを無効にして接続中
一番最初は 5chに書き込むたびにPCの裏に回り、 いちいち外しにくいLANケーブルを切り離していたから、
これでも 石器時代から稲作が出来るくらいには進化しているのだがw
たぶん名前が一致しなくなってしまった?のが原因と思うので、自分で対策してみますm(_ _)m
696:デフォルトの名無しさん
22/03/12 19:45:55.71 i3Z8TR4r.net
全自動で書き込みだけ他に流す仕組み考えてみたけど作らなきゃいけない部分もあるから質問者が実行できる気がしない(もはやスレチレベル)
スマホと書いてあるけど、安いPPPoEのプロバイダ契約するとか、donedoneや楽天、povoみたいな基本0円のSIM+モバイルルーターの回線と余ってるPCや仮想マシンを使っても良い
専ブラが使ってる5chのAPIの各リクエストが分離できる(事前に認証を行ったりする必要がない)と仮定すれば以下の仕組みで行けるはず
自宅内に5ch.netの各サーバーのリバースプロキシを立ててオレオレCA運用を行う
クライアント側でCAの自己証明書をOSに追加して、そのローカルIPをhostsで5chの各サーバに設定する
リバースプロキシ側で特定のパスのリクエストだけはスマホ側に用意したサーバーに投げる
スマホ側のサーバーはリクエストを受け取ったら、正しい5chのサーバーに投げて、その応答を返す
697:デフォルトの名無しさん
22/03/12 20:42:13.77 dQfogYw2.net
ま、5chはIPは5つしか無いけど
104.18.231.150
104.18.232.150
104.18.233.150
104.18.234.150
104.18.235.150
これはどの鯖でも共通(apiだろうがegg,kizuna,meviusだろうが)で
この5つのどれかをランダムで使う
なお、このIPは導入時から変わってない
698:デフォルトの名無しさん
22/03/18 00:52:20.19 SoYXm1dj.net
startでバッチファイルを実行すると、cmdウィンドウが残る
バッチファイルの最後をexit /B でなくexitにすると残らなかった
699:デフォルトの名無しさん
22/03/18 07:45:35.96 5cZqh0Cb.net
help exitに書いてあるでしょ
700:デフォルトの名無しさん
22/03/24 13:13:33.35 dCVvmFB6.net
最近ReactOSのソース読み始めたが勉強になるな
変な挙動のところは親切に#ifndef MSCMD_XXX_QUIRKSって書いてあってわろ
MS-DOS2.0のソースはMS公式が公開してるけどアセンブリは難解すぎて諦めた
701:デフォルトの名無しさん
22/03/26 06:55:33.59 NhkQRxfw.net
batにVBS仕込めるけど、JSは仕込める?
他に仕込めるものある?
702:デフォルトの名無しさん
22/03/26 12:54:10.76 vpv2MT5y.net
ググれよ
WSH(JScript)なら可、JavaScriptは無理だと思う
PowerShellも可
703:デフォルトの名無しさん
22/03/29 16:59:49.39 zndnyGpb.net
Batになんか仕込むんならPowershellがいちばん簡単
VBSも上手いことやれば仕込めるし
704:デフォルトの名無しさん
22/03/29 17:48:10.85 Da68lL6t.net
>>631 みたいにすれば大体何でもイケるんじゃね
705:デフォルトの名無しさん
22/03/29 18:45:33.65 CGMVb58j.net
我が家では外部ファイルを使うのは邪道とされておるのだ
706:デフォルトの名無しさん
22/03/29 21:38:59.70 6qHTZxky.net
631みたいのはバッチ内のPowerShellでもっとスマートに書けるね
相変わらずコンソール消しても一瞬出てきて邪魔だけど
完全に消すにはvbsから呼んだりで結局2ファイルになる
707:デフォルトの名無しさん
22/04/03 02:50:31.03 hpCvdrMf.net
バッチ自体を初めて作っててクリップボードのテキストを[]で囲んだ名前のフォルダをデスクトップに作りたいんだけど
powershell get-clipboardでクリップボードから持ってくる
mdとかNew-Item NewDirecrtoryでフォルダを作る
までわかって|とか>で色々試して見たんだけどまあ上手くいくはずもなく
そもそも出来る事なのかもわからないから質問しに来ました!たっけてー
708:デフォルトの名無しさん
22/04/03 08:04:11.49 VNoVBeip.net
for /f "delims=" %%a in ('powershell clipboard') do md [%a]
709:デフォルトの名無しさん
22/04/03 08:07:00.01 VNoVBeip.net
for /f "delims=" %%a in ('powershell clipboard') do md [%%~a]
710:デフォルトの名無しさん
22/04/03 09:37:15.22 hpCvdrMf.net
>>700
ありがとう!
for /f "delims=" %%a in ('powershell clipboard') do md C:\Users\----\Desktop\[%%~a]
でいけました。
711:デフォルトの名無しさん
22/04/03 15:33:41.09 MONKPJtx.net
>>698
ちなみにPowerShellだけなら
powershell -c "Get-ClipBoard | ?{$_} | foreach {$dirName='[{0}]' -f $_; $dirPath=[IO.Path]::Combine([Environment]::GetFolderPath('Desktop'), $dirName); $null=[IO.Directory]::CreateDirectory($dirPath);}"
712:デフォルトの名無しさん
22/04/03 15:38:56.15 XWBs+Kvf.net
>>701
ab cd
a&b
とかでフォルダが作成できるかテスト
713:デフォルトの名無しさん
22/04/03 17:32:35.14 5jbreqOF.net
スペースのある文字列の扱いがわからんな
複数作ることを意図または許容するのか否かでちょっと違ってくる
714:デフォルトの名無しさん
22/04/03 22:48:33.20 7tiScrqu.net
cmdのmkdirで作るか>>702みたいに.NETのAPIで作るかWin2APIで作るかでも違ってくる
715:デフォルトの名無しさん
22/04/03 23:24:55.78 hpCvdrMf.net
色々方法があるけど何かしらcmdのみでは出来ないって事だけはわかった
面白いから少し勉強しようかなあ
716:デフォルトの名無しさん
22/04/14 00:56:37 FFCnePh6.net
batにドラッグするだけで複数zipを同じ階層に解凍してくれるbatが作りたいです。
圧縮の場合は
@echo off
path C:\Program Files\7-Zip;%path%
for %%i in (%*) do cd /d "%%~i" && 7z a "%%~i.zip" *
で出来るのですが、解凍の場合がわかりません。わかる方いれば教えていただきたいです。宜しくお願い致します。
717:デフォルトの名無しさん
22/04/14 02:56:14.25 wBUYMDtu.net
:start
if "%~1"=="" goto :EOF
7z.exe x "%~1" -o"%~dpn1" -y
shift
goto :start
718:デフォルトの名無しさん
22/04/14 16:24:25 NCtDoq3M.net
俺の勘違いだったらすまん
ドラッグで引数を渡す系だとバッチは括弧付きのファイル名が入った時点で破綻するような気がする
変なしがらみのないvbsやjs辺りで書いた方がいいかも
719:デフォルトの名無しさん
22/04/14 18:16:44.99 qAvWbsmN.net
括弧の他にも色々とダメ文字が頭に浮かぶな
720:デフォルトの名無しさん
22/04/14 20:34:57.53 YeXmNplS.net
複数選択のコンテキストメニューから展開した方がいいのでは
721:デフォルトの名無しさん
22/04/15 20:04:21.77 neP5mDTX.net
>>708を試したが駄目でした batにドラッグしても何も起こりません。
>>711
Claunchにbat登録だと、ファイルをモニタの縁にドラッグするだけで解凍できてとても便利なんです
ファイル選んで右クリック、多いコンテキストメニューから目的を探してクリック…というのよりbatドラッグがしたくて…。
722:デフォルトの名無しさん
22/04/15 20:49:13 6g+y36jy.net
echo on で何が起きているか調べろ
ちなみに何をドラッグしているのか?
723:デフォルトの名無しさん
22/04/15 21:59:36.90 EPzG8fyD.net
>>707
一年前に7-Zipスレで質問した人だろ
ゴミ箱への移動がどうとか言ってた人
まさかドラッグしてるのはフォルダじゃないだろな
724:デフォルトの名無しさん
22/04/15 22:29:24.28 4ntMkwZZ.net
どこのスレのことかと思いましたが、
7-Zip総合スレ Part 10
スレリンク(software板:454番)-
のことでしょうかね。
たしかに、>>707は、この人かも。
725:デフォルトの名無しさん
22/04/15 23:09:37.54 7iiWUl24.net
ファイル名に半角スペースがあるとエラーになるよね
726:デフォルトの名無しさん
22/04/15 23:40:21 neP5mDTX.net
フォルダを圧縮したいのでフォルダドラッグしてます それはbatファイルでは不可能なんですかね
727:デフォルトの名無しさん
22/04/15 23:56:17.81 cTakk7Wr.net
これ以上触ってはいけないような気がする
728:デフォルトの名無しさん
22/04/16 05:57:00 ZvCxX7eE.net
>>712
もしかしてpathが足りないのじゃないか?
>>708のバッチの上に
path C:\Program Files\7-Zip;%path%
を加えてやってみろ
729:デフォルトの名無しさん
22/04/16 10:15:06.24 Xjbe7mxo.net
昔自作したやつがそう言えばどっかにあったな
色々試したけどzip名に全角スペースが含まれてる場合だけはどうにも出来なくて別のリネームバッチで半角スペースに置き換えてたわ
730:デフォルトの名無しさん
22/04/16 14:56:19 D1hG0R6r.net
list1.txt
田中
山田
list2.txt
一郎
次郎
三郎
に対して
xj.bat
@echo off
setlocal enabledelayedexpansion
call :crossjoin "" %*
exit /b
:crossjoin
for /F "tokens=*" %%l in (%~2) do (
if [%~3] == [] (
set x=%~1%%l
echo !x:__=,!
) else (
set y= %*
set y=!y: %1=!
set y=!y: %2=!
call :crossjoin "%~1%%l__" !y!
)
)
を動かすと
xj.bat list1.txt list2.txt (続く)
731:デフォルトの名無しさん
22/04/16 14:56:54 D1hG0R6r.net
田中,一郎
田中,次郎
田中,三郎
山田,一郎
山田,次郎
山田,三郎
を得ます
このバッチファイルを
list3.txt
姓
田中
山田
list4.txt
名前
一郎
次郎
三郎
と、見出しが入ったファイルに対応するよう
改造していただけませんか
732:デフォルトの名無しさん
22/04/16 15:04:34.68 akel0sHj.net
for /i分にskip=1指定入れてみるとか
733:721
22/04/16 15:25:35.02 D1hG0R6r.net
ありがとうございます
今アンドロイドなので、PC使えるときに
試して報告します
ちなみに、こういう総当りって、awkやPerl
でも作れるものでしょうか?
734:デフォルトの名無しさん
22/04/16 15:43:07.54 pX/6gg3y.net
%%lとか気持ち悪いな
こういうこと?
for /f "skip=1 delims=" %%a in (list3.txt) do for /f "skip=1 delims=" %%b in (list4.txt) do echo %%a,%%b
pause
なんでcallしたり置換したり面倒臭い事してるのか分からん
735:721
22/04/16 15:58:27.63 D1hG0R6r.net
ありがとうございます
引用先の元ネタは、list1.txtなどの
対象ファイルがいくつでもいけます
そのためかと
736:デフォルトの名無しさん
22/04/16 17:13:22.10 nVJ4wCm0.net
やりたい事に対して一見して処理が意味不明
コードレビューすれば必ず突っ込みが入るパターン
737:デフォルトの名無しさん
22/04/16 17:39:10.95 akel0sHj.net
shiftとか知らんのかな
738:721
22/04/17 14:55:17.75 wrqgojCl.net
"tokens=*" を
"skip=1 tokens=*" に変えたら
見出しを飛ばしてデータを作ってくれました
だけど出力ファイルが大きいとかなり
時間がかかりますね
元ネタのところに行ってVBS版の作成を
依頼してみます
ありがとうございました
739:デフォルトの名無しさん
22/04/17 15:10:00.22 jfoLRRUl.net
ニコイチする度にcallしてたらそりゃ遅いわ
再帰でのcallやめるだけで結構速くなるよ
740:デフォルトの名無しさん
22/04/17 16:31:06.01 A4GG7JI6.net
ハッチ処理はあまりやりたくないから、
もっとかっこいい言語でかいて、バッチに変換する(コンパイル)できるといい
バッチ見えなく化計画
741:デフォルトの名無しさん
22/04/17 17:32:55.50 iLyScgaF.net
>>708さんのを使ってみました
ファイル名にスペースが入っていると展開されないのを回避することできますか
:start
if "%~1"=="" goto :EOF
"C:\Program Files\7-Zip\7zG.exe" x "%1"
shift
goto :start
742:デフォルトの名無しさん
22/04/17 17:39:26.89 b4thkYbt.net
上で"%~1"使ってるのに下では"%1"にしてる
743:デフォルトの名無しさん
22/04/17 17:41:48.86 jfoLRRUl.net
echoやpause使ってコマンド文がどうなってるのか確認したら?
744:デフォルトの名無しさん
22/04/17 17:50:28.17 iLyScgaF.net
>>733
できました
ありがとうございます
745:デフォルトの名無しさん
22/04/17 18:36:17.23 i7g3Seu6.net
いつまでこんなレガシー機能を使い続けるの
746:デフォルトの名無しさん
22/04/18 11:21:00.70 PhhBhq60.net
>>736
powerShellがダブククリックで使えないし
747:デフォルトの名無しさん
22/04/18 11:27:46.45 t3NwdXGg.net
シンプルだからこそC++でジェネレートした.batを目視確認してから実行とかしやすいわけで
748:デフォルトの名無しさん
22/04/18 13:50:09 OF8RRP9C.net
>>730
どう書けばいいですか?
749:デフォルトの名無しさん
22/04/18 14:16:43.44 74jROqLf.net
すでにあるコマンドを使うというのは楽でいい
もう少し細かいことをしたいと思うと苦労するけど
750:デフォルトの名無しさん
22/04/20 03:57:14.74 RFdms0p+.net
PAUSEコマンド関連で質問です
バッチファイル中にPAUSEコマンドを入れるとそこでキー入力を待ちますが、
その延長で
・エクスプローラでダブルクリックされて起動された場合はPAUSEで止める
・コマンドプロンプトから起動された場合は止めない
ということをしたいです
PAUSEコマンド自体には何もオプション等は無いようなのですが、何か方法はありますか
環境変数等をみて動作を切り替えることができないか調べてみましたが、
どちらの方法で起動されても同一なようで、悩んでおります
751:デフォルトの名無しさん
22/04/20 05:42:50.53 q7JwT6An.net
>>741
>>446
752:デフォルトの名無しさん
22/04/20 07:19:49 Cwlkz3kl.net
コマンドプロンプトを起動するときのショートカットに/k:autoexec.batを入れて
autoexec.batの中でset not_double_click=true
そしてダブルクリックで起動するバッチの中で
if not "%not_double_click%"=="true" pause
とか、どうかな
753:デフォルトの名無しさん
22/04/20 09:15:24.62 RFdms0p+.net
>>742-743
回答どうもです
なるほど、ショートカットを作り、そこに判定の仕掛けを入れる、という方式ですね
ツールを配布するときは、ショートカットの設定やコマンドプロンプトの設定を
するためのインストーラが必要になりそうですね…
バッチファイル単体でどうにか…と思いましたが、検討してみます
754:デフォルトの名無しさん
22/04/20 09:26:15.67 q7JwT6An.net
>>744
いやいや、そんな面倒なことしなくても
>>446 からの流れで %cmdcmdline% 見て判定する方法書かれてるでしょ
ID:lVKoKJNl
755:デフォルトの名無しさん
22/04/21 14:21:13.38 asEavXVa.net
昔の友は 今も友
俺とお前と(デンデン)大五郎
756:デフォルトの名無しさん
22/04/21 16:29:36.51 7MR/4l0o.net
ちゃん!
757:デフォルトの名無しさん
22/04/24 09:15:29.28 vcjjnxKB.net
>>739
setlocal enabledelayedexpansion
set n=0
for %%a in (%*) do set /a n+=1
if %n% GTR 64 >&2 echo ERROR: Args is Max limit 64 exceeded.&pause&exit /b 1
set A=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz#$+-/:@[]_{}
set i=0
for %%a in (%*) do for %%b in (!i!) do for /f %%c in ("!A:~%%b,1!") do (
set "CMD_FOR=!CMD_FOR!for /f "usebackq delims=" %%%%c in (%%a) do "
set CMD_OUT=!CMD_OUT!,%%%%c
set /a i+=1
)
%CMD_FOR%echo %CMD_OUT:~1%
pause&exit /b 0
引数最大64個になってるけどfor変数のリストset Aを追加すれば増やせる
実際にどこまでforを多段に出来るかは知らない
コマンドの文字数制限とかあったような気がする
758:721
22/04/24 11:08:56.51 IqM9oVR7.net
>>748
頭に@echo offをつけやってみました
10万行ぐらいの出力ファイルを
ローカルHDDに作ると
721では30分、
748では5分以内
(いつ終わったか分からないため)
となりました
ファイルのお尻になんか1行
ついてるのはご愛敬
759:デフォルトの名無しさん
22/04/24 19:27:47.47 lnSwl1A7.net
そこまで変わるのか
760:デフォルトの名無しさん
22/04/24 23:16:01.47 YqrbVxmA.net
.>>721もよくわからないが>>748もよくわからなかった
こういうのよくないと思うの
761:デフォルトの名無しさん
22/04/24 23:53:10.74 /3xv87ig.net
この程度で分からんとか流石にそれはおまえの頭が悪すぎだろう
762:デフォルトの名無しさん
22/04/25 23:47:31.88 3ou64YUW.net
>>748の解説オナシャス!
763:デフォルトの名無しさん
22/04/26 00:02:39 /dRsx73H.net
>>753
引数の数だけ >>725 みたいなコマンドを生成して実行してるだけ
set "CMD_FOR=!CMD_FOR!for /f "usebackq delims=" %%%%c in (%%a) do "
set CMD_OUT=!CMD_OUT!,%%%%c
%CMD_FOR%echo %CMD_OUT:~1%
で察せ
764:デフォルトの名無しさん
22/04/26 00:45:33.71 EhTMueYx.net
いや特にその2行が意味不明で察せないんだわ
765:デフォルトの名無しさん
22/04/26 01:04:14 /dRsx73H.net
1、2行入れたList.txt用意してecho onで実行して追ってみればどこがどうなってるのかくらい池沼でなければ分かるでしょ
766:デフォルトの名無しさん
22/04/26 2
767:3:13:58.40 ID:AEcCnDU9.net
768:デフォルトの名無しさん
22/04/26 23:29:20.25 OAZlYJMq.net
>>757
ジャバスクリプト使え
769:デフォルトの名無しさん
22/04/27 01:07:40.77 c7tqZe1K.net
dirでソートしたのをforでskipしてdelすればいいんじゃね
770:デフォルトの名無しさん
22/04/27 01:13:28.18 4aF/byUR.net
バックアップファイルでも溜め込んでるのかな?
771:デフォルトの名無しさん
22/04/27 01:13:59.63 CxYG3qjN.net
pushd, popdは出口exitがたくさんあったり、あちこちgotoしたりすると
つじつまがあわなくなることがある
そういう時は%cd%でフォルダ位置を覚えておき、最後そこに戻すほうが気分的に楽
772:デフォルトの名無しさん
22/04/27 03:00:29.08 itKYtkFa.net
>>757
for /f "skip=9 delims=" %%a in ('dir /a-d /b /o-d') do del "%%a"
773:デフォルトの名無しさん
22/04/27 18:14:04.80 pviHRewB.net
>>757
Ruby で書いてみた。
DryRun なので、実際にはファイルは削除されません
require 'fileutils'
# 絶対パスのディレクトリ名の後ろに、* を付けること!
# . で始まる、隠し directory, file を除く
dir_path = "C:/Users/Owner/Documents/test/*"
# そのディレクトリ内の全てのファイルパス・更新時刻を取得する。
# [ ファイルパス, 更新時刻 ]の配列の配列を戻す
def collect_filepaths_and_mtime( dir_path )
Dir.glob( dir_path )
.select { |full_path| File.file?( full_path ) } # ファイルのみ
.map { |full_path| [ full_path, File.
774:stat( full_path ).mtime ] } # [ ファイルパス, 更新時刻 ] end temp_ary = collect_filepaths_and_mtime( dir_path ) if temp_ary.length >= 10 temp_ary.sort_by! { |ary| ary[ 1 ] } # 更新時刻の古い順でソート # p temp_ary FileUtils::DryRun.remove( temp_ary.first[ 0 ] ) # 削除 else puts "ファイル数は#{ temp_ary.length } です。処理するファイルはありません!" end
775:デフォルトの名無しさん
22/04/29 11:23:44 X7f5QGPR.net
powershell
gci -File | sort -P LastWriteTime -D | select -Skip 10 | %{ del $_.FullName -Fo}
776:デフォルトの名無しさん
22/04/30 11:02:51.79 usL/g0YR.net
>>748
for /L 129個でやってみた
流石に途中で止めたけど以下で問題無く動いているようだから for の段数自体に制限はなさそう
文字数制限は過去ログで set が8190文字とか見たような
cmd.exe が1度にパース出来る文字数なのか setコマンドの制限なのかは分からないけど前者ならそこが限界になるね
@echo off
setlocal enabledelayedexpansion
set $$$=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz#$+-/:@[]_{}。「」、・ヲァィゥェォャュョッーアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン゙゚'\
set iii=0
for /L %%a in (1,1,129) do for %%b in (!iii!) do for /f %%c in ("!$$$:~%%b,1!") do (
set "CMD_FOR=!CMD_FOR!for /L %%%%c in (0,1,1) do "
set CMD_OUT=!CMD_OUT!%%%%c
set /a iii+=1
)
copy nul out.txt >nul
echo "%CMD_FOR%>>out.txt echo %CMD_OUT%"
%CMD_FOR%>>out.txt echo %CMD_OUT%
pause&exit /b
777:デフォルトの名無しさん
22/05/06 05:51:24.45 QgRBAFzX.net
Dracura配色にしたら目に優しくオサレになった
URLリンク(draculatheme.com)
PowerShellとかWindows Terminalとかのテーマもいろいろある
URLリンク(draculatheme.com)
778:デフォルトの名無しさん
22/05/08 05:37:23.76 L9rI0dwl.net
お助けくださいm(vv)m
タスクスケジューラにAdministrators最上位権限の6時間おき無期限タスクを設置しました
エラーなども解決し、やっと定刻に指定したタスクを実行するよう調整出来たのですが、対象となるregファイルの起動≒実行ではなく「次のプログラムを使って開く」的なダイアログ表示になってしまいます
OS上ではダブクリで処理していた内容なので盲点でした
スケジューラでregファイルを使用しレジストリの改変を定期的に行う場合、操作の記述はどのようにすれば宜しいでしょうか?
それか、当該regファイルを実行するためのバッチファイル記述を願いたいです
スケジューラでバッチ実行を指定する方法はネット上にも複数ありました
reg系は散々ググっても検索に出ないのが辛いですね
アドバイスお願いしますm(vv)m
779:デフォルトの名無しさん
22/05/08 06:42:10 21iaPdPG.net
>>767
単に regedit %1 すりゃいい話じゃなくて?
780:デフォルトの名無しさん
22/05/08 07:07:27.41 L9rI0dwl.net
レジストリ等は長年平気で触っているくせに、コマンド的な知識・技量ともに不足しており、コピペやポン入れ以外の微調整が出来ませんでした
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
コピペ文化は自業自得ながらも辛いものがありますね
781:デフォルトの名無しさん
22/05/10 23:03:26 gcxSlYEt.net
フリーランスに立ちはだかる「常駐」の壁。慣例を打ち壊し、
“テレワーク”案件3割→8割へと成長を遂げた「クラウドテック」の軌跡
リモートワーク求人専門サイト「プロリモート」がリニューアルオープン、
業務委託契約の求職者と企業をマッチング
1/3以上が採用につながる高マッチング率、リモートワーク×エンジニア・デザイナー専門の
人材紹介サービス「ReworkerAgent」正式リリース場所からも時間からも自由な働き方を実現!
『ReWorks(リワークス)』リモートワーク特化型転職サイトとして 3月5日 リニューアル
副業・兼業マッチングサービス「クラウドリンクス」登録者数2万人突破
中小企業で進む副業人材の採用、96%が継続採用を希望
茨城県日立市、県外からの「テレワーク移住者」に最大151万円の助成金
長野市、市内に移転・事業所設置し、移住することで最大550万円の支援金を支給
フリーランスが活用できる「最大1,000~3,000万円・補助率50%~75%」の
『ものづくり・商業・サービス補助金』とは?概要や条件を解説
782:デフォルトの名無しさん
22/05/19 11:35:25.20 aWExf7Ea.net
C:\Freesoftというフォルダにtest.rarというファイルが置いてあって、
それをwinrarの64bit版で
Z:のルートにフォルダを作らずそのまま解凍させるというようなbatファイルが欲しいのですが
誰か記述例を教えてください。
当方batファイルに関しては無知です
783:デフォルトの名無しさん
22/05/19 12:12:20.87 aAlRquen.net
>>771
winrarの64bit版はどこにあるの?
そのパス名がわからないと記述例が書けない
784:デフォルトの名無しさん
22/05/19 14:15:05.74 Rn3o2leA.net
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とすれば、
拡張子から自動判別して、解凍できると思う
785:デフォルトの名無しさん
22/05/20 09:45:16.10 lLlVMTfc.net
>>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ディスク上に解凍したのを起動させたほうが、短い時間ですむんじゃないかという考えです
786:773
22/05/20 12:29:11.62 SIlSZC9T.net
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のコマンド用実行ファイルを使った方がよいかも
787:デフォルトの名無しさん
22/05/20 20:38:33.57 8qofalUL.net
バカの話は必ず長い (宝島社新書) 櫻井 弘
788:デフォルトの名無しさん
22/05/20 20:50:08.11 zxJBX/+G.net
と、バカが申しております。
789:デフォルトの名無しさん
22/05/20 23:38:55.76 MePC0rUW.net
バカって言う人は自分がバカなんだよ?
幼稚園児でも知ってるのに
790:デフォルトの名無しさん
22/05/21 06:37:24.42 55Td3nWK.net
と、幼稚園児が申しております。
791:デフォルトの名無しさん
22/05/21 06:53:52.00 /PQRaHnB.net
ブログでやれよって感じ
792:デフォルトの名無しさん
22/05/22 18:17:57.65 RDTYjvSl.net
rarを解凍する機会なんてそんなないのにbatが欲しい?しかもbatファイルに関しては無知?妙だな…
793:デフォルトの名無しさん
22/05/23 07:47:47.45 Lvn387tn.net
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が稼働してるかどうかは調べられるけどどのディレクトリのモノまでかは特定不能のよう
794:デフォルトの名無しさん
22/05/23 07:58:02.47 Lvn387tn.net
forで取らずにリダイレクトして一旦TMPファイルに書き出せば良いんだろうけどなんか負けた気がするのでそれは最終手段
795:デフォルトの名無しさん
22/05/23 09:22:19.13 vgqZRn8w.net
パイプを犯人扱いしてfor内でifしちゃうのもありかな?
あと細かいけど"set RUNEXE=%%~a"としないとスペースとかで死ぬ
796:デフォルトの名無しさん
22/05/23 09:32:45.04 Lvn387tn.net
>>784
パスにスペースを含む場合、%%~aが利かない
頭の"だけ除かれてケツの"だけが残る罠
あとパイプ無くてもバグる
797:デフォルトの名無しさん
22/05/23 12:58:34.94 Lvn387tn.net
自己解決
> %%~aが利かない
はケツにスペース入ってたから
バグるのは文字コード上の問題のよう
URLリンク(scripting.cocolog-nifty.com)
パイプだと改行コードがおかしくなるだけらしいけどその後のコマンド類がおかしくなるのは不明
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"
798:デフォルトの名無しさん
22/05/23 14:54:07 3pQwOKKR.net
set RUNEXE="%%~a"
じゃろが
799:デフォルトの名無しさん
22/05/23 17:31:28.72 JTigk3sw.net
コマンドプロンプトはとても残念なので
set RUNEXE="%%~a"
echo RUNEXE: "%RUNEXE%"
とすると(%a=「t e s t」だった場合)RUNEXE: ""t e s t""と表示されるのだよ...
800:デフォルトの名無しさん
22/05/23 17:44:09.74 3pQwOKKR.net
すまんな
>>787は>>784に対するレス
>>786は問題ない
ケツにスペースあってもいいようにしたんだろ
801:デフォルトの名無しさん
22/05/23 17:52:18.15 9Kev8wRG.net
>>782
wmicというのがあるんだ、知らなかった
wmic /?
とすると赤字で非推奨ですと出た
802:デフォルトの名無しさん
22/05/23 20:13:36.87 kx8uWZPf.net
非推奨烙印はcmdを滅ぼそうとしているMS内の一派の仕業だから気にするな
vbsやpowershellのようにcomの使える言語であれば同じことできるから要らんといえば要らんのだがな
803:デフォルトの名無しさん
22/05/23 22:36:34.02 vE3vs/4c.net
自分の周りではあまり知られてないようなのだけど、
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
804:デフォルトの名無しさん
22/05/24 15:42:40 DHD4MJfY.net
好みだろうけど
常に値はリテラルな""に埋め込まれたものと考えることにした
なんらかの一貫性を貫くのが精神衛生上よい
805:デフォルトの名無しさん
22/05/24 16:01:20 EZq8VYJv.net
不自由でも一貫性を好む者って多くの事に対応出来ない低脳だと言ってるようなもの
最適を選ばずワンパターンな手法に頼り用いたがる思考停止した老害へと一直線
806:デフォルトの名無しさん
22/05/24 16:09:51.54 DHD4MJfY.net
むしろワンパな%~の剥ぎ取りを信頼してるのが気になったんだが
ダメ文字入っててもサブストリング置換で最後と最初の文字削ったり頭を柔らかく持とう
807:デフォルトの名無しさん
22/05/24 16:12:20.60 fGpRFhuy.net
文字列の置換抜き出しを考えてるなら常に""の中の状態にするのは正解だと思う
808:デフォルトの名無しさん
22/05/24 16:32:08.01 wIwv7WB3.net
バッチには(残念ながら)絶対はないから、すぐに展開せず要時まで自由度を残す習慣は大事だと思う
809:デフォルトの名無しさん
22/05/24 19:24:26.65 ZQNStJn7.net
ダブルクォートをまともに削除できるのが%~しかないのが全部悪い
環境変数にスペースが入っている「かもしれない」状態になるとまともにダブルクォートを外す手段がないんだよね。
set File1=X:\a a.txtとset File2="X:\a a.txt"から同じ状態に持ってこれるコードは簡潔に書く方法がないから諦めた。
sub.bat %File1% %File2% // File1が分裂して死ぬ
sub.bat "%File1%" "%File2%" // File2のダブルクォートが二重になって死ぬ
結局%~1ではがすのが1番まともに書けると思う
810:デフォルトの名無しさん
22/05/25 03:42:10.08 Mc6K3UpU.net
>>798
set "File2=X:\a a.txt"
だと何かハマるパターンがあるの?
普段こうするようにしてるから、後学のために知っておきたい
811:デフォルトの名無しさん
22/05/25 09:12:08 nfFPZ/Hm.net
>>799
set "File2=X:\a a.txt" と
set File2="X:\a a.txt" で結果が違う
俺もファルパスなら上の書き方しか使わん
812:デフォルトの名無しさん
22/05/25 20:31:54.51 CvuRtmLM.net
C:\Program Files (x86)
結構昔からあるこのフォルダの配下に置かれたファイルをまともに扱えるバッチはどれだけあるだろうか…
813:デフォルトの名無しさん
22/05/26 00:47:09.31 /szrY+JV.net
>>800
いや、だからその結果が違うのを踏まえた上で、何か罠があったりするのか、という話
回避策があるのにわざわざ問題のある2例しか上げてないから、
何かしらの罠があるから例に出さずにいたのかな、と
814:デフォルトの名無しさん
22/05/26 13:33:44.93 eXnOjPn/.net
その書き方知らんかっただけでしょ
815:デフォルトの名無しさん
22/05/26 15:42:12.26 0e7T6NOT.net
半角スペースや&の付いたファイルなんか知った事かと言い切れるなら幸せなんだがな
816:デフォルトの名無しさん
22/05/26 15:55:49.96 J8y6hNBw.net
>>801
そこだけの問題なら、そのフォルダにシンボリックを張って別の入り口を作り、そこから出入りする
817:デフォルトの名無しさん
22/05/26 15:56:19.27 J8y6hNBw.net
シンボリックリンクね
818:デフォルトの名無しさん
22/05/27 15:37:55.51 DoIFvz+R.net
>>802
環境変数にダブルクォートが入るかそうじゃないかだけの問題なのでそこだけの違いにした
こっちの書き方の方が好みか?
set "File3=X:\a a.txt"
set "File4="X:\a a.txt""
File4の書き方は受け入れられんだろうからこの書き方はやめた
819:デフォルトの名無しさん
22/05/27 21:59:22 cruiCFAs.net
>>807
さすがにそのFile4の書き方はないでしょ。好みの問題じゃない。
「&」とか含めないのでは?
820:デフォルトの名無しさん
22/05/28 00:40:39.75 eWdSCVXj.net
>>807
からかわれてるのか、はぐらかされてるのか判断つきかねる
最初の疑問には全く回答得られてないし
とりあえず半年ROMっときますわ
821:デフォルトの名無しさん
22/05/28 01:15:25.17 N6SgNzpI.net
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のパターンでハマったことはない
822:デフォルトの名無しさん
22/05/28 01:53:02 sY9CTUi4.net
>>807
4はどういう状況で使うのか気になる。危険しか感じない
わざと反転させたい場合?
>>810
値に「"&"」など、"エスケープしてる状態で含んでいる場合、反転する
set S=abc"&"def
set "STR_A=hoge%S%fuga"
結局、「何でも許容出来るように」に対応するのはコストが高過ぎるので、想定され得るものに限定しそれに合わせて書くのが現実的
値にしろ運用にしろ何らかの制限付きという条件の下で割り切って使うならバッチは楽
全てのエラー判定とかやり出すと膨れ上がるしキリ無い
何を制限とするかの見極めと切り捨てが大切
823:デフォルトの名無しさん
22/05/28 02:02:37 4gWpv+XJ.net
BATでは取返しのつかない結果にならない限りエラーで止まる、期待した結果にならなかった
のは別にいいかなって思ってる
824:デフォルトの名無しさん
22/05/28 02:59:44.49 j34iIhvZ.net
エスケープ周りをしくじれば大抵は取り返しが付かないけどな
バッチでエスケープ処理が発生するようなら他のスクリプトを検討した方がいいね
825:デフォルトの名無しさん
22/05/28 04:29:23.28 Ee8LXfQh.net
タスクスケジューラじゃregを起動できないから、間にbatファイルを挟み、その中でregを指定させたんよね
無事スケジューラの動作が確認できたものの、今度はPC操作中にcmdの起動が挟まってゲームその他の操作を阻害する
瞬間的なcmdウィンドウのポップアップを防ぐ手段はないものだろうか・・・
フリーソフト等にならタスクバー内で完結するプログラム動作も珍しくない、それを通常のcmd起動にも実現させたい^^;
826:デフォルトの名無しさん
22/05/28 05:13:46 sY9CTUi4.net
>>814
URLリンク(okwave.jp)
あとVBから出来たとか昔は出来たけど出来なくなったとか何処かで見た気がす
827:デフォルトの名無しさん
22/05/28 05:50:05.93 Ee8LXfQh.net
>>814
え・・・ショートカットリンクにすると、bat発動時のウィンドウポップアップは消えるんですか?
発動、実行、処理に問題はありません
指定時刻で瞬間表示されたcmdウィンドウの影響で生じる、PCデスクトップ上の強制画面切り替えが問題なんです・・・
828:デフォルトの名無しさん
22/05/28 19:57:51.48 vVz/heur.net
>>816
「え・・・」とか言う前にリンク先ちゃんと読んだ?
リンク先に「最小ウィンドウ(バックグラウンド)」で実行できる事は書いてある。
ゲームが影響受けないようになるかは知らない。
タスクスケジューラでの実行でウインドウ出したくないなら
簡単なのはSYSTEMアカウントで実行するように変更すること。
HKCU使ってんなら変更が必要。
829:デフォルトの名無しさん
22/05/28 20:45:56.96 Ee8LXfQh.net
>>817
的確な指摘をありがとうございます!
SYSTEMアカウントは最初の試行錯誤で試したものの、最上位命令でさえスケジューラの表示で[実行中]となるわりにbatの起動が見られず、その経緯を経てAdministratorsへ変更していました
batのショートカットを作成し、プログラム操作項目に.lnkを足し、さらにアカウントをシステムへ揺り戻すと、確かにcmdウィンドウの起ち上がり消失を確認できました
問題はタスクの表示が[実行されました]ではなく[現在タスクを実行中です]なところ
これが実際にbatを起動してくれているのか怪しいです・・・
もう少し経過観察してみます
830:デフォルトの名無しさん
22/05/28 20:49:45.87 4gWpv+XJ.net
systemアカウントでの実行だから
逆に現在ログインしてるユーザーの画面に何か表示するようなことは出来ない
batで何か表示しようとしても無理だから起動の確認は後に残るようなファイル出力等で確認
831:デフォルトの名無しさん
22/05/28 20:51:48.94 4gWpv+XJ.net
これはbatに限らないのでメモ帳とか何かのソフトを起動させても画面には現れない
832:デフォルトの名無しさん
22/05/28 21:07:54.58 Ee8LXfQh.net
仕組みの解説ありがとうございます
batの起動によりregファイルを実行することが目的ですので、SYSTEMアカウントのそのような仕様は有難いですね
だから各サイトで迷ったらSYSTEMで!と記されているのでしょうか(私も最初はそれに倣って試していました)
5ch掲示板の多くが「余所でやってください」となるので、ついでで恐縮ですが、こちらにコピー↓↓させてくださいm(vv)m
現状ではSYSTEMアカウントのbat強制発動力に疑問を抱くものの、可能なら私もSYSTEMでタスクを構築させたいです
経過観察後はAdministrators最上位でショートカットを指定起動させた場合のデスクトップ周りを検証するつもりです(bat不発かcmd出現になりそう)
------------------
タスクスケジューラでAdministrators+最上位にすると「正しく終了」+準備完了になります
しかしそれをSYSTEM+最上位にした場合、「現在タスクを実行中です」+実行中と変化します
このSYSTEMアカウント処理の際に設定項目の「新しいインスタンスを並列で実行」はどうなるのでしょうか?
実行中を上書き(もう一度プログラム起動)し続けるのであれば嬉しいのですが、並列という語句で「内部に延々と加算し続けるのか?」と不安に思いました
833:デフォルトの名無しさん
22/05/28 21:31:44.96 4gWpv+XJ.net
>>821
SYSTEMで実行しても実行完了してたら状態は「準備完了」に変わるよ
実行中ならまだそのbatは起動したままで終了してない
もし終了してないのが予期してない動作なら何か途中で止まってるので
複数起動を許可したのならbatのインスタンスが増殖することになる
834:デフォルトの名無しさん
22/05/28 21:38:44.30 4gWpv+XJ.net
想像するに
batが何かの応答を要求しててユーザーのアクション待ちなんじゃないかな
当然キー入力なんかはSYSTEMからは無理なので
タスクマネージャーから強制終了されることぐらいしかできない
上で言ってるようにカレントユーザーじゃないのでHKCUなんて存在しないんだがその点は大丈夫か
835:デフォルトの名無しさん
22/05/28 21:47:41.17 j34iIhvZ.net
SYSTEMタスクからHKCUをってことは、まず現在ログイン中のユーザーを特定してそいつのユーザープロファイルのNTUSER.DATを弄ることになるわけだよ
このスレの範疇だと無理っぽいけどがんばってね
836:デフォルトの名無しさん
22/05/28 21:55:22.65 4gWpv+XJ.net
実行したいユーザーは今の自分なんだからそこは固定にしとけばbatにできるだろ
他ユーザーのレジストリ操作はググれば出てくるよ
837:デフォルトの名無しさん
22/05/28 21:57:50.03 4gWpv+XJ.net
まあ色々言ったけど
画面表示をさけるだけなら、俺ならWSHかPowerShellを使うな
838:デフォルトの名無しさん
22/05/28 22:01:28.84 o4a1B59x.net
regファイルを実行ってレジストリ登録?それならbat使わなくても
最上位の特権で実行する
プログラム: C:\Windows\regedit.exe
引数: /s regファイルフルパス名
でよくない?
839:デフォルトの名無しさん
22/05/28 23:50:47.54 Ee8LXfQh.net
皆さんありがとうございます
やはり表示が「正常に」→準備完了ではない以上、タスクは途中状態でしたか・・・この分では肝心のbatも実行されそうにありませんね
最初のSYSTEMによるタスクの場合、管理者権限での実行に不備があるようで、それでタスクは発動するもののbat動かずという結果になると判断していました
それでAdministratorsへ変更し、命令そのものが管理者によるものへ置き換え、これまでの経緯に至っています
>>827
く、詳しくお願いします・・・自分でも相当な時間をネット検索に費やしましたが実現できませんでした
特に1文字でも損なうと完成されない、引数関連が上手くいかなくて
昔ながらのbatなら自分にもギリ可能でしたので今に至ります
regなら管理者権限も関係なく値を変更してくれるので、それさえ可能なら一番楽なんですよね
840:デフォルトの名無しさん
22/05/28 23:51:00.59 Ee8LXfQh.net
ことの発端は配信の最適化である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の恒久的な完全無効化を成せるか、なんです・・・
841:デフォルトの名無しさん
22/05/29 00:21:06 XW+WDPtU.net
>>811
File4は環境変数の末尾にスペースが入らない&&環境変数をダブルクォートでくくる目的
setに与えるコマンドラインとしては正当だが、&とかエスケープが必要な文字が入ると構文解析で事故るのでFile1と同じくやらんほうがいい書き方だったわ
842:デフォルトの名無しさん
22/05/29 00:28:55.06 NHtpNvxH.net
>>829
そもそもなんだけど、レジストリを書き替えただけでうまくいくのは確かめてるの?
通常レジストリの書き換えを反映するには、HKCUの場合ログオンが、HKLMの場合再起動が必要なはずだけど
あとユーザーにadmin資格を追加するのは出来ないの
資格があれば最上位の特権にチェックでいけると思うけど
843:デフォルトの名無しさん
22/05/29 00:44:54.89 Dh5s7alL.net
>>831
長年自分好みのregを作成し続け、発動そのものはパンピーチンパン頭なわりに経験則の積み重ねで上手くいっています
再起動の観点は盲点でした、その辺りも毎回あやふやでしたので再確認しないとですね
regのみでサービスが[無効]へ書き換えられるのを何度か目に
844:している気もしますが 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タスクを別途用意する必要がありそうですね 偶然にも、今までの調整が無駄になっていない様子で嬉しいです
845:デフォルトの名無しさん
22/05/29 01:40:32.51 MBI5r2Hn.net
対象がHKLMならSYSTEMタスクで普通にバッチ呼び出せばいいんじゃないの
っていうかレジストリいじらんでも「sc config DoSvc start= disabled」でいいんじゃないか
846:デフォルトの名無しさん
22/05/29 03:14:11.71 YV7/1RzI.net
文章に顕れている
847:デフォルトの名無しさん
22/05/29 07:42:31.92 Dh5s7alL.net
幾つかあるOS連動のサービスは、それぞれで通常と異なる処置が求められるんですよ・・・
Delivery Optimizationもそのひとつ
今のwin10版はギリ対応可能ながらも、win11の現行はバイパスが削除されたり、これまたさらに面倒な様子で将来が不安
最初に書きましたが、SYSTEM最上位の単純な指定ではタスク上で「正常に」となってもサービス側が受け付けなかったんです
ネット情報だとSYSTEMアカウントに管理者権限が内包されているそうなんですけどね・・・
そこで試行錯誤の上、Administratorsで茶を濁していた→またSYSTEMタスクでやったらいいんじゃね?というのは堂々巡りになってしまいますわー
貴重な意見有難うございました
848:773
22/06/01 01:09:04.33 ixkk/oFB.net
>>775
の続き
7-zip の一時・作業フォルダの指定
Command Line Switches
URLリンク(sevenzip.osdn.jp)
-w Set Working directory
例には、-wc:\temp と書いてあるので、-wZ:/rartmp と書けばよい。
注意点として、-wz:/ の、-wとz:/の間に、空白を入れない事
-wだけを指定して、パスを指定しなかった場合、Windows の一時ディレクトリを使用する。
-wを指定しない場合、解凍元のフォルダを使うみたい
849:デフォルトの名無しさん
22/06/01 06:20:00.46 L0Bj7AY3.net
ウヒ、プヒヒ・・・
reg手段は結局タスク発動のみが空振りするだけで、肝心のプログラムをサービス変更まで繋げることが出来ませんでしたわorz
引数云々の方法や自分が採った記述の成否・不備は定かではありませんが、まあ、涙目
引数の書き方など、ネット上にさえ適切な情報がなくこれは厳しいですな
カリキュラムや資格を取る過程などで自然と学ぶような内容なんですかね・・・そもそもタスクスケジューラへの強い関心が一般的な日本人の中に存在しないらしいです→グーグルロボット検索が拾えるサイトも無い
その涙目でまた振り出しに戻り、システム最上位のbat単純起動からやり直すと、なんと達成(・д・)
システムアカウントに含まれるバックグラウンド動作、最上位に含まれる優先度、そして内包されているらしい管理者権限
regについてもデスクトップから普通にクリックすると再起動無しで値を4へ変更可能でしたので、やはりスケジューラ登録の過程またはサービス仕様に問題があったようですね
何をもって今回、システム最上位が上手く機能したか不思議でなりませんが、そしてこれが今後もしっかり継続的に発動・反映してくれるか分かりませんが、
当面はAdministratorsで生じていた「cmdポップアップによるデスクトップ阻害」を得ることなくタスクが実行でき、サービスの値もきっちり変わり、嬉しく思います
ポップアップさえ無ければ1/1hでスケジューリングし、より高頻度にサービスを強制無効化可能ですので、快適
関連する中で色々と指導して下さった皆さん有難うございましたm(vv)m
850:デフォルトの名無しさん
22/06/01 06:50:47.32 2JSbHFne.net
レジストリ書き込み禁止にすりゃイイんじゃねーの?
知らんけど
851:デフォルトの名無しさん
22/06/01 09:39:14.46 HV/k13ls.net
質問
PIDが正しいとして taskkill /f /pid "%PID%" が失敗するケースって何かありますか?
現在以下のように書いてるのですが無駄だったらバカ臭いなと
taskkill /f /pid "%PID%" || (
echo エラーメッセージ
echo エラーメッセージ
echo エラーメッセージ
echo hoge.exe を終了汁!
pause
exit /b 1
)
852:デフォルトの名無しさん
22/06/01 10:15:17.37 iPR+cHIm.net
URLリンク(docs.microsoft.com)
悲しいことに公式のドキュメントには何も書いてない
指定したPIDのプロセスが存在しない
(PIDを取得した後に正常終了したとかで起こりうる)
プロセスを殺す権限がない
ぐらいのはず
853:デフォルトの名無しさん
22/06/01 11:32:04.25 HV/k13ls.net
>>840
ありがとう
一応エラー判定残しといた方が良さそうですね
854:デフォルトの名無しさん
22/06/01 21:11:06 wWdJLXtL.net
プロセスは非同期だからエラーよりはkillした後の存在の有無を判定した方がいい
855:デフォルトの名無しさん
22/06/02 15:41:59.23 Bch8jX4P.net
>>839
プロセス側にも事情があり間に合わないなどでできないことは多い
live2chはkill、確認を数回繰り返してやっといなくなる
856:デフォルトの名無しさん
22/06/03 03:02:05.90 LtGyf47s.net
ちっきしょーうのAAを貼りたい気分
結局、Delivery Optimizationサービスの0004化はSYSTEM最上位アカウントだとすかしっぺになる
案の定ふりだしやんけwww
なら操作の引数で管理者権限を付与出来ないかと模索するも、ネット情報じゃ無さげ
cmd他、どれもコンテキストメニューなど、OSのUIから指定起動させる例ばかりでコマンド的なものがない
在るとしてもネット上で指南されるような内容ではないらしい
タスク上は「正しく終了しました」が初回のみ出て、それ以降は常に[次回の実行時刻]を更新するのみ=つまり発動さえしていない
該当するプログラム=batを自分でデスクトップから起動→cmd発動でもサービスが変わらず
同条件で右クリ→管理者権限で実行すると余裕の発動・・・
だからそれをタスクのバックグラウンドでやりたいんだよおおおおおおおおおおorz
SYSTEMアカウントはバックグラウンドで動作してくれるけど管理者権限をすかしっぺ、Administratorsアカウントは余裕で発動するけどバックグラウンドじゃない
どうしろっつーねん!SYSTEMアカウントが管理者内包ってのは都市伝説なのかああああ
天才様助けてー!
857:デフォルトの名無しさん
22/06/03 03:30:52 X5NsBG94.net
日記は日記帳へどうぞ
余計な修飾子や個人的感想が多く、読ませる気の無い文章
「わざわざ読んで頂き申し訳ございません」という謙虚さが皆無
長々とおまえの頭悪そうな臭い愚痴駄文を読んでやるほど暇じゃない
質問や説明は具体的、且つ、必要最小限、シンプルに
何なら箇条書きでも良いくらい
言葉は齟齬が生じないよう正確に
「発動」って何やねん
DQN特有の独自定義
まず正しい日本語と用語を学び直せ
858:デフォルトの名無しさん
22/06/03 03:34:09 X5NsBG94.net
> ネット情報じゃ無さげ
無かったら英語でググれ
いくらでも出て来る
859:デフォルトの名無しさん
22/06/03 03:52:08 oul3t3W9.net
他ユーザーのレジストリも弄れるってあっただろ
860:デフォルトの名無しさん
22/06/03 05:56:36.90 LtGyf47s.net
>>846
いつも英字でも検索しているんですけど、OS関連は意外に多く抽出されるものの、何故かタスクスケジューラに関してのみ微妙なんですよね・・・
検索ワードがシビアなのか、昨今不評なグーグル検索ロボットの偏向かもしれません
とはいえ2019年10月からガチテレメトリとなったyahooを利用する気にもなれませんし・・・
それだけ世間的な意味でタスクに関心がないのだと思いますorz
百歩譲って、system最上位アカウントに管理者権限を強制付与出来ればいいんですが
引数もタスクのようなbatに対したコマンドではなく(そもそもタスクの引数に関する指南が超少ない)、batの中で特定のプログラムを管理者権限で実行する方法ばかり見つかって意味無し
自分がデスクトップ上の右クリでbatを直接管理者権限実行させ、サービスの値が0004の状態はsystem最上位アカウントでも定刻の1時間刻みで「正常に終了」となる
0004を0004に上書きするbat(笑)は管理者権限の壁が無いようだw
この場合は次回の予定のみが更新されることもなく、しっかりと前回の実行結果を残す(1時間刻みで)
それが!WUか何かのOS強制により手動(トリガー)と改変されたとき、system最上位アカウントではフリーズしてしまう様子なんですよねorz
何なんだよ[配信の最適化]ゾンビ・・・ほんまキモいわ・・・
861:デフォルトの名無しさん
22/06/03 06:25:04.10 25hReR0t.net
文章力皆無なのに自分ではちゃんと書けてるつもりなんだろうなぁ・・・ほんまキモいわ・・・
862:デフォルトの名無しさん
22/06/03 06:33:18 oU3L37au.net
相手すんなよ...
863:デフォルトの名無しさん
22/06/03 08:41:36.30 r3SSykMX.net
お前の書いていることが省略しすぎたり独自用語か混ざってたりで読むのに疲れる
書いてることからやりたいことの確認をしなきゃいけないし
> Delivery Optimizationサービスの0004化
特定のサービスの挙動を変えたいor止めたいらしいのがググってようやくわかった
0004が何を示してるか未だにわからん
> なら操作の引数で管理者権限を付与出来ないかと模索するも、ネット情報じゃ無さげ
> cmd他、どれもコンテキストメニューなど、OSのUIから指定起動させる例ばかりでコマンド的なものがない
ここでのお前がやりたいことは管理者特権を付与してコマンドラインを実行したい」でいいんだよな?
> タスク上は「正しく終了しました」が初回のみ出て、それ以降は常に[次回の実行時刻]を更新するのみ=つまり発動さえしていない
イベントビューアーで確認したんか?サービスの動作ログだよな?
864:デフォルトの名無しさん
22/06/03 08:52:40.64 rHBirywu.net
cmdに管理者特権とかいう概念はないのでpowershellを経由するしかない。runasでググれ。
プロセスが管理者特権で動いているかはタスクマネージャーから確認できる(表示列を追加する必要があるが)
サービス関連は触ったことないから知らんが、cmdでいくら探してもないならpowershellから動かすしかないんじゃない?
865:デフォルトの名無しさん
22/06/03 10:14:29.24 84QuKkvW.net
そもそもの方法論がもうね
そこまでバカでそこまで必死なんだったらローカルグループポリシー使えよっていう
HomeならPro化すればいいだけなんだから
866:デフォルトの名無しさん
22/06/03 10:34:45.22 CIdSIcJr.net
動詞を指定して実行する事は他の言語でもできるけど、
powershell程には簡潔に書けないからね
867:デフォルトの名無しさん
22/06/03 10:42:06.97 CIdSIcJr.net
ちな0004はREG_DWORDの値4で場所的にそのサービスの無効を意味してる
こういうの知らないなら何のこっちゃだろうな
868:デフォルトの名無しさん
22/06/03 10:52:22.42 CIdSIcJr.net
一見高度な事の様で大した中身でもなく、文体が気持ち悪いから知ってる人がいてもスルーされる。
案の定相手にしてるのはルビキチだけ
869:デフォルトの名無しさん
22/06/03 14:11:38.16 LtGyf47s.net
くっそワロた・・・
0004さえも理解に乏しい、知識量や発想力の人達へ向けて私は質問していたのだろうか^^;
runasなどもとっくに調べているし、グルポは超初期に実行済みで、Delivery Optimizationは突破してくるから今日に至っている話なわけで
こういうのも過去に書いているんですけど、虫食いで読んで適当に回答している方や、そもそもの知識量・発想・知能的な面で素人の私より劣っていそうな人が
いえ、これ以上は暴言になりそうですし省略しますわ
・・・バッチ専用スレとのことで、私も皆さんへ過大評価や虚像を抱いていたのかもしれません
powershell、完全に時代錯誤な私の知識・技量では厳しかったものの、これを機に学んでみましょうかね
batの代わりにps1か・・・自分に使いこなせるか不安ですorz
皆さん数々の意見を有難うございました
870:デフォルトの名無しさん
22/06/03 14:54:57.72 oCwyAce/.net
ごめんあんまり読んでないんだけど、対話が求められて自動化できない?のならdoskeyのマクロは試した?
GUIでのダイアログだったら無理だけど
871:デフォルトの名無しさん
22/06/03 16:20:46.55 gMGR7N6s.net
そもそも対象のサービスが無効にできない (ようにみえる) 類のものなのではないか?
872:デフォルトの名無しさん
22/06/04 00:01:31.51 qz14Jeu3.net
AWS の本にも、Windows サーバーの記述は、1% ぐらいしかない。
システムで、Windowsを使う香具師がいない
ファイル共有・Active Directory・タスクスケジューラ・Remote Desktop、
バッチ・コマンドプロンプト・PowerShell ぐらいが、簡単に紹介されているだけ
ほとんどがDocker を使う。DockerはLinuxの技術。
だから、Windows 10のWSL2 で、Linuxを使えるようにしている
873:デフォルトの名無しさん
22/06/04 03:03:41.49 nWFOJiT2.net
ソフト板のVLCスレで暴れてたガイジに似てるな
874:デフォルトの名無しさん
22/06/04 03:16:47.38 4DyQyO7v.net
SYSTEMアカウントで書き替えたら再起動が必要なんじゃないの?
875:デフォルトの名無しさん
22/06/04 14:29:54.55 bgz5gZEc.net
サービスの無効化なんか sc config でできるだろ
なんでわざわざレジストリを直接編集しなきゃいけないんだ?しかもSYSTEMで
URLリンク(docs.microsoft.com)
そもそもDelivery Optimizationを無効化したい理由は何なんだ
876:デフォルトの名無しさん
22/06/04 15:01:48 M0jEQKIa.net
ID:LtGyf47s みたいに要点を簡潔にまとめられず矢鱈とグダグダ書いちゃう人って何かそういう頭の障害でもあるの?
言葉遣いも変だし外国人なのかな
877:デフォルトの名無しさん
22/06/05 07:44:59.76 7J0TRviH.net
簡単なことを難しく言うやつを世間一般ではhorse and deerという
878:デフォルトの名無しさん
22/06/05 12:38:26.56 Z2t62Jo8.net
わざとか?
879:デフォルトの名無しさん
22/07/09 18:11:33.95 qkG/5q2Z.net
以下のようにUNIXライクにFILESをパイプしてfindstrコマンドに渡すことは不可能でしょうか?
@echo off
setlocal enabledelayedexpansion
set LF=^
for /f "tokens=* delims=" %%x in ('dir /w') do set FILES=!FILES!%%x!LF!
@rem ↓FILESをパイプにしてfindstrコマンドの入力にしたい
for /f "tokens=* delims=" %%x in ('echo !FILES! ^| findstr "Siki"') do set TEST=%%x
pause
endlocal
exit /B 0
880:デフォルトの名無しさん
22/07/09 18:16:36.89 GjOGWrlu.net
不可能です
881:デフォルトの名無しさん
22/07/09 18:31:41.95 qkG/5q2Z.net
不可能とのことなのでファイルに一旦出力することにしました
@echo off
setlocal enabledelayedexpansion
set LF=^
for /f "tokens=* delims=" %%x in ('dir') do set FILES=!FILES!%%x!LF!
echo !FILES! > aaa.txt
for /f "tokens=* delims=" %%x in ('type aaa.txt ^| findstr "Siki"') do set TEST=%%x
echo %TEST%
pause
endlocal
exit /B 0
882:デフォルトの名無しさん
22/07/09 18:32:57.07 qkG/5q2Z.net
でもこの例ならdir | findstrでいいですね…
883:デフォルトの名無しさん
22/07/09 18:38:08.89 qkG/5q2Z.net
本当にやりたかったことは
curlコマンドで某APIでJSONデータ取得
JSONデータをjqコマンドで値取得
取得した値からfindstrコマンドで余計な行を除去
としたかったのですが、某APIが叩ける回数が限られているため
JSONデータを取得する回数を抑えるために一旦配列として保持したかったのです
884:デフォルトの名無しさん
22/07/09 18:41:27.79 LLXk/I9Y.net
>>871
真面目な話そこまでやりたいならPowerShellとか使った方が楽だと思うぞ...
885:デフォルトの名無しさん
22/07/09 18:49:52.57 qkG/5q2Z.net
>>872
実はやりたいことがこれ以上の事は無いのでバッチレベルで可能だろうと思ったのですが
配列?の使い方がよく分からず質問しました
ひとまず一時ファイル出力して使いまわす形にしようと思います
ちなみに某APIとはスマートリモコンNature Remoの事です