[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 07/14 00:08 / Filesize : 285 KB / Number-of Response : 1009
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

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



1 名前:デフォルトの名無しさん mailto:sage [2022/09/14(水) 20:04:01.36 ID:XL8H98jz.net]
拡張子が .cmd または .bat のバッチファイルのスクリプティング(プログラミング)に関わる
質問,テクニック(JScript,Perl等の埋め込みなど含む),関連情報のためのスレです

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

過去スレ
%14 https://mevius.5ch.net/test/read.cgi/tech/1597442426/
%13 https://mevius.2ch.net/test/read.cgi/tech/1542779527/
%12 https://mevius.2ch.net/test/read.cgi/tech/1489207631/
%11 https://echo.2ch.net/test/read.cgi/tech/1424858999/
%10 https://peace.2ch.net/test/read.cgi/tech/1374205515/
%9 https://toro.2ch.net/test/read.cgi/tech/1335015478/
%8 https://toro.2ch.net/test/read.cgi/tech/1315844420/
%7 https://hibari.2ch.net/test/read.cgi/tech/1298873550/
%6 https://hibari.2ch.net/test/read.cgi/tech/1277465356/
%5 https://pc12.2ch.net/test/read.cgi/tech/1242268171/
%4 https://pc12.2ch.net/test/read.cgi/tech/1229955189/
%3 https://pc11.2ch.net/test/read.cgi/tech/1217860043/
%2 https://pc11.2ch.net/test/read.cgi/tech/1197881068/
【.cmd】 バッチファイルスクリプト %1 【.bat】
https://pc11.2ch.net/test/read.cgi/tech/1178281991/
バッチファイルプログラミング 3.bat
https://pc11.2ch.net/test/read.cgi/tech/1148485555/
バッチファイルプログラミング 2.bat
https://pc8.2ch.net/test/read.cgi/tech/1104911889/
バッチファイルプログラミング質問スレ
https://pc5.2ch.net/test/read.cgi/tech/1040614686/

9 名前:デフォルトの名無しさん mailto:sage [2022/09/26(月) 01:01:52.99 ID:3mhNpNjH.net]
for文の展開で解釈が一回多く入るから1回目の解釈後も環境変数として残すようにする
%%hoge%% → %hoge% → 環境変数hogeの中身に置換

上の方法はトリッキーなので正規には遅延環境変数展開を使う(setlocal /?)
setlocal EnableDelayedExpansion

10 名前:デフォルトの名無しさん [2022/09/26(月) 01:47:37.41 ID:ou4YDIZU.net]
>>9
ありがとうございます!できました!

setlocal enabledelayedexpansion
forループの初め

set /a hoge1=%random%
set /a hoge2=%random%
set /a hoge3=!hoge1!+!hoge2!

echo !hoge3!
forループの終わり


という風にしたら、動きました。
デフォルトではforループ全体が一気に読み込まれるので、変数への代入が実行される前に変数の内容が確定してしまうという仕様なんですね。それを回避するために、!を付けて展開遅延変数を用いる、ということですね。

ただ、ランダムにしたはずなのに、毎回同じ値が表示されますね…
何故…

11 名前:デフォルトの名無しさん mailto:sage [2022/09/26(月) 01:54:43.87 ID:yGyQXERn.net]
%random%
じゃなくて
!random!

12 名前:デフォルトの名無しさん mailto:sage [[ここ壊れてます] .net]
そういえば、181系って、完全に揃った編成ってあったんだろうか?
台車違いの編入車や、485系仕様の編入車・新製車とかで、
いつも凸凹でちぐはぐだったイメージしかない

もし、153系の前面が165系の塗りになったら
足回りとか見慣れた目にはやっぱり違和感あるんだろうなぁ
クハ164は塗装変更しないで正解だったと思うわ

13 名前:デフォルトの名無しさん mailto:sage [[ここ壊れてます] .net]
誤爆失礼!

14 名前:デフォルトの名無しさん mailto:sage [2022/09/26(月) 11:49:53.74 ID:7oxCYWvG.net]
>>10
set /a hoge1=!random!, hoge2=!random!, hoge3=hoge1+hoge2

set /a は , 区切りで複数の式を指定可
環境変数は展開せずとも計算可能。その場合存在しない変数名は0として扱われ、展開した場合(多くはエラーになる)とは違ってくるので意図した計算になっていない事に気付き難い事に注意が必要
random などの特殊環境変数は環境変数としては存在せず、展開時に代入されるので展開が必要

setlocal enabledelayedexpansion
for /L %%i in (1,1,4) do (
set /a a=!random!, b=!random!, c=a+b
echo !c!
)
pause

こんな風にも書ける
set /a c=(a=!random!)+(b=!random!)
echo !a! + !b! = !c!

「遅延環境変数」という名称はそういう変数が別にあるのかと紛らわしくて良く無いと思うわ
環境変数
特殊変数
標準展開、事前展開、%展開 (展開されてから構文解析)
遅延展開、!展開 (構文解析されてからコマンド実行直前に展開)
用いるなら「環境変数の遅延展開」だろう

15 名前:デフォルトの名無しさん mailto:sage [2022/09/26(月) 12:58:23.71 ID:3mhNpNjH.net]
英語だと
delayed expansion
delayed variable expansion
説明文的には
Enables the delayed environment variable expansion
Setting EnabledDelayedExpansion will cause each variable to be expanded at execution time rather than at parse time

16 名前:デフォルトの名無しさん mailto:sage [[ここ壊れてます] .net]
set /a a=random
は0なんやな
一般変数と処理が違うんだ

17 名前:デフォルトの名無しさん [2022/09/26(月) 21:36:40.64 ID:ou4YDIZU.net]
>>11
>>14

ありがとうございます。
うまく動きました!



18 名前:デフォルトの名無しさん mailto:sage [2022/09/28(水) 11:14:01.39 ID:RG22wEyx.net]
>>16
> 一般変数と処理が違うんだ
違わない

set a=
set random=
set /a b=a, c=random
echo %b%, %c%, %random% #set /a では環境変数として定義されていない文字列は0として扱われる
set a=1
set random=1
set /a b=a, c=random
echo %b%, %c%, %random% #特殊変数は環境変数として定義されると環境変数が優先され特殊変数としては機能しなくなる
set random=
echo %random% #環境変数を削除すれば元通り
pause

19 名前:デフォルトの名無しさん mailto:sage [2022/09/28(水) 12:04:21.93 ID:Cg5haYXb.net]
>>16
set /a a=%random%

20 名前:デフォルトの名無しさん mailto:sage [2022/09/29(木) 13:35:46.81 ID:ezl+1hvw.net]
確かに違わないんだけど、どう違わないのか勝手に補足。

set /?に基づくここでの用語定義:
・「環境変数」(一般変数)
   … 値が一旦決まれば勝手には値が変わらない普通の環境変数。Windowsの機能がベース。
・「動的な環境変数」(dynamic environment variables)(特殊変数)
   …「RANDOM」「ERRORLEVEL」など。cmdの独自機能。

仕様仮定(私の認識):
・set /a での名前だけで値を参照できる機能は「環境変数」だけ対象としている。
・cmdの構文解釈による「%〜%」で値を参照できる機能は
 「環境変数」と「動的な環境変数」を対象としている。

以上を踏まえたうえで
「set /a a=random」の「random」は「動的な環境変数」ではなく「環境変数」であり、
『他の「環境変数」の扱い』と「違わない」。

「一般変数と処理が違う」のはcmdによる構文解釈の「%〜%」での扱い。

また、「set /a a=%random%」での「%random%」は
まずcmdの構文解釈により「動的な環境変数」として「123」のように展開され
「set /a a=123」となり、setには「環境変数」すら使われていないように見える。

※cmdの内部コマンドである「set」からは「動的な環境変数」も見えてもいいのにね。
 同じく内部コマンドの「if」からは見えてるみたいだし。

21 名前:デフォルトの名無しさん [2022/10/05(水) 15:17:30.50 ID:NmGDxxah.net]
質問です。
ファイルのフルパスを表示するときに、
このコマンド使っていますよ、という意味で
rem %0
echo %0
と買いているんですが、remの方の変数まで展開されてしまいます。
展開させずに文字列のまま表示するにはどうしたらよいでしょうか?

22 名前:デフォルトの名無しさん mailto:sage [2022/10/05(水) 15:28:26.09 ID:yuT90fin.net]
rem %%0

23 名前:デフォルトの名無しさん [2022/10/05(水) 16:34:14.38 ID:NmGDxxah.net]
>>22
出来ました!ありがとうございます。

24 名前:デフォルトの名無しさん [2022/10/08(土) 17:33:40.37 ID:zk6uj/6h.net]
C:\test>"C:\test\app.exe"
というコマンドを間違えて実行したらapp.exeが0バイトに書き変わったのですがなぜでしょうか

25 名前:デフォルトの名無しさん mailto:sage [2022/10/08(土) 17:43:53.04 ID:f2a8Snt9.net]
空の標準出力をリダイレクトで書き込んでるからだろう

26 名前:デフォルトの名無しさん mailto:sage [2022/10/08(土) 17:48:05.02 ID:R/0NVeNc.net]
なぞなぞじゃね?

27 名前:デフォルトの名無しさん mailto:sage [2022/10/08(土) 18:00:30.98 ID:zk6uj/6h.net]
コマンドプロンプトからバッチファイルにコピペしたら間違えて作業フォルダが付いてしまって
何かのコマンドなのでしょうか



28 名前:デフォルトの名無しさん mailto:sage [2022/10/08(土) 18:59:40.31 ID:f2a8Snt9.net]
オカルトかな?
ん?お前のパソコン何かおかしくね?

29 名前:デフォルトの名無しさん mailto:sage [2022/10/08(土) 21:15:53.37 ID:4RiXxOsU.net]
>>27
日本語でOK

30 名前:デフォルトの名無しさん mailto:sage [2022/10/08(土) 21:20:11.87 ID:NCKRr8hU.net]
エラーになってもリダイレクトは実行されちゃうんだな
バグとちゃうか

31 名前:デフォルトの名無しさん mailto:sage [2022/10/08(土) 21:31:19.08 ID:bRwGYufv.net]
プロンプトまでバッチにコピペするなよ

32 名前:デフォルトの名無しさん mailto:sage [2022/10/09(日) 11:18:46.47 ID:yk0ofCIK.net]
>>30
指定された実行対象ファイルがない、
というのは実行時エラーなので(構文エラーではない)
そのエラーメッセージをファイルリダイレクトして記録できる事は有益。
なのでバグ(仕様バグ)ではないと思われる。

33 名前:デフォルトの名無しさん mailto:sage [2022/10/09(日) 12:38:18.26 ID:r7gKIzvL.net]
一貫性のある動きだよな
エラー出力は欲しいけど標準出力はリダイレクト自体をなかったことにしてくれというのは無理がある
そもそもリダイレクト先がログファイルなら気にも留めないような話
びっくりする理由があるとしたらexeにリダイレクトしても容赦なく書き換えられるという点で、コマンドラインはそういう点で結構慈悲がない
ある程度はパワーユーザー向けという位置付けなので気をつけるしかない

34 名前:デフォルトの名無しさん mailto:sage [2022/10/12(水) 04:44:03.67 ID:Jko2ebMR.net]
window-position異なる位置のバッチをそれぞれ作ってるのですが
bat2個目を起動すると1個目の起動したバッチにつられてカスケード起動します
何か対処方法ありますでしょうか?

35 名前:デフォルトの名無しさん mailto:sage [2022/10/30(日) 06:52:23.05 ID:i1fpLCEI.net]
zipファイルに書き込むコマンドはありますか?
copy foo.txt bar.zip
とやっても「bar.zipに上書きしますか?」になるだけなんですけど
上書きがしたいんじゃなくアーカイブしたいんです。

36 名前:デフォルトの名無しさん mailto:sage [2022/10/30(日) 08:16:49.21 ID:oF72FRjI.net]
7za.exe

37 名前:デフォルトの名無しさん mailto:sage [2022/10/30(日) 17:16:25.85 ID:RObFZ+1A.net]
compressコマンドはcabだけだったかな?
pwsh -c "gh compress-archive"参照



38 名前:デフォルトの名無しさん mailto:sage [2022/10/30(日) 20:28:18.19 ID:WT6dub7d.net]
explorerで操作すると書き込めるからコマンドありそうな気がする

39 名前:デフォルトの名無しさん mailto:sage [2022/10/30(日) 20:49:57.93 ID:JhK1ASYS.net]
zipコマンドでググれ

40 名前:デフォルトの名無しさん mailto:sage [2022/10/31(月) 15:34:40.68 ID:aCuyX04T.net]
pwsh -c "Get-help -name compress-archive"

41 名前:デフォルトの名無しさん mailto:sage [2022/10/31(月) 22:51:09.43 ID:HZxZgtz6.net]
>>38
Explorerと同じ圧縮処理は、ExplorerのCOMオブジェクト(Shell.Application)を操作する事でできる。
確か、正式に提供した機能ではないので動作は保証しない、非推奨、みたいな扱いだった気が。

42 名前:デフォルトの名無しさん mailto:sage [2022/11/02(水) 15:48:21.33 ID:ZBNaiNsJ.net]
質問失礼します。
ファイル名の一部の文字列(例:4文字目から8文字目まで)を一括削除するバッチを作りたいのですが…
[例]a1b2c3d4e5.m4a→a1b2e5.m4a
検索の結果、先頭4文字を削除するバッチ(下記)を見つけたので、アレンジしたいのですが、その方法がわからずにおります。
アレンジ方法がわかる方、もしくは別の方法でも構いませんので、教えて頂けないでしょうか?
------------------------
for %%i in (*) do (
if not "%%i"=="%~nx0" (
set vv=%%i
call ren %%i %%vv:~4%%
)
)
------------------------
参考になりそうなURLでも助かります。

43 名前:デフォルトの名無しさん mailto:sage [2022/11/02(水) 16:00:09.07 ID:ZBNaiNsJ.net]
44>>
スミマセン間違えました。2行目
[誤]例:4文字目から8文字目まで
[正]例:5文字目から8文字目まで

44 名前:デフォルトの名無しさん mailto:sage [2022/11/03(木) 03:42:12.99 ID:lhbjAvOX.net]
rem ファイル名を変数に入れて
set FILENAME=a1b2c3d4e5.m4a
rem 4文字目から8文字目まで削除
set MODIFYNAME=%FILENAME:~0,4%%FILENAME:~8%
rem リネーム
ren %FILENAME% %MODIFYNAME%

45 名前:デフォルトの名無しさん mailto:sage [2022/11/03(木) 06:22:30.68 ID:7S7IyYLz.net]
@echo off
:x
set "a=%~n1"
ren "%~1" "%a:~0,4%%a:~8%%~x1"
shift
if not "%~1"=="" goto x

ファイル名やフォルダ名が英数字だけならこれでいけるんじゃね

46 名前:デフォルトの名無しさん mailto:sage [2022/11/03(木) 13:02:59.28 ID:yr3S2O5F.net]
>>43
> 5文字目から8文字目まで削除
set /?
1~4
%vv:~0,4%
9~
%vv:~8%

> set vv=%%i
> call ren %%i %%vv:~4%%
set "vv=%%~ni"
call ren "%%~i" "%%vv:~0,4%%%%vv:~8%%%%~xi"

%%~ni %%~xi のnとかxは for /?
なるべくcall使わない方が速いのでファイル名に !文字が無いなら setlocal enabledelayedexpansion して遅延展開使え
対象ファイル数が多くないとかで引数の文字数制限に掛からないのなら >>45 のやり方が入れ子にならず良い

47 名前:デフォルトの名無しさん mailto:sage [2022/11/03(木) 13:10:19.17 ID:P2O5CHdk.net]
東京都、富山県、ネバダ州、東京都、東京都、雲南省、ネバダ州、東京都、みたいな数百行のfindの標準出力があって何種類の出力があるのかだけ欲しいんだけど何かスマートな方法ないですか



48 名前:デフォルトの名無しさん mailto:sage [2022/11/03(木) 14:00:45.43 ID:sS4Fs93N.net]
スマートな方法なんてバッチに無いから別のスクリプトあたれ
バッチでやるなら以下みたいな感じに一意なものだけ書き出して最後に行数見るか書き出した回数を数えるか
copy nul $tmp.txt
for /f %%a in (findの結果とやら) do find "%%a" $tmp.txt >nul || >>$tmp.txt echo %%a
for /f "delims=:" %%a in ('findstr /n "^" $tmp.txt') do set n=%%a
echo %n%

新大阪と大阪みたいに項目名を含む別項目があるならfindstr /r /c:"^%%a$"

49 名前:デフォルトの名無しさん mailto:sage [2022/11/03(木) 15:21:55.26 ID:PVTx0HrP.net]
それほどスマートじゃないけどWSHを(batに埋め込んで)使う方法
(WSHには連想配列の要素数をカウントするものがないのでループで回してカウント)
(powershellと使う方法がいいかもしれないがpowershellはイニシャルコストが大きいのでよく使う人向き)
@if (0)==(0) echo off
cscript //nologo /e:jscript "%~f0" < data.txt
rem findstr "." data.txt|cscript //nologo /e:jscript "%~f0"
goto :eof
@end
var table={}, data, count=0;
while(!WScript.StdIn.AtEndOfStream) {
data = WScript.StdIn.ReadLine();
if (data.length) { table[data] += 1; WScript.Echo(data); }
}
for (i in table) { count++; }
WScript.Echo(count);

50 名前:デフォルトの名無しさん mailto:sage [2022/11/03(木) 15:28:23.28 ID:/STCGL2q.net]
46様、47様、48様
>>42です。
早速のご回答&アドバイス、ありがとうございました。
どの方法でもうまくrenameでき、とても参考になりました。
ただ、for文に組込むと、1つ目のファイルだけ、
2回処理が実行されてしまいます。
例えば、以下のバッチ
-------------------------------------------
for %%i in (*.m4a) do (
set "vv=%%~ni"
call ren "%%~i" "%%vv:~0,4%%%%vv:~8%%%%~xi"
)
-------------------------------------------
を実行すると、
a1234567890a.m4a→a123.m4a ←2回
b1234567890b.m4a→b123890b.m4a
c1234567890c.m4a→c123890c.m4a
となってしまいます。
これは、私のfor文の使用法に誤りがあると考えられ
ますので、自力解決すべく調べているのですが…
参考になりそうなサイトなどご存知でしたら、教えて頂けませんでしょうか?
何度も申し訳ありません。

51 名前:デフォルトの名無しさん mailto:sage [2022/11/03(木) 15:30:10.92 ID:IcpXc6LC.net]
powershell -Command "('東京都','富山県','ネバダ州','東京都','東京都','雲南省','ネバダ州','東京都' | Sort-Object | Get-Unique ).Count"

52 名前:デフォルトの名無しさん mailto:sage [2022/11/03(木) 15:31:53.88 ID:IcpXc6LC.net]
findの標準出力ってことはこうだな
powershell -Command "(find 引数 | Sort-Object | Get-Unique ).Count"

53 名前:デフォルトの名無しさん mailto:sage [2022/11/03(木) 15:38:59.81 ID:PVTx0HrP.net]
あ、+= 1には意味なかったな

54 名前:デフォルトの名無しさん mailto:sage [2022/11/03(木) 16:10:12.19 ID:7S7IyYLz.net]
>>50
だから for (*) do ren ~ はお勧めしない
同じファイルに複数回処理する可能性がある
ren を move にして別のフォルダに送れ
!文字がある時は for の内部で遅延展開設定、解除しろ

55 名前:デフォルトの名無しさん mailto:sage [2022/11/03(木) 16:37:27.42 ID:7S7IyYLz.net]
for /f "delims=" %%i in ('dir *') do (ren ~ でもいいかな

56 名前:デフォルトの名無しさん mailto:sage [2022/11/03(木) 16:40:46.92 ID:7S7IyYLz.net]
すまんdir/bだ

57 名前:デフォルトの名無しさん mailto:sage [2022/11/03(木) 17:36:43.52 ID:sJbSZrhN.net]
cmd には

split | sort | uniq | wc

みたいなコマンドはないの?



58 名前:デフォルトの名無しさん mailto:sage [2022/11/03(木) 17:41:34.26 ID:7S7IyYLz.net]
ない

59 名前:デフォルトの名無しさん mailto:sage [2022/11/03(木) 18:18:22.55 ID:P2O5CHdk.net]
皆さんありがとうスマートっていうか単に速度の問題なのでどれが速いか競走させてみます

60 名前:デフォルトの名無しさん mailto:sage [2022/11/03(木) 18:56:34.58 ID:NbsIPyEs.net]
>>57
少なくとも標準では無いね
まあ使いたいならwslに行くか同等の機能をPowerShellで書くとかかな

61 名前:デフォルトの名無しさん mailto:sage [2022/11/03(木) 23:17:13.75 ID:0ov2k6Uz.net]
>>47
PowerShellなりでやる内容だとは思うが、どうしてもバッチでやるなら
入力データ(findの結果)をソートして、データの変動を検知したらカウントアップ、でもできる。
ただし入力データに記号(メタキャラ)が含まれる場合はうまく動かない可能性あり。

setlocal EnableDelayedExpansion
set Count=0
set PrevLine=
for /f "delims=" %%A in ('find なんたら ^| sort') do (
if "%%A" neq "!PrevLine!" set /a Count+=1
set "PrevLine=%%A"
)
echo,!Count!

62 名前:デフォルトの名無しさん mailto:sage [2022/11/12(土) 20:19:55.55 ID:/WV4ttu0.net]
set /p で異体字セレクタ(IVS)を入力できない
IMEパッドが作動しない
いちいちメモ帳からコピペ入力するしかないのか
表示も化けてるし…

63 名前:デフォルトの名無しさん mailto:sage [2022/11/12(土) 20:44:49.08 ID:/WV4ttu0.net]
IMEパッドはダメなので、文字コード+F5 でいけた

64 名前:デフォルトの名無しさん mailto:sage [2022/11/13(日) 19:33:26.85 ID:sU7z5EJX.net]
>>62
Windows Terminal
IMEパッド可
異体字(IVS)表示可(対応フォントのみ)

cmdの標準ターミナルは仕様が古いまま放置されている

65 名前:デフォルトの名無しさん mailto:sage [2022/11/17(木) 22:22:21.92 ID:k+rrgD4B.net]
conhostも放置されずに結構手がはいってる
𠮷とか🐕とかのサロゲートペアも表示されるようになったし
エスケープシーケンスで画面のサイズが変えられるようになった

> sigcheck c:\windows\system32\conhost.exe
Sigcheck v2.71 - File version and signature viewer
Copyright (C) 2004-2018 Mark Russinovich
Sysinternals - www.sysinternals.com

c:\windows\system32\conhost.exe:
Verified: Signed
Signing date: 7:59 2022/11/05
Publisher: Microsoft Windows
Company: Microsoft Corporation
Description: Console Window Host
Product: Microsoftョ Windowsョ Operating System
Prod version: 10.0.22621.675
File version: 10.0.22621.675 (WinBuild.160101.0800)
MachineType: 64-bit

66 名前:デフォルトの名無しさん mailto:sage [2022/11/18(金) 07:02:24.39 ID:LiWOBYzs.net]
>>64 サンクス
入力時に文字化けするので確認できない
echoで表示されるが文字の両側のスペースが気持ち悪い
でも標準画面よりはマシかな。おれは使わないけど

67 名前:デフォルトの名無しさん mailto:sage [2022/11/21(月) 20:53:34.41 ID:+ccbL4tM.net]
カーソルの位置を知る方法はありますか?

for /F %%E in ('cmd ^< nul /D /K prompt $E') do set esc=%%E
set /P CPR=%esc%[6n

だとenterキー待ちで止まります。enterを押せばCPRに結果が入りますが
押さずに結果を得る方法はないでしょうか。
あるいはまったく別の方法でカーソルの位置を知る方法はないでしょうか。



68 名前:デフォルトの名無しさん mailto:sage [2022/11/21(月) 21:55:41.71 ID:o6gng8CJ.net]
手段の拘りなければこんなんとかで。
powershell -nop -c "[Console]::CursorTop; [Console]::WindowTop;"

69 名前:デフォルトの名無しさん mailto:sage [2022/11/22(火) 09:23:33.75 ID:IBEEH7ii.net]
過去にも似たような話があったなあ
何かでenterキーの入力を省略したいって
結局、うまい方法が見つからない

70 名前:69 mailto:sage [2022/11/22(火) 21:44:34.08 ID:CBUeGsgY.net]
なるほど情報ありがとう
PowerShell なら [console]::CursorLeft と [console]::CursorTop で取得できるのを確認しました。
PowerShellを呼ぶか全部PowerShellで書くか悩ましい…

71 名前:デフォルトの名無しさん mailto:sage [2022/11/25(金) 01:48:24.17 ID:is72b8Mh.net]
コンソールの座標が必要になるってことはGUIを検討すべき時がきたんじゃないか
コンソールの画面でいくらがんばっても大したことできんよ

72 名前:デフォルトの名無しさん mailto:sage [2022/11/25(金) 20:54:30.19 ID:YIxTypne.net]
そんなたいしたことじゃなくてね
画面に合わせた出力がしたくて行数を知りたかっただけ

mode con は WindowsTerminal ではいいけど conhost ではうまくない
PowerShellで得られる [console]::WinndowHeight が欲しいのに
[console]::BufferHeight が返ってきてしまう
それなら %esc%7%esc%[999;999H%esc%[6n%esc%8 みたいなエスケープシーケンスで
カーソル位置を使って調べようかと思って

で質問した後で気づいたけど
代替画面バッファーに切り替えて mode con すればいいのな
まあ PowerShell 一発で取れるなら楽だしもういいかなって
でも他の方法があるなら知りたい

73 名前:デフォルトの名無しさん mailto:sage [2022/11/27(日) 05:02:29.30 ID:IKV/PDeN.net]
powershellなんぞ使わずとも行数ごとき得る方法はあるぞ
昔はpowershell自体無かったんだからな
まあ具体的には思い出せないんだがぐぐれば出てくるだろ

74 名前:デフォルトの名無しさん mailto:sage [2022/11/27(日) 11:26:11.98 ID:nWgXfjD8.net]
いくらぐぐってもファイルの行数を調べるとか画面の行数を変更するしか見つからない…
行数ごときというならぜひ思い出して教えてください

75 名前:デフォルトの名無しさん mailto:sage [2022/11/27(日) 12:43:26.54 ID:WeJVO7HI.net]
powershell (get-host).ui.rawui.windowsize
powershell (get-host).ui.rawui.windowsize.height
powershell (get-host).ui.rawui.windowsize.width

76 名前:デフォルトの名無しさん mailto:sage [2022/11/27(日) 17:27:16.98 ID:fMz//05T.net]
mode か?

77 名前:デフォルトの名無しさん mailto:sage [2022/11/27(日) 18:49:52.00 ID:WeJVO7HI.net]
for /f "tokens=3" %%i in ('reg query HKCU\Console /f WindowSize^|findstr WindowSize') do set h=%%i
set /a h=%h:~0,-4%
echo %h%



78 名前:デフォルトの名無しさん mailto:sage [2022/11/27(日) 19:34:17.80 ID:fMz//05T.net]
Consoleにサブキーがいっぱいあるな

79 名前:デフォルトの名無しさん mailto:sage [2022/11/27(日) 21:48:39.87 ID:nWgXfjD8.net]
PowerShellを使う方法もmodeを使う方法も >>72 で既出
それ以外の方法があったと >>73 は言ってるようなのだが…
なお reg を使う >>77 は今のウインドウのサイズじゃないから失格かなあ

80 名前:デフォルトの名無しさん mailto:sage [2022/11/28(月) 00:00:04.17 ID:so4XQ+4A.net]
more で画面毎に止まってくれるが
あれはどこから画面行数情報を得ているのだろう

81 名前:デフォルトの名無しさん mailto:sage [2022/11/28(月) 23:31:47.71 ID:YeZSlVdS.net]
PowerShell を使っていいなら

for /F "tokens=2 delims=[;" %%L in ('pwsh -nop -c "[console]::Error.Write(\"`e7`e[999^;999H`e[6n`e8\"); [console]::Error.Flush(); do { $k = [console]::ReadKey().KeyChar; } until ($k -eq \"R\"); \"\""') do echo LINES: %%L

Windows PowerShell だと `e が使えないからもう少しごちゃっとする

82 名前:デフォルトの名無しさん mailto:sage [2022/11/29(火) 22:16:00.02 ID:noJ3pHan.net]
ぐぐって出てこないならもうpowershell使うしかないんじゃね
>>81お前こんな糞コード晒す前にちょっと考えろよ頼むよ白けるわ

83 名前:デフォルトの名無しさん mailto:sage [2022/11/29(火) 22:25:15.99 ID:WKccTgje.net]
ウインドウの行数を調べる方法まとめ

mode(とcmd)を使う方法
for /F %%E in ('cmd ^< nul /D /K prompt $E') do (
  set < nul /P =%%E[?1049h
  set LINES=
  for /F "tokens=2 delims=:" %%L in ('mode con') do (
    if not defined LINES set /A LINES=%%L
  )
  set < nul /P =%%E[?1049l
)

PowerShellを使う方法
for /F %%L in ('pwsh -nop -c "[console]::WindowHeight"') do set LINES=%%L

エスケープシーケンス(とPowerShell)で頑張る方法
for /F "tokens=2 delims=[;" %%L in ('pwsh -nop -c "[console]::Error.Write(\"`e7`e[999^;999H`e[6n`e8\"); [console]::Error.Flush(); do { $k = [console]::ReadKey().KeyChar; } until ($k -eq 'R')"') do set LINES=%%L

84 名前:デフォルトの名無しさん mailto:sage [2022/11/29(火) 23:27:39.60 ID:F0R68kvV.net]
エスケープシーケンスはwin10以前だとダメじゃなかったっけ
ansi.sysがwin8.1までは組み込まれない

85 名前:デフォルトの名無しさん mailto:sage [2022/12/01(木) 15:35:07.57 ID:a9edrtS0.net]
set d=%DATE:/=%
とやった後、1日前の日付にしたいのですがうまい方法・コマンドないですか

20221201 -> 20221130
20221202 -> 20221201
20220101 -> 20211231
20200301 -> 20200229

うるう年と月末年末に気を付けてif文で分けるしかないのかなと思いますが
case文ってコマンドプロンプトにないですよね

86 名前:デフォルトの名無しさん mailto:sage [2022/12/01(木) 15:58:56.25 ID:Z3Gzq7Gr.net]
gotoがある

87 名前:デフォルトの名無しさん mailto:sage [2022/12/01(木) 19:38:25.34 ID:gTSnhqIH.net]
計算すれば出来るんだろうけど面倒くさいのでPowerShell使ってる



88 名前:デフォルトの名無しさん mailto:sage [2022/12/01(木) 21:59:03.06 ID:CyN7Asjt.net]
powershell -c "(get-date).adddays(-1).tostring('yyyyMMdd')"

89 名前:デフォルトの名無しさん mailto:sage [2022/12/01(木) 22:14:49.13 ID:M8gPga1Y.net]
もうここpowershellスレにしたら

90 名前:デフォルトの名無しさん mailto:sage [2022/12/01(木) 22:30:45.79 ID:CyN7Asjt.net]
過去スレにBATがあったと思って探してみた
何故かそのスレは過去ログに保存されてないので別サイトの方を示しとく
https://geolog.mydns.jp/www.geocities.co.jp/yggdrasil_leaf2000/log00/dos/win06.htm
ここのレス番65あたり

91 名前:デフォルトの名無しさん mailto:sage [2022/12/02(金) 07:27:12.50 ID:elckNyGo.net]
>>85
set /a d=20221201
set /a f=10000,g=100,h=8869,i=69,j=278803
set /a "n=d-1,n-=!(n%%f-g)*h,c=n/f"
set /a "a=j-!(c%%4)+!(c%%100)-!(c%%400)<<6"
set /a "n-=!(n%%g)*(i+(a>>(n%%f/g)*2&3))"
echo %n%

92 名前:デフォルトの名無しさん mailto:sage [2022/12/02(金) 21:24:55.56 ID:JHo2A9dA.net]
日時の操作に関してはもう便利すぎてpowershellへ丸投げしたほうがいいな
powershellというか.NETのDateTimeのメソッドではあるが
>>91とか何してるか本当に合ってるのかわからんような事をするよりは

93 名前:デフォルトの名無しさん mailto:sage [2022/12/02(金) 22:23:50.58 ID:elckNyGo.net]
確かにそうだな。計算できん奴はやめとけ

94 名前:デフォルトの名無しさん mailto:sage [2022/12/04(日) 15:45:51.56 ID:xdG8GXCM.net]
変数1の値を変数2にsetするとエラーになります。
値は文字列で不定ですが、記号文字が原因のようです。
遅延展開ではありません。
うまい方法はないですか。

95 名前:デフォルトの名無しさん mailto:sage [2022/12/04(日) 20:44:29.33 ID:pNrDPWEq.net]
ダメな質問の見本になってるぞ
書ける範囲でいいから、再現性のある最低限のコードと
エラーメッセージとその時の実際の変数値を書いてくれ

96 名前:デフォルトの名無しさん mailto:sage [2022/12/05(月) 19:02:53.29 ID:RxlUOQVH.net]
>>94
原因の記号文字は何? ()<>&|%!"^ とか?
引用符(")が含まれていない場合は set "変数2=%変数1%"
含まれている場合はキャレット(^)で全部エスケープ
でもこれ「うまい方法」とは思えないけど

set /p 変数1=変数1=
set "変数2=" & set "CARET=^"
setlocal enabledelayedexpansion
:LOOP
set 変数2=!変数2!!CARET!!変数1:~0,1!
set 変数1=!変数1:~1!
if defined 変数1 goto LOOP
endlocal & set 変数2=%変数2%
rem 結果を確認する
set 変数1
set 変数2

97 名前:デフォルトの名無しさん mailto:sage [2022/12/05(月) 23:44:59.81 ID:Xw9Qnajp.net]
「変数1の値を変数2にset」という意味では良い方法だと思う。

でも変数間でコピーだけして終わりって事はまずないから
あとは>>94が自分のコードにどう馴染ませて組み込んだりヒントにできるかだろうなぁ。



98 名前:デフォルトの名無しさん mailto:sage [2022/12/06(火) 10:31:46.97 ID:VnO+filq.net]
いやこれだめだろ
試した?

99 名前:デフォルトの名無しさん mailto:sage [2022/12/06(火) 11:36:48.90 ID:vjJKyhqV.net]
続きはpowershellで

100 名前:デフォルトの名無しさん mailto:sage [2022/12/06(火) 22:47:20.75 ID:LWPkE6+S.net]
setlocal enabledelayedexpansion
for /f "delims=" %%i in ("set var2=!var1!") do endlocal & %%i

101 名前:デフォルトの名無しさん mailto:sage [2022/12/07(水) 08:08:54.78 ID:6/SG3KPg.net]
>>98
不具合は無さそう
>>100
これシンプルでいいね。エスケープ不要だし

102 名前:デフォルトの名無しさん mailto:sage [2022/12/07(水) 14:11:06.83 ID:CzrTyJD4.net]
何でも答えてくれるChatGPTに質問して教えてもらう時代になるかも

103 名前:デフォルトの名無しさん mailto:sage [2022/12/17(土) 08:43:39.74 ID:P7hTh7GB.net]
%*を他の変数に入れる方法あります?

104 名前:デフォルトの名無しさん mailto:sage [2022/12/17(土) 13:02:14.02 ID:z3eWXHPR.net]
set

105 名前:デフォルトの名無しさん mailto:sage [2022/12/17(土) 13:56:37.78 ID:hGrODwcv.net]
>>95

106 名前:デフォルトの名無しさん mailto:sage [2022/12/18(日) 11:04:55.68 ID:3jhv+1oP.net]
batch.cmd を batch.cmd echo ' ^& echo ^" ^& echo ! として実行した場合の
%*を他の変数に入れる方法あります?

107 名前:デフォルトの名無しさん mailto:sage [2022/12/18(日) 14:23:46.88 ID:8FmKOvk1.net]
方法は無いよ。たぶん
引数はやめてファイルで渡すか、set /p で入力したら



108 名前:デフォルトの名無しさん mailto:sage [2022/12/19(月) 21:25:44.08 ID:OdY4312I.net]
もしかして遅延展開が有効だったら
set VAR1=!VAR2!
は特殊文字おかまいなしの万能?

109 名前:デフォルトの名無しさん mailto:sage [2022/12/21(水) 21:17:40.11 ID:yR9jaPsy.net]
よくわからんけど >>100 でいけるなら

setlocal enabledelayedexpansion
for /f "delims=" %%i in ("!var1!") do endlocal & set var2=%%i

もいけそうで、それなら

for /f "tokens=1* delims==" %%i in ('set var1') do if %%i==var1 set var2=%%j

でもいけそう

110 名前:デフォルトの名無しさん mailto:sage [2022/12/21(水) 22:08:11.62 ID:DgZmdBnN.net]
上のは値の先頭が ; だと消える
eol^= にすればいい
下のは値の先頭が = だとその文字が消える

111 名前:デフォルトの名無しさん mailto:sage [2022/12/21(水) 22:13:22.39 ID:DgZmdBnN.net]
set var1 の出力は複数かもしれない

112 名前:デフォルトの名無しさん mailto:sage [2022/12/21(水) 22:54:47.75 ID:DgZmdBnN.net]
if で確認しているのか。失礼いたしました。

113 名前:デフォルトの名無しさん mailto:sage [2022/12/22(木) 03:20:20.56 ID:rMNtcPRb.net]
バッチファイル内でキー入力を受けとろうと思って

>SET /P YN_Check="(Y/N):"
>Echo 入力されたのは %YN_Check%

としたのですが、%YN_Check% にちゃんと入力した文字が入らないのですが、何故でしょうか…?
この2行だけのバッチファイルなら、問題なく入力した値が入るのですが、
本来その処理をしたいバッチファイル内に記述すると、とたんにおかしくなります…
Y にしても y になったり、y を入力してるのに N になったり訳が分からない。

114 名前:デフォルトの名無しさん mailto:sage [2022/12/22(木) 08:07:54.84 ID:i1WKtawW.net]
>>113
その本来の処理がおかしいと思われる

115 名前:デフォルトの名無しさん mailto:sage [2022/12/22(木) 09:17:11.00 ID:GhJnH83b.net]
echo onで眺めてみよう
環境変数は実行前に展開される
遅延展開という謎機能をしっているか?

116 名前:デフォルトの名無しさん mailto:sage [2022/12/22(木) 10:18:32.17 ID:DSfJPeBV.net]
for文とかの中で入れてるとかだろう
で変な値とかは実行前の変数に残ってる値

117 名前:115 mailto:sage [2022/12/22(木) 13:27:25.08 ID:rMNtcPRb.net]
「遅延展開」なんて、全く知りませんでした。
ここで質問しなかったら、永遠に解決出来ませんでした。
有り難う御座いました!



118 名前:デフォルトの名無しさん mailto:sage [2022/12/23(金) 08:34:41.65 ID:FT8V4kp7.net]
特殊記号のドキュメントはどこで見られますか

119 名前:デフォルトの名無しさん mailto:sage [2022/12/24(土) 00:46:30.79 ID:Q5Ixgqn/.net]
powershellに実装されてない<とか&&とか||を隠ぺいするために抹消された

120 名前:デフォルトの名無しさん mailto:sage [2022/12/24(土) 00:55:19.42 ID:oMpeQZG3.net]
サポート対象外になったOSとかの技術情報がMSサイトから消されつつあるな
この問題を消すと増える法則が発動しないインターネットから情報消えすぎ問題と呼称したい

121 名前:デフォルトの名無しさん mailto:sage [2022/12/26(月) 15:27:21.10 ID:aZQzx7UN.net]
Using multiple commands and conditional processing symbols
https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2003/cc737438(v=ws.10)#using-multiple-commands-and-conditional-processing-symbols

122 名前:デフォルトの名無しさん mailto:sage [2023/01/03(火) 11:08:17.44 ID:2hETcG3j.net]
最近職場でbatファイルを知った者です。
住民様にご質問がございます。

自分の仕事の中に「デジカメで撮った今日の現場の写真をPCに移す」という作業があるのですが
そちらはbatファイルで対応することは可能なのでしょうか?
xcopyでバックアップではフォルダに過去の写真を残していないと毎回膨大な写真を写すことになってしまい
職場の脆弱なPCではすぐに容量オーバーしてしまいます。
今日の写真のみをPCに移す

123 名前:方法がもしあるなら恐れながらご教授していただけると助かります。
何卒宜しくお願いします。
[]
[ここ壊れてます]

124 名前:デフォルトの名無しさん mailto:sage [2023/01/03(火) 13:27:43.33 ID:sLJn58EA.net]
>>122
更新日時が今日以降のファイルをコピー先に今日の日付のフォルダを作ってコピー
set ymd=%date:~0,4%%date:~5,2%%date:~8,2%
robocopy コピー元 コピー先\%ymd% /S /MAXAGE:%ymd%

125 名前:デフォルトの名無しさん mailto:sage [2023/01/03(火) 14:21:42.12 ID:axWhet1W.net]
IF の中から GOTO で外に飛ぶと、括弧の使い方が間違っている
というエラーになるのですが、どうやって回避するのでしょうか?

126 名前:デフォルトの名無しさん mailto:sage [2023/01/03(火) 15:15:36.56 ID:cXTWG1PB.net]
>>124
コード出してみ

127 名前:デフォルトの名無しさん mailto:sage [2023/01/03(火) 15:27:36.49 ID:VP4Ca8Qj.net]
勝手な想像だけどgoto関数かラベルの次の行がカッコになってるパターンだと思う
goto :AAA
)
とか
:AAA
)
バッチファイルは実行時に1行になって解釈されるからこういう書き方だと例えば
else (goto :AAA)
となって閉じ括弧までがラベルの一部と解釈される
簡単な回避策としては括弧の前の行にremを挿入する



128 名前:デフォルトの名無しさん mailto:sage [2023/01/03(火) 16:15:31.69 ID:JXGfY3Iz.net]
別のところに原因があるんじゃ
コード出して

129 名前:デフォルトの名無しさん mailto:sage [2023/01/03(火) 16:51:21.56 ID:z3dTsyyT.net]
gotoは便利かもだけど、使わないにこしたことはない

130 名前:デフォルトの名無しさん mailto:sage [2023/01/03(火) 16:58:09.34 ID:2hETcG3j.net]
>>123
正月にもかかわらず手早い返信ありがとうございます!!!
早速組んでみます!!
ありがとうございました!!!

131 名前:デフォルトの名無しさん mailto:sage [2023/01/03(火) 17:01:38.01 ID:axWhet1W.net]
>>126
> 勝手な想像だけどgoto関数かラベルの次の行がカッコになってるパターンだと思う
まさにそれ、でした…
これは絶対に気付かないですよ…
有難う御座いました。

132 名前:デフォルトの名無しさん mailto:sage [2023/01/03(火) 21:56:54.70 ID:krBOweAa.net]
>>126
横から失礼。よく分からない。再現できない

133 名前:≠126 mailto:sage [2023/01/04(水) 01:32:14.88 ID:fBnUHAjh.net]
>>126
それある
どうやって回避したのかもう忘れたが
参考になりました

134 名前:デフォルトの名無しさん mailto:sage [2023/01/04(水) 03:00:17.63 ID:k64eH4zi.net]
if %1 equ 1 (goto :true) else (goto :false)
goto :eof
:true
echo true
goto :eof
:false
echo false

これでエラーにならない(閉じ括弧を改行しても)
どうやればエラーになるの?

135 名前:デフォルトの名無しさん mailto:sage [2023/01/04(水) 04:29:15.97 ID:diYqjiE/.net]
>>133
gotoはエラーにならないね

if 1==1 (
if 2==2 goto :skip
echo test1
:skip
)
こんな感じでカッコの前にラベルおいてるとエラーになる

136 名前:デフォルトの名無しさん mailto:sage [2023/01/04(水) 06:05:18.72 ID:3FgVyKvV.net]
https://qiita.com/yz2cm/items/f808e4380faa3bd51a98

137 名前:デフォルトの名無しさん mailto:sage [2023/01/04(水) 10:17:12.83 ID:k64eH4zi.net]
>>134
ラベルを括弧の中に設置するなんて考えたことも無かった



138 名前:デフォルトの名無しさん mailto:sage [2023/01/04(水) 11:17:46.87 ID:lFNs7lW+.net]
まああり得るとは思うけど俺はそんな複雑なコードをバッチで書かないから知らんかったわ

139 名前:デフォルトの名無しさん mailto:sage [2023/01/04(水) 22:36:34.28 ID:AhEOb1lW.net]
カッコの中は全部サブルーチンにすればいいと思うの
Callで呼んだ先では何でもし放題

140 名前:デフォルトの名無しさん mailto:sage [2023/01/09(月) 02:14:07.73 ID:2yNmR2Eh.net]
括弧と言えばコメント行に半角括弧があると誤動作するから怖いわバッチはよお

141 名前:デフォルトの名無しさん mailto:sage [2023/01/12(木) 00:00:34.91 ID:n3PiBbyH.net]
バッチファイルの中で以下のコマンド

cmd /c 子バッチファイル.bat

でさらにバッチファイルを実行させたあと
子バッチファイルの実行中にCtrl + Cで処理を中断して

バッチ ジョブを終了しますか (Y/N)?

をYで終了させたときに、親バッチファイルでもそれを受け継いでるみたいで、また

バッチ ジョブを終了しますか (Y/N)?

と表示されてしまうのですが、親バッチファイルに戻ったときにはバッチファイルの続きを処理するようにできないものでしょうか?

ご存知の方がいらっしゃいましたらお教えください。

142 名前:デフォルトの名無しさん mailto:sage [2023/01/12(木) 14:55:11.73 ID:M53QXIM6.net]
2回目にNを押したらいいだけじゃね

143 名前:デフォルトの名無しさん mailto:sage [2023/01/12(木) 20:12:55.87 ID:OEk4sgu+.net]
子でCtrl+C,Yで中断したら親に戻ったらしれっと続きが動いたのでわからん

144 名前:デフォルトの名無しさん mailto:sage [2023/01/13(金) 00:02:34.96 ID:XUJfPljW.net]
>>140
親バッチで
@echo off
start /wait "" "cmd /c %~dp0子バッチ.bat"
echo %errorlevel%
paiuse

子バッチで
@echo off
echo %~n0%~x0
ping 127.0.0.1 -n 3 > NUL 2>&1
exit /b 123

とすると子バッチがCtrl + Cで中断した場合親バッチの%errorlevel%に255、かつCtrl + Cの伝達はなし、
子バッチが最後まで終わった場合は親バッチの%errorlevel%に子バッチのexit /bの値123が返るのを確認したよ
要するにコンソールを複数出せばシグナルは伝達しない。意図した動作かは知らんけど

145 名前:デフォルトの名無しさん [2023/01/23(月) 17:49:53.11 ID:0BNLAxAb.net]
関係者に配布していたマクロ入りエクセルファイルがマイクロソフトの対応によって容易に開くことができなくなりました。
同じような質問でうんざりしていたので、バッチファイルを配って対応したいと思います。

マイドキュメントの中に「trustdoc」というディレクトリを作り、
このディレクトリの中にあるエクセルファイルは、信頼できるファイルだとレジストリを操作させたいと思います。
レジストリの操作方法をコマンドでどうかくか情報がなくて、アドバイスいただけたらと思います。

https://support.microsoft.com/ja-jp/office/microsoft-office-%E3%81%A7%E4%BF%A1%E9%A0%BC%E3%81%A7%E3%81%8D%E3%82%8B%E5%A0%B4%E6%89%80%E3%82%92%E8%BF%BD%E5%8A%A0-%E5%89%8A%E9%99%A4-%E3%81%BE%E3%81%9F%E3%81%AF%E5%A4%89%E6%9B%B4%E3%81%99%E3%82%8B-7ee1cdc2-483e-4cbb-bcb3-4e7c67147fb4
にある、「信頼できる場所を追加する」
をコマンドで表すとどういう書き方になるでしょうか?
追加するディレクトリは、
%userprofile%\Documents\trustdoc
になります。

146 名前:デフォルトの名無しさん mailto:sage [2023/01/23(月) 18:28:05.17 ID:g43oPRJS.net]
>>144
レジストリのHKCUだかに設定箇所があるはず
信頼できる場所レジストリとかでググればすぐ出てくると思う

147 名前:デフォルトの名無しさん mailto:sage [2023/01/23(月) 18:35:51.01 ID:g43oPRJS.net]
ああ、書き方を教えて欲しいのか
reg add レジストリキー /v 値の名前 /t 値の型 /d 値 /f
詳細はreg add /?



148 名前:デフォルトの名無しさん mailto:sage [2023/01/23(月) 18:40:02.27 ID:0BNLAxAb.net]
ありがとうございます。調べてみます!

149 名前:デフォルトの名無しさん mailto:sage [2023/01/23(月) 19:15:50.55 ID:0BNLAxAb.net]
あともう少しな気がします。

reg add "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Office\16.0\Excel\Security\Trusted Locations" /v "trust Documents" /t REG_DWORD /d "%userprofile%\Documents\trustdoc" /f

150 名前:デフォルトの名無しさん [2023/01/23(月) 19:31:12.28 ID:0BNLAxAb.net]
これ↓でコマンドが通りましたが、
reg add "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Office\16.0\Excel\Security\Trusted Locations" /v "trust Documents" /t REG_SZ /d "%userprofile%\Documents\trustdoc" /f

レジストリエディタみるとデータが追加されていなかったでした。
これ以上素人がレジストリをいじるのは危険かと思いましたので、GUIで説明するようにいたします。
お騒がせしてすいませんでした。

151 名前:デフォルトの名無しさん mailto:sage [2023/01/23(月) 20:08:04.41 ID:dfKZHUgs.net]
オフィス(Excelなど)起動したまま変更しようとしたとか?

152 名前:デフォルトの名無しさん mailto:sage [2023/01/23(月) 20:18:25.17 ID:0BNLAxAb.net]
いえ。エクセルを閉じてもやっぱり該当のレジストリに設定が追加されていませんでした。
環境変数のパスが悪いのかとも思って実際のパスに変えても同じでした。
レジストリの変更は注意しないといけないと言われていますので、
鳴れていないコマンドやバッチで対応する方法はあきらめようかと思います。
お騒がせしてすいませんでした。

153 名前:デフォルトの名無しさん mailto:sage [2023/01/23(月) 20:22:32.26 ID:dfKZHUgs.net]
そうでしたか
適当なことを言ってすみません

154 名前:デフォルトの名無しさん mailto:sage [2023/01/23(月) 20:26:53.26 ID:0BNLAxAb.net]
いえ。アドバイスありがとうございました。

155 名前:デフォルトの名無しさん mailto:sage [2023/01/23(月) 20:29:44.46 ID:NaDuOShR.net]
レジストリエディタでTrusted Locationsをエクスポートした.regファイルを
余計な行が含まれてないか確認の上配布でよくね?

156 名前:デフォルトの名無しさん [2023/01/23(月) 20:35:10.99 ID:0BNLAxAb.net]
.regファイル!!
ちょっと調べてみます。ありがとうございます。

157 名前:デフォルトの名無しさん mailto:sage [2023/01/23(月) 20:55:31.79 ID:0BNLAxAb.net]
エクセルアプリからの設定によるレジストリ変更は成功しました。
.regファイルを開いてみました。

----
Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\SOFTWARE\Microsoft\Office\16.0\Excel\Security\Trusted Locations\Location6]
"Path"="C:\\%userprofile%\\Documents\\trustdocs\\"
"AllowSubfolders"=dword:00000001
"Description"="Excel emotet対応"
"Date"="01/23/2023 20:44"
----

このKeyにある「Location6」というのは、たぶんユーザーごとに違う値のような予感。
「Location1」からaddで追加されてきた名前かと思います。
折角のアドバイスですが難しい気がします。



158 名前:デフォルトの名無しさん [2023/01/23(月) 21:07:08.10 ID:0BNLAxAb.net]
あ。これでレジストリの追記ができました。
keyに新しい文字列「test」を後ろに付け足しました。
reg add "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Office\16.0\Excel\Security\Trusted Locations\test" /v "trust Documents" /t REG_SZ /d "%userprofile%\Documents\trustdocs" /f

.regなるものをみてハッとしました。
皆さんアドバイスありがとうございました。

159 名前:デフォルトの名無しさん mailto:sage [2023/01/24(火) 12:55:17.67 ID:emIiCzRd.net]
testとか適当でも良いのか
勉強になったわ

160 名前:デフォルトの名無しさん mailto:sage [2023/01/24(火) 13:53:07.93 ID:9U26EPIz.net]
動いたのならいいけど、%userprofile%ってREG_EXPAND_SZではなくてREG_SZでも有効なんだっけ?
Excel側で環境変数を展開してるんだろうか

161 名前:デフォルトの名無しさん mailto:sage [2023/01/24(火) 13:58:27.44 ID:r0FUzBRQ.net]
大抵のソフトは環境変数を受け付けるだろ
俺も作るときは環境変数を受け付けるように作るよ

162 名前:デフォルトの名無しさん mailto:sage [2023/01/24(火) 14:13:23.74 ID:9q3wnipD.net]
%%userprofile%%じゃないからbatの時点で展開されてる件

163 名前:デフォルトの名無しさん mailto:sage [2023/02/15(水) 08:54:37.01 ID:SA6Um8/R.net]
for %s in (c:\windows\system32\*.*) do @echo %random%
1つのコマンドを実行中、乱数を振り直してはくれないのね・・・

164 名前:デフォルトの名無しさん [2023/02/15(水) 09:43:24.57 ID:TE3DoOlC.net]
遅延環境変数でも駄目?

165 名前:デフォルトの名無しさん mailto:sage [2023/02/15(水) 09:50:13.69 ID:SA6Um8/R.net]
あかんかった

166 名前:デフォルトの名無しさん mailto:sage [2023/02/15(水) 12:26:54.02 ID:z8T+7ef0.net]
そんなことないやろ
!random!でばらけるで

167 名前:デフォルトの名無しさん mailto:sage [2023/02/15(水) 13:04:59.88 ID:SA6Um8/R.net]
おお、ほんとだ
for %%s in (*.*) do (
setlocal ENABLEDELAYEDEXPANSION
echo !random!
endlocal
)

しかし、これはダメ
setlocal ENABLEDELAYEDEXPANSION
for %s in (c:\windows\system32\*.*) do @echo !random!
endlocal

うーみゅ??



168 名前:デフォルトの名無しさん mailto:sage [2023/02/15(水) 13:08:20.84 ID:vbXbTgUC.net]
setlocal enabledelayedexpansion
for %%f in ( *.* ) do @echo !random!

ちゃんと毎回乱数になってるぞ??

169 名前:デフォルトの名無しさん mailto:sage [2023/02/15(水) 13:55:25.99 ID:SA6Um8/R.net]
.batファイルの中でならOK
forコマンド直打ちはNG
なのね

170 名前:デフォルトの名無しさん mailto:sage [2023/02/15(水) 21:53:53.82 ID:2801FI6C.net]
dir あいう!えお.txt → 確認OK
for %%i in ( dir ”*.txt” ) do (
echo ”%%~nxi” →❶
dir ”%%~nxi” →➋
)

❶→あいうえお.txt
➋→ファイル無し

この問題(for文の内部で半角!文字が含まれたファイル名で、!が消えた名前に変わってしまう)の回避方法をご教示いただければ幸いです。
(「あいう!えお.txt」のファイル有りきで…)

171 名前:デフォルトの名無しさん [2023/02/16(木) 11:33:08.40 ID:Pi7fCiR3.net]
引用符が全角?

172 名前:デフォルトの名無しさん [2023/02/16(木) 12:30:36.05 ID:Pi7fCiR3.net]
SETLOCAL DISABLEDELAYEDEXPANSION
for %%i in (*.txt) do (
echo "%%~nxi"
)

173 名前:デフォルトの名無しさん mailto:sage [2023/02/16(木) 13:25:19.43 ID:tOoYyZel.net]
! が消えるって自分も前に経験して困ったことあるけど今適当に試しても消えないな
どういう書き方したら消えるんだっけか

174 名前:デフォルトの名無しさん mailto:sage [2023/02/16(木) 22:08:46.71 ID:tOoYyZel.net]
setlocal enabledelayedexpansionを使うと駄目なんだっけか
173のレスをコピペして試してたから再現しなかった
回避方法はこの辺読めばいいんじゃないかな>>169
https://qiita.com/yz2cm/items/4983be006116c369d08b

175 名前:デフォルトの名無しさん mailto:sage [2023/02/18(土) 13:12:03.68 ID:S+SrMYX3.net]
>>169
doの中身をcall使ってサブルーチンにする
サブルーチンの先でDisableDelayedExpansionを行って
一時的に遅延環境変数展開をOFFにする
ちなみにdoの括弧の中でDisableDelayedExpansionしても意味はない

コマンドが実行されるときにどこまでが1行として処理されるかよく考えてみて

176 名前:デフォルトの名無しさん mailto:sage [2023/02/18(土) 16:15:41.68 ID:nz9Z1NDi.net]
脳死だがバッチは基本使わない対処をした方が優れている
扱う出力内容で>>169みたいな一見不可解な事が起こり易い
メモ帳で書いてUTF8で保存したり全角文字を混ぜて実行するバカもいる
こんなバッチなんて書いていられるか俺は自分の言語に戻らせてもらう

177 名前:デフォルトの名無しさん mailto:sage [2023/02/18(土) 20:08:07.43 ID:S+SrMYX3.net]
バッチファイルのスレで何言ってるんだこいつ



178 名前:デフォルトの名無しさん mailto:sage [2023/02/19(日) 06:53:20.13 ID:B9Nm4zxk.net]
はい、バイバーイ  ノシ
二度と戻ってこないでね

179 名前:デフォルトの名無しさん mailto:sage [2023/02/23(木) 22:02:16.64 ID:KL0E1A05.net]
>>174
サンクス。何とか回避できたようです。
ありがとうございました。
m(_ _)m

180 名前:デフォルトの名無しさん mailto:sage [2023/02/24(金) 06:16:27.49 ID:umH2oUG6.net]
176の方法で回避?
call しても ! 文字は消えるけど
どうやって値を渡したのか、ちゃんと報告しろ

181 名前:デフォルトの名無しさん mailto:sage [2023/02/24(金) 06:21:19.29 ID:jJ3mlMsu.net]
なぜそんな上からなのか

182 名前:デフォルトの名無しさん mailto:sage [2023/02/24(金) 06:50:27.38 ID:umH2oUG6.net]
そうか?
報告してください。お願いします。

183 名前:デフォルトの名無しさん mailto:sage [2023/02/24(金) 13:07:53.45 ID:xAv3d2xt.net]
よろしい

184 名前:デフォルトの名無しさん mailto:sage [2023/02/26(日) 02:12:26.08 ID:6qO2uMR0.net]
>>181
私も単にcallにしただけではiの文字が消えたままだったけど、
setlocalを全部外したらcallした先でi文字付きで認識できるようになった。
なんでそうなったかは正直確信が持てないが、気がついた変更はそれだった。
ハッキリ答えられずすみません…

185 名前:デフォルトの名無しさん mailto:sage [2023/02/26(日) 07:59:37.30 ID:ZRUXpLmJ.net]
>>183
報告ありがとう
遅延展開での for 文の変数値に ! や ^ があると値が変わる事がある
遅延無しなら値が変わらない
call にするかどうかは別の話
ヘルプをよく読んで下さい
setlocal /?
for /?
引用符は半角にして下さい
質問文のバッチはそれだけで他人が問題点を再現できるものにして下さい

186 名前:デフォルトの名無しさん mailto:sage [2023/02/26(日) 20:35:28.85 ID:gahU4Yv8.net]
なぜそんなギスギスなのか
仕事中に仕事以外の会話のできない方か

187 名前:デフォルトの名無しさん mailto:sage [2023/02/26(日) 23:08:44.91 ID:d/RsgC9o.net]
これAIの何とかってやつが書いた文章だろ?…っての、そこら中で見るなw



188 名前:デフォルトの名無しさん mailto:sage [2023/02/27(月) 11:42:47.10 ID:JmzEtsrD.net]
まあ好かれる人間ではないよな
たまにいる、そういう奴

189 名前:デフォルトの名無しさん mailto:sage [2023/02/27(月) 11:47:26.81 ID:MWG0Dnko.net]
まあ対面では絶対そんな言葉使いはしないよね

190 名前:デフォルトの名無しさん mailto:sage [2023/02/27(月) 14:46:21.47 ID:+mdXvmJb.net]
変数値が変わるわけないだろ
展開した値が元と違うだけ

191 名前:デフォルトの名無しさん [2023/03/01(水) 12:26:47.31 ID:fuKOGN7X.net]
すいません
超初心者的な質問なんですが、
バッチファイルって、サブルーチンを設定する時に、一度実行されてしまうん

192 名前:ですよね? []
[ここ壊れてます]

193 名前:デフォルトの名無しさん mailto:sage [2023/03/01(水) 13:18:49.01 ID:p0dowhw3.net]
call先で一行ずつ実行するだけ
サブルーチンの設定て何だろ

194 名前:デフォルトの名無しさん mailto:sage [2023/03/01(水) 13:49:19.87 ID:Co0n2HTo.net]
質問が不明瞭すぎる

195 名前:デフォルトの名無しさん mailto:sage [2023/03/01(水) 15:49:02.20 ID:tZuIfIoC.net]
>>190
バッチファイルにサブルーチンなんて無い
サブルーチン的な事したければラベル書いてそこにジャンプする
当然ジャンプじゃなくて上から来た場合も普通に実行される
それが嫌ならラベルの直前に exit/b でも書いとけ

196 名前:デフォルトの名無しさん [2023/03/01(水) 17:52:18.10 ID:fuKOGN7X.net]
すいません
具体的に書きます!!

@echo off

call :set_errorlevel


:set_errorlevel

echo aaaaa

exit /b

こういうのがあったとして

C:\Users\■■■>■:\1112.bat
aaaaa
aaaaa

↑なぜ二つ実行されるのか?って意味です。

197 名前:デフォルトの名無しさん mailto:sage [2023/03/01(水) 17:54:05.48 ID:68s28u+f.net]
1回目がcallで実行
2回目がそのままの流れで実行されてる



198 名前:デフォルトの名無しさん mailto:sage [2023/03/01(水) 18:36:49.49 ID:GaouMb9c.net]
1行ずつ逐次実行していくから
call文でラベルに飛んで実行し戻って来る
ステップが次の行に移行してcall文の次の文を実行しようとする
そこにはラベル以下があったわけだ
call文から戻ってきた所で実行を止めたければ
goto :eof
をcall文の次に書いておくといい

199 名前:デフォルトの名無しさん [2023/03/01(水) 18:59:16.83 ID:fuKOGN7X.net]
>>191
>>193
更新してなかったので、レスに気が付きませんでしたs。
おお!できました!
理解出来ました!
有難う御座いましたs。

200 名前:デフォルトの名無しさん [2023/03/01(水) 19:02:16.77 ID:fuKOGN7X.net]
>>196
>>195
おお!なるほど!それでもできました!
ありがとうございました!

201 名前:デフォルトの名無しさん [2023/03/01(水) 19:04:20.16 ID:fuKOGN7X.net]
なるほど
ただラベルをつけてよびだしているだけなんですね
バッチにmethodやサブルーチンって概念はないんですね!
勉強になりました1

202 名前:デフォルトの名無しさん [2023/03/01(水) 19:05:12.08 ID:fuKOGN7X.net]
ていうことは、うまく調整しないと、2回同じ実行することになりますね!
早めに気が付いてよかったです!

203 名前:デフォルトの名無しさん mailto:sage [2023/03/01(水) 22:53:45.68 ID:6i7MYFqO.net]
コマンドプロンプトから
start chrome "D:/test.html?a=001"
としたのですが
D:/test.html
が開かれました。
ローカルのhtmlにクエリを付けて開く方法があればご教示頂きたいです。

204 名前:デフォルトの名無しさん mailto:sage [2023/03/01(水) 23:15:54.48 ID:8kmkGnGP.net]
それはchromeのお話ですねえ
開発元のgoogleに聞くのが早いのでは

205 名前:デフォルトの名無しさん mailto:sage [2023/03/02(木) 07:45:52.86 ID:X0Akc+Oj.net]
起動するとネットワークプリンタでファイルを出力できるバッチファイルて作れますか?

206 名前:デフォルトの名無しさん mailto:sage [2023/03/02(木) 10:15:53.52 ID:rYHGX+R7.net]
ネットワークプリンタで出力されるものは印刷物です
ファイルではありません

207 名前:デフォルトの名無しさん mailto:sage [2023/03/02(木) 10:50:24.75 ID:h3FhlPC5.net]
>>201
クエスチョンマーク以降のパラメーターを解釈するのは、Webサーバーのお仕事です
サーバーを立ち上げるか借りるかしましょう



208 名前:デフォルトの名無しさん mailto:sage [2023/03/02(木) 11:39:56.39 ID:5LS4jA2t.net]
>>201
"file:///D:/test.html?a=001"は?
"D:/test.html?a=001"だとD:/test.html%3Fa=001を開こうとしてERR_FILE_NOT_FOUNDになるなぁ

209 名前:デフォルトの名無しさん mailto:sage [2023/03/02(木) 12:44:28.71 ID:RvyObGoZ.net]
>>206
それでいけるね
ちゃんとクエリーデータも渡ってきてる

210 名前:デフォルトの名無しさん mailto:sage [2023/03/02(木) 14:02:39.40 ID:RvyObGoZ.net]
>>205
クエリーパラメタはURLの解釈の部分だと思われる(window.location.search)ので
サーバーの仕事というよりHTMLの実行部分(エンジン)の仕事なんだろうね

211 名前:デフォルトの名無しさん [2023/03/03(金) 14:20:26.65 ID:cfdc5Bpc.net]
あぐえ

212 名前:デフォルトの名無しさん [2023/03/03(金) 14:22:08.63 ID:cfdc5Bpc.net]
ぼうけ

213 名前:デフォルトの名無しさん [2023/03/07(火) 15:36:52.13 ID:aaO7s6EJ.net]
「作成日時が30日以上前」を条件としてフォルダ内のファイルを削除したいのですが、方法はありますか?

forfiles だと更新日時が条件となってしまいます、、、

214 名前:デフォルトの名無しさん mailto:sage [2023/03/07(火) 16:49:23.24 ID:/8dYORgk.net]
作成日時は頑張れば取得できるけどコマンドプロンプトでは時間計算ができないから
PowerShellのスクリプトを書いたほうがいいと思う

215 名前:デフォルトの名無しさん mailto:sage [2023/03/07(火) 17:27:20.76 ID:GAVJiBto.net]
@echo off
for /f "usebackq" %%i in (`powershell -c "([datetime](get-date)).AddDays(-30).tostring('yyyyMMdd')"`) do set now=%%i

for /f "tokens=1-5* skip=4 delims=/ " %%i in ('dir /tc /od /a-d') do (
if %%i%%j%%k gtr %now% goto:eof
if "%%n" neq "" echo delete --- %%n
)

216 名前:デフォルトの名無しさん [2023/03/07(火) 18:08:36.87 ID:aaO7s6EJ.net]
>>212
簡単に取得できないんですね、、、
forfileに変わるような便利なコマンドがあれば良かったんですけどね、、、
ありがとうございます。

217 名前:デフォルトの名無しさん mailto:sage [2023/03/07(火) 19:20:35.55 ID:UPk4pcGD.net]
自分でexe作るよろし



218 名前:デフォルトの名無しさん mailto:sage [2023/03/07(火) 19:39:11.17 ID:trxvq/2q.net]
前月の同日以前にしたら

219 名前:デフォルトの名無しさん mailto:sage [2023/03/08(水) 05:54:33.72 ID:AsCwI7z1.net]
Ruby なら、glob, birthtime を使う。
ただし、DryRun なので実際には削除されません

require 'fileutils'
require 'date'

Prev_day_30 = Date.today - 30 # 今日の30日前

# 絶対パスのディレクトリ名の後ろに、* を付けること!
# . で始まる、隠し directory, file を除く
glob_pattern = "C:/Users/Owner/Documents/test/*"

Dir.glob( glob_pattern ).select do |full_path|
stat = File.stat full_path
date = stat.birthtime.to_date # 作成日付

# ファイルで、作成日付が今日の30日前以前のものだけ。30日前も含む
stat.file? && date <= Prev_day_30
end
.each { |full_path| FileUtils::DryRun.rm( full_path ) } # ファイルを削除

220 名前:デフォルトの名無しさん mailto:sage [2023/03/09(木) 08:57:37.30 ID:12Ly5Xlm.net]
コマンドラインで置換するスクリプトを拾って改造したけど半角スペースや!が混ざるとうまくいかない

chcp 65001
@echo off
echo "第1引数はパス「%1」です。"
echo "第2引数は置換前「%2」です。"
echo "第3引数は置換後「%3」です。"
echo "第4引数はファイル名「%4」です。"
cd /D %1
rem "もし「file_replaced.txt」ファイルが既に存在している場合、削除しておく"
if exist backup_%4 del backup_%4
rem "元ファイルをリネームする"
rename %4 backup_%4
rem "以下の「for」ループ内で変数を変化させるための宣言"
setlocal ENABLEDELAYEDEXPANSION
rem "「for」ループで「file.txt」ファイルの内容を1行ずつ取得し、"
rem "「woman」を「girl」に置換する"
for /f "delims=" %%a in (backup_%4) do (
rem "変数「line」にファイル内容を一行ずつ代入する"
set line=%%a
rem "変数「line」内の「woman」を「girl」に置換し、"
rem "「file_replaced.txt」ファイルに書き込む"
echo !line:%2=%3!>>%4
)

endlocal

221 名前:デフォルトの名無しさん mailto:sage [2023/03/09(木) 09:46:40.82 ID:H0Wzj8XM.net]
強いて言うなら、変数は ”” でくくる、”%%~a”、”%~1” みたいに
使うほうがトラブルが少ない、
! だけじゃなくて ^ や % などもケアする必要があるので面倒くさい、
になってくる

なので、バッチファイルでやる縛りがあるなら仕方ないかもだけど、
さすがに置換のできる何かを、使うor使えるようにした方が良くない?
今どきの PC なら PowerShell 使えるだろうからせめてそっちにするとか

222 名前:デフォルトの名無しさん mailto:sage [2023/03/09(木) 19:15:35.15 ID:eHaHoipW.net]
外部コマンドで置換できるツールがフォーカスを奪う仕様で操作できなくなるから
VMで実行したら数時間たっても終わらなくて
別の方法を探したらこれに至った

専用ソフトが見つかり無事終わった

223 名前:デフォルトの名無しさん mailto:sage [2023/03/10(金) 02:47:18.98 ID:5g8/KHh8.net]
Ruby なら、

re = /あい/

text = <<'EOT'
xあいxあい
yあ
いy
あい
EOT

puts dest = text.gsub( re, 'そら' )

出力
xそらxそら
yあ
いy
そら

224 名前:デフォルトの名無しさん mailto:sage [2023/03/10(金) 03:09:52.26 ID:dbCMTPvQ.net]
チラシの裏で

225 名前:デフォルトの名無しさん mailto:sage [2023/03/10(金) 17:32:01.38 ID:eGLVllnw.net]
散々コマンドリファレンスを読んだりググったけど分からないことを教えてください。

type data.txt | hoge.bat
みたいな事がしたいのですが、バッチスクリプトで、
・bash での read line
・VBScript での WScript.StdIn.ReadLine
のように、1行ずつ標準入力を読むことは可能でしょうか?やっぱり駄目でしょうか?

226 名前:デフォルトの名無しさん mailto:sage [2023/03/10(金) 18:36:07.72 ID:3mB0yP28.net]
for /F

227 名前:デフォルトの名無しさん mailto:sage [2023/03/10(金) 18:44:37.57 ID:KiwyNmEo.net]
何がやっぱりなのかわからん
もっとちゃんとググれ



228 名前:デフォルトの名無しさん mailto:sage [2023/03/10(金) 19:12:34.24 ID:eGLVllnw.net]
>>224
ヒントありがとう。for の中であのコマンドを使うんか…。

>>225
上から目線のジジイはすっこんでろ。
どうせ分かんないんだろ。
ということで正解はここには書かん

229 名前:デフォルトの名無しさん mailto:sage [2023/03/10(金) 19:31:43.62 ID:hNo+M64i.net]
要するに見ての通り他のコマンドからパイプで渡された標準入力をバッチファイルで受け取りたいと言う事でしょ
無理なんじゃね

230 名前:デフォルトの名無しさん mailto:sage [2023/03/10(金) 19:46:29.11 ID:vz26ACYY.net]
やっぱり(予想通り・諦め・失望)

231 名前:デフォルトの名無しさん mailto:sage [2023/03/10(金) 20:58:45.48 ID:c3BQ1P8m.net]
こんなのでもいいかな?
@echo off
set lines=0
for /f "tokens=*" %%i in ('more') do (
set data=%%i
call :sub
)
goto :eof
:sub
set /a lines+=1
echo %lines% - %data%

232 名前:デフォルトの名無しさん mailto:sage [2023/03/10(金) 21:03:30.78 ID:c3BQ1P8m.net]
もちろん
forループの特性上、空白行はスキップされたりいろいろするので
finsdtrと組み合わせたり色々しないといけないけど
過去ログにその話はあったかと

233 名前:デフォルトの名無しさん mailto:sage [2023/03/10(金) 21:21:55.47 ID:c3BQ1P8m.net]
一応表示は""で括ったほうがいいかな
データ内容次第ではエラーとか色々起きるんで

234 名前:デフォルトの名無しさん mailto:sage [2023/03/10(金) 21:27:21.03 ID:c3BQ1P8m.net]
バッチの入力データ次第という奴はどうしようもないことは以前から何度もレスされてる
""で括ってもダメで遅延環境変数で出力するのが一番まともかも
完全ではないだろうけど

235 名前:デフォルトの名無しさん [2023/03/18(土) 01:36:02.39 ID:iEi+ABmN.net]
フォーいーちないのか?

236 名前:デフォルトの名無しさん [2023/04/13(木) 18:51:07.20 ID:dCQIGdp/.net]
>>223
bing のチャットAIに丸投げしてみた

バッチスクリプトで標準入力を1行ずつ読む方法については、以下のような方法があります¹⁴。
- `for /f %%[アルファベット1文字] in ([ファイル名]) do ([処理])` を使う方法
- `set /p 変数名=` を使う方法

例えば、以下のようなバッチスクリプトで、data.txt の内容を hoge.bat に渡すことができます。
```
@echo off
for /f %%a in (data.txt) do (
echo %%a | hoge.bat
)
```
上記の例では、data.txt の内容を1行ずつ読み込み、hoge.bat に渡しています。¹

237 名前:デフォルトの名無しさん mailto:sage [2023/04/14(金) 12:47:02.76 ID:ITYRpePX.net]
質問は受け側のバッチの内容だろ
送り側でfor文にする意味不明



238 名前:デフォルトの名無しさん mailto:sage [2023/04/14(金) 13:02:44.39 ID:twidN+O+.net]
処理対象がconioだった名残がたまたま残ってただけで
バッチ自体に標準入力という概念は無さそう

239 名前:デフォルトの名無しさん mailto:sage [2023/04/16(日) 15:03:53.79 ID:OSGOKcik.net]
ループ処理やif分でもカッコ内の変数スコープがおかしくなるのはどういう原理なんです?

240 名前:デフォルトの名無しさん mailto:sage [2023/04/16(日) 15:21:04.10 ID:j/ssGNNl.net]
実行する行の解釈の後に実行されるから
この行の解釈は(から)までは1行として一気に解釈される
つまり括弧の中の代入文があったとしても実行前の解釈の時点で(その時点の値で)展開されてしまう

241 名前:デフォルトの名無しさん mailto:sage [2023/04/16(日) 15:36:27.49 ID:j/ssGNNl.net]
>>237
set /?
に詳しい説明があるので読んでみること

242 名前:デフォルトの名無しさん mailto:sage [2023/04/16(日) 16:30:15.10 ID:zYIf7I3E.net]
なにをやってスコープがおかしくなったのか具体例を上げてくれないとなんとも言えないな

243 名前:デフォルトの名無しさん mailto:sage [2023/04/16(日) 16:43:43.01 ID:j/ssGNNl.net]
いやだからスコープなんて高級な概念は存在しないんだけど

244 名前:デフォルトの名無しさん mailto:sage [2023/04/16(日) 16:45:17.05 ID:Dywad+WI.net]
バッチファイルの言語仕様はウンコすぎるから
if ... call :foo "%~1"
for ... call :foo "%%~i"
とかやっといた方がミスが少ない

245 名前:デフォルトの名無しさん mailto:sage [2023/04/16(日) 16:45:38.04 ID:j/ssGNNl.net]
いやsetlocalがあったか
でもそれを使ってるんならまず自分のやってることは認識してるはずなんだが

246 名前:デフォルトの名無しさん mailto:sage [2023/04/18(火) 09:44:21.06 ID:N1MfEhNS.net]
ファイルディスクリプタの1(標準出力)と3を同時にリダイレクトすると
以降プロンプトや標準出力が表示されなくなるのはなぜでしょう?
ハング等ではなく表示されないだけで、cmdとの対話モードは続いているようです。

C:\> dir >nul 3>nul
dir  ←表示されない
dir >&2  ←表示される
winver  ←起動する

247 名前:デフォルトの名無しさん mailto:sage [2023/04/19(水) 22:45:42.84 ID:UrhLKEvZ.net]
win11 64bitの環境でどのようなフォルダを開いても
最初からファイルの並びや表示を↓のようにしたいです。
●●●●●●●●●●●
表示は「一覧」
並び替えは「名前」で「昇順」
グループで表示は「なし」
●●●●●●●●●●●
クリーンインストール直後でもbatファイルで一発で
出来るようなの教えてください



248 名前:デフォルトの名無しさん mailto:sage [2023/04/20(木) 22:07:04.72 ID:dJqrvGvM.net]
クリーンインストールでやる場合はISOイメージをカスタマイズする必要あると思うし
このスレの範疇をだいぶ超えてるような気がする
ひょっとすると外人ならbatファイル一発でやる「技」を持ってるかもしれないね

249 名前:デフォルトの名無しさん mailto:sage [2023/04/21(金) 08:48:46.19 ID:TBBX4m6H.net]
>>244
ようわからんなこれ。
標準出力の向き先が3番に切り替わってる。
4番もリダイレクトすると標準エラー出力も切り替わりっぱなしになる。

バグ利用?だけどこれ利用するとデフォルトでログ出力できるな。
echo onだとプロンプトまで記録できる。

●【バッチ】**************************
@type nul 1>nul 2>nul 3>"%~f0.log" 4>&3
echo 処理開始
ver
cd aaa
echo 処理終了
@exit /b
●【画面】****************************
処理終了
続行するには何かキーを押してください . . .
●【ログ】****************************
C:\>echo 処理開始
処理開始

C:\>ver
Microsoft Windows [Version 10.0.19044.2846]

C:\>cd aaa
指定されたパスが見つかりません。

C:\>echo 処理終了
処理終了

250 名前:デフォルトの名無しさん mailto:sage [2023/04/21(金) 08:53:12.94 ID:TBBX4m6H.net]
>>247
改行数制限に引っかかって修正した時にバッチ内容間違えた。

@type nul 1>nul 2>nul 3>"%~f0.log" 4>&3
echo 処理開始
ver
cd aaa
echo 処理終了
@echo 処理終了 >&3 & pause >&3
@exit /b

251 名前:デフォルトの名無しさん mailto:sage [2023/04/24(月) 17:00:24.74 ID:oDKRGmAI.net]
>>245
その設定にするレジストリ教えて

252 名前:デフォルトの名無しさん [2023/04/26(水) 22:20:37.49 ID:MVyBKPQf.net]
---------------
@echo off
set "parent_directories=tamachi omiya"
set "sub_directories=0001 0002 0010"
setlocal enabledelayedexpansion
for %%P in (%parent_directories%) do (
for %%S in (%sub_directories%) do (
set "combined_directory=%%P%%S"
echo RewriteEngine On > !combined_directory!.htaccess
echo RewriteBase /%%P/%%S/ >> !combined_directory!.htaccess
echo. >> !combined_directory!.htaccess
echo # Redirect only short URLs >> !combined_directory!.htaccess
echo RewriteCond %%{REQUEST_FILENAME} !-f >> !combined_directory!.htaccess
echo RewriteCond %%{REQUEST_FILENAME} !-d >> !combined_directory!.htaccess
echo RewriteRule ^^(.+)$ htdocs/$1 [L] >> !combined_directory!.htaccess
)
)
上記のようなコマンドのバッチを作った。
バッチを叩くと以下のようなhtaccessをfor分だけ出力させたい。
しかし、$文字のために、バッチがすすまない。$$としてエスケープ試してみるもできなかった。
良きアイデアないだろうか?
---------------
【tamachi0001.htaccess】

RewriteEngine On
RewriteBase /tamachi/0001/

# Redirect only short URLs
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ htdocs/$1 [L]

253 名前:デフォルトの名無しさん mailto:sage [2023/04/26(水) 22:46:13.41 ID:UfBGheQ3.net]
>>250
$の前の)がdoの閉じカッコになっちゃってる
echo RewriteRule ^^(.+^)$ htdocs/$1 [L] >> !combined_directory!.htaccess

254 名前:デフォルトの名無しさん mailto:sage [2023/04/26(水) 23:03:33.59 ID:MVyBKPQf.net]
>>251
ありがとう。確かにvscodeだと()対応の注意はなかったのに、sublimetextでは注意してる。
気づかないなあー。助かりました。勉強になります。

255 名前:デフォルトの名無しさん [2023/04/26(水) 23:43:29.63 ID:MVyBKPQf.net]
別件にて質問させてください。
バッチが出力するファイルを

RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{REQUEST_FILENAME} -d

ではなくて、

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

としたい。
どのように修正すればよいでしょうか?


------

@echo off
set "parent_directories=tamachi omiya"
set "sub_directories=0001 0002 0010"
setlocal enabledelayedexpansion

for %%P in (%parent_directories%) do (
for %%S in (%sub_directories%) do (
set "combined_directory=%%P%%S"
echo RewriteEngine On > !combined_directory!.htaccess
echo RewriteBase /%%P/%%S/ >> !combined_directory!.htaccess
echo. >> !combined_directory!.htaccess
echo # Redirect only short URLs >> !combined_directory!.htaccess
echo RewriteCond %%{REQUEST_FILENAME} !-f >> !combined_directory!.htaccess
echo RewriteCond %%{REQUEST_FILENAME} !-d >> !combined_directory!.htaccess
)
)

------

256 名前:デフォルトの名無しさん mailto:sage [2023/04/27(木) 00:51:53.98 ID:DnKcM+QL.net]
自己解決しました。
理屈がよくわかりませんが、!の直前に^^とすることでエスケープすることができました
echo RewriteCond %%{REQUEST_FILENAME} !-f >> !combined_directory!.htaccess
echo RewriteCond %%{REQUEST_FILENAME} !-d >> !combined_directory!.htaccess

echo RewriteCond %%{REQUEST_FILENAME} ^^!-f >> !combined_directory!.htaccess
echo RewriteCond %%{REQUEST_FILENAME} ^^!-d >> !combined_directory!.htaccess

お騒がせいたしました。

257 名前:デフォルトの名無しさん mailto:sage [2023/04/27(木) 01:12:28.56 ID:RXLaISm2.net]
^^



258 名前:デフォルトの名無しさん mailto:sage [2023/04/28(金) 00:51:43.20 ID:aBUvFTO3.net]
>>254
なんでだろう
^^どころか^も使わないものな

259 名前:デフォルトの名無しさん mailto:sage [2023/05/05(金) 12:47:19.73 ID:Tmh5Tg58.net]
バッチファイルをvbsに移植してってAIに投げたらやってくれたんでPythonも頼んだらこっちも成功
妙な制限から卒業できるぞ

260 名前:デフォルトの名無しさん mailto:sage [2023/05/05(金) 13:40:50.07 ID:Aaus9EG8.net]
c#がいいんじゃないか
pythonは入れてない人が殆どだろうし、c#ならwindows全員入ってる
まあ一旦コンパイルしないといけないけど

261 名前:デフォルトの名無しさん mailto:sage [2023/05/05(金) 20:08:22.78 ID:cXUEGYUP.net]
だったらC#はpowershellからコンパイルなしで使えるからpowershellがいいんじゃないか
実際powershellとC#ごっちゃにして使ってるぞ

262 名前:デフォルトの名無しさん mailto:sage [2023/05/05(金) 20:13:58.35 ID:jijjo6rD.net]
powershellはダブルクリックで動かんから個人ユーザーには向かない

263 名前:デフォルトの名無しさん mailto:sage [2023/05/05(金) 21:08:13.64 ID:oeszHJgX.net]
いやPowershellはexe化できるからダブルクリック起動も余裕だろ

264 名前:デフォルトの名無しさん mailto:sage [2023/05/05(金) 21:25:45.96 ID:Aaus9EG8.net]
powershellはイニシャルコストが高いんだよな
PC起動後初回起動で相当待たされる
よく使う人にはいいんだろうが、1ヶ月に数回とかだと苦痛なんだよ

265 名前:デフォルトの名無しさん mailto:sage [2023/05/05(金) 23:33:04.65 ID:VDYHFDsH.net]
昔はVBランタイムや
.NET Frameworkも起動遅かったよなー

266 名前:デフォルトの名無しさん mailto:sage [2023/05/06(土) 17:23:48.16 ID:gRoxw4m5.net]
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を拾うみたいな条件で引っこ抜きたいんだけど上手くいかないので何かいい方法ないかなって探してます
何かいい方法ないでしょうか

267 名前:デフォルトの名無しさん mailto:sage [2023/05/06(土) 18:44:39.95 ID:ugbjGoYF.net]
step1 50と100の両方を抜き出す
step2 複数あったらstep1に対して100を抜き出す



268 名前:デフォルトの名無しさん mailto:sage [2023/05/06(土) 18:48:10.77 ID:ugbjGoYF.net]
step1 100を抜き出す
step2 無ければ50を抜き出す

269 名前:デフォルトの名無しさん mailto:sage [2023/05/06(土) 18:58:59.94 ID:l5Xh2UOq.net]
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}}"

270 名前:デフォルトの名無しさん mailto:sage [2023/05/06(土) 19:22:29.47 ID:l5Xh2UOq.net]
こっちのが短いし判りやすいか
$hash=@{}; $json | %{ if (!$hash.Contains($_.characterID) -or $_.Level -gt $hash[$_.characterID].Level) { $hash[$_.characterID] = $_ }}; $hash.Values

271 名前:デフォルトの名無しさん mailto:sage [2023/05/06(土) 21:10:41.34 ID:UyrtVAAx.net]
機能的にはあるっぽいよ
jq "group_by(.characterID) | map(max_by(.Level))"
※動作未確認

272 名前:デフォルトの名無しさん mailto:sage [2023/05/06(土) 22:01:27.09 ID:gRoxw4m5.net]
>>267
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 名前:デフォルトの名無しさん mailto:sage [2023/05/06(土) 22:02:29.33 ID:gRoxw4m5.net]
唸ってる間に>>268-269が増えてた
ありがとう
調べたり確認してみる

274 名前:デフォルトの名無しさん mailto:sage [2023/05/07(日) 01:38:48.15 ID:OzRuG3KU.net]
> 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 名前:デフォルトの名無しさん [2023/05/09(火) 02:15:55.11 ID:ZvIGeNCt.net]
変数の値に含まれる全角のダブルクォーテーションを
半角のダブルクォーテーションに置換するにはどうすればいいですか?

setによる置換では期待通りに動作しませんでした

set BatFileTag=”test1“
set "%BatFileTag:“="%"
set "%BatFileTag:”="%"
echo %BatFileTag%

set BatFileTag=”test2“
set %BatFileTag:“="%
set %BatFileTag:”="%
echo %BatFileTag%

276 名前:デフォルトの名無しさん [2023/05/09(火) 05:44:06.79 ID:uZ4E3DcQ.net]
動くのか確認してないけど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.net]
続き

これらの方法はどれも期待通りに動作しますか?😊

ソース: Bing との会話 2023/5/9
(1) バッチで変数にダブルクオーテーションを格納したい. https://teratail.com/questions/259883.
(2) バッチファイルで変数を複数行にわけて指定したときのダブル .... https://ja.stackoverflow.com/questions/65968/%e3%83%90%e3%83%83%e3%83%81%e3%83%95%e3%82%a1%e3%82%a4%e3%83%ab%e3%81%a7%e5%a4%89%e6%95%b0%e3%82%92%e8%a4%87%e6%95%b0%e8%a1%8c%e3%81%ab%e3%82%8f%e3%81%91%e3%81%a6%e6%8c%87%e5%ae%9a%e3%81%97%e3%81%9f%e3%81%a8%e3%81%8d%e3%81%ae%e3%83%80%e3%83%96%e3%83%ab%e3%82%af%e3%82%a9%e3%83%bc%e3%83%86%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3%e3%81%ae%e6%8c%87%e5%ae%9a%e3%81%ab%e3%81%a4%e3%81%84%e3%81%a6.
(3) バッチファイルのダブルクォート地獄を回避する方法 - Qiita. https://qiita.com/pochy9n/items/7079f3f13849dcafb969.



278 名前:デフォルトの名無しさん [2023/05/09(火) 05:55:08.97 ID:uZ4E3DcQ.net]
いいえ。まだ問題があります。
サンプルのどこにも全角のダブルクォーテーションがでてきません

すみません、サンプルの全角のダブルクォーテーションは見えにくいかもしれませんが、実際にはあります。
コピーしてテキストエディタに貼り付けてみてください。
半角のダブルクォーテーションと比べると、全角のダブルクォーテーションは少し太くて長いです。😊

だそうだ
スマホだとわからんわ

279 名前:デフォルトの名無しさん [2023/05/09(火) 05:56:33.76 ID:uZ4E3DcQ.net]
バッチの中身もオレはちゃんと読んでないんでBingが意図を正しく理解したかも確認してない

280 名前:デフォルトの名無しさん [2023/05/09(火) 05:59:48.56 ID:uZ4E3DcQ.net]
リンクのコピペに失敗したやつはこれ

https://teratail.com/questions/259883?ssp=1&darkschemeovr=1&setlang=ja-JP&safesearch=moderate

https://qiita.com/pochy9n/items/7079f3f13849dcafb969?ssp=1&darkschemeovr=1&setlang=ja-JP&safesearch=moderate

281 名前:デフォルトの名無しさん mailto:sage [2023/05/09(火) 08:56:45.57 ID:bGbmh2Wb.net]
そんな難問なのか?
set BatFileTag=“test1”
set BatFileTag
set BatFileTag=%BatFileTag:“="%
set BatFileTag=%BatFileTag:”="%
set BatFileTag

282 名前:デフォルトの名無しさん mailto:sage [2023/05/09(火) 09:15:19.23 ID:TEEc9Eeb.net]
>>273
変換結果を変数に格納してないだけじゃん
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.net]
>変換結果を変数に格納してないだけじゃん

おっしゃる通りでした、そのコードで期待通り動作しました。
ありがとうございました。

284 名前:デフォルトの名無しさん mailto:sage [2023/05/09(火) 12:54:13.19 ID:0Hn95uhF.net]
ケアレスミスやね
自分もよくある

285 名前:デフォルトの名無しさん mailto:sage [2023/05/09(火) 15:10:57.87 ID:cxHUCWoc.net]
見覚えのある変数名だと思ったらDTV板の人か

286 名前:デフォルトの名無しさん [2023/05/10(水) 02:46:49.16 ID:7WScgW4R.net]
>>274
変数を`%%`で囲んで`set`コマンドで置換する場合、`%%`の前に`~`を付けるとダブルクォーテーションが除去されます

え、ホント?と思って やってみたら

バッチ パラメーターの置き換えで、パス演算子の次の使用法は無効です:
%~BatFileTag%

と出力されたんですが、できないですよね?

>>283
EDCBの 録画タグ の話でした。。

287 名前:デフォルトの名無しさん mailto:sage [2023/05/10(水) 03:43:26.68 ID:fIRqc6o3.net]
>>264
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"=>98, "Status"=>{"idx"=>2}},
{"ID"=>2, "Level"=>48, "Status"=>{"idx"=>3}},
{"ID"=>3, "Level"=>98, "Status"=>{"idx"=>5}} ]



288 名前:デフォルトの名無しさん mailto:sage [2023/05/10(水) 07:27:54.84 ID:7bNTa4KZ.net]
>>284
エラー表示で 「CALL /?」または「FOR /?」 とあるだろ
それ見ると %~ の使い方がわかるよ
どちらにせよ全角の引用符は消えない

AIがまだポンコツだし、その翻訳もおかしいので
あまり参考にならない

289 名前:デフォルトの名無しさん [2023/05/10(水) 17:07:25.20 ID:7WScgW4R.net]
>>286
ありがとうございます、ヘルプを参照しました。

%~0 で 周りを囲んだダブルクォーテーションは除去できる、

%~BatFileTag% は 構文エラー、ですね。

290 名前:デフォルトの名無しさん mailto:sage [2023/05/10(水) 19:56:46.59 ID:8YKnH4aX.net]
for文の%%iみたいな変数に入れても%0とかと同じように操作できるよ。
いずれにしても全角ダブルクォーテーションは除去できないけど

291 名前:デフォルトの名無しさん [2023/05/10(水) 23:36:37.50 ID:7WScgW4R.net]
バッチスクリプトの引数参照(?)の展開を 通常の変数でも使いたい時ありますよね。
forを使えば、わざわざ関数に渡さなくていいってことですよね。覚えておきます。

292 名前:デフォルトの名無しさん mailto:sage [2023/05/14(日) 01:53:53.57 ID:4Al5Gork.net]
ばっちこーい!

293 名前:デフォルトの名無しさん mailto:sage [2023/05/21(日) 15:26:18.55 ID:/zBPnU/J.net]
Sendtoに置いたバッチがある。
ここに複数のファイルを送り、それぞれのパスをプログラムに送りたい。
送った複数のファイル、はどう表現すればいいのでしょうか。
@echo off
for %%F in (*.jpg) do call :sub "%%F"
goto :EOF
:sub
echo "C:\hoge.exe" "%~dpnx1"
goto :EOF

sub以下は様子見コード

294 名前:デフォルトの名無しさん mailto:sage [2023/05/21(日) 15:31:45.83 ID:WLjUQB8s.net]
shift /?

295 名前:デフォルトの名無しさん mailto:sage [2023/05/21(日) 16:33:43.21 ID:uxeKp44S.net]
何したいか若干よくわからないけど、
hoge.exeに引数全部一気に与えたいなら%*と書くと全部与えられる。

そうじゃなくて、
hoge.exe %1
hoge.exe %2
...
とそれぞれを1つずつ与えたいなら
shiftを使ってずらして%1の中身が無くなるまでループさせる。

296 名前:デフォルトの名無しさん mailto:sage [2023/05/21(日) 17:33:53.16 ID:/zBPnU/J.net]
>>293
ありがとう、それがわからなかった。

何がやりたいのかわからないのはたぶん echoとpauseのところですよね(^^;
もともとはググって見つけたフォトショ関係のバッチのコピペで、「複数ファイルできます!」って
書いてあるのに1つ送っても2つ送ってもそのファイルのフォルダ全部処理しちゃうので
様子見のために書き換えて、%%Fがおかしいんじゃ?とたどり着いて詰んだところでした。

297 名前:デフォルトの名無しさん mailto:sage [2023/05/21(日) 18:06:23.90 ID:/vzELmbQ.net]
*.jpg を %* でも良さそう?



298 名前:デフォルトの名無しさん mailto:sage [2023/05/29(月) 17:17:55.21 ID:MDtfdjpW.net]
head abc.txt はエラーになるが
head abc,txt >con とすると実行できた、なぜだろう?

head.exeは2003年のもの

299 名前:デフォルトの名無しさん mailto:sage [2023/05/30(火) 09:18:57.94 ID:8/1/VW9e.net]
環境もエラーメッセージも書いてくれてないしコマンドはtypoっぽいしでさっぱりだが
head.exeの標準入出力処理やらコンソール描画エリアサイズ取得やらに問題があるが
標準出力がリダイレクトされてることでその問題のある処理をスキップできてるとかじゃないの

300 名前:デフォルトの名無しさん mailto:sage [2023/05/30(火) 09:27:21.04 ID:bxkrR6Df.net]
別のhead.exeを持ってくれば?
俺のPCに入ってた
msysの奴(2004/03/16)
Gitの奴(2017/02/14)
ではどっちもhead file名で表示される

301 名前:デフォルトの名無しさん mailto:sage [2023/05/30(火) 09:59:41.15 ID:flkBlmPK.net]
>>298
ありがとう
古すぎたんだ、取り替えよう

302 名前:SYSTEM [2023/06/02(金) 14:07:59.44 ID:eEn1Ocmqu]
@echo off

start shutdown /r /o /t 1

exit


WinREに強制移動する.cmd

303 名前:デフォルトの名無しさん [2023/06/08(木) 04:51:39.25 ID:qSJ8V+Su.net]
初心者です
一桁のだけ出力されません
set m=1 と出すにはどうしたらいいでしょうか?
よろしくお願いいたします

echo off
set MEMO_OUT=memo.bat

echo set m=333>%MEMO_OUT%
echo set m=22>>%MEMO_OUT%
echo set m=1>>%MEMO_OUT%
echo set メモ>>%MEMO_OUT%
pause

----sub.batの結果-----
set m=333
set m=22
set m=
set メモ
------------------------

304 名前:デフォルトの名無しさん [2023/06/08(木) 04:54:13.59 ID:qSJ8V+Su.net]
こちらでした

----memo.batの結果-----
set m=333
set m=22
set m=
set メモ
------------------------

305 名前:デフォルトの名無しさん mailto:sage [2023/06/08(木) 05:51:11.43 ID:/rH9ZSQw.net]
set m=^1>>%MEMO_OUT%
set "m=1">>%MEMO_OUT%

306 名前:デフォルトの名無しさん [2023/06/08(木) 07:04:40.20 ID:qSJ8V+Su.net]
304様♪
echo set m=^1>>%MEMO_OUT% で無事に解決できました!
本当にありがとうございました(*- -)(*_ _)ペコリ

307 名前:デフォルトの名無しさん mailto:sage [2023/06/08(木) 08:47:23.51 ID:vkPB32fx.net]
echo 2>>hoge.txt
みたいな事したくてハマったの思い出した



308 名前:デフォルトの名無しさん mailto:sage [2023/06/08(木) 10:00:57.29 ID:OrtrngoT.net]
自分は前置する事が多い。少数派みたいだけど。
> %MEMO_OUT% echo set m=333
>> %MEMO_OUT% echo set m=22
>> %MEMO_OUT% echo set m=1
>> %MEMO_OUT% echo set メモ

309 名前:デフォルトの名無しさん mailto:sage [2023/06/08(木) 23:07:14.14 ID:5yq6DBkZ.net]
(echo set m=1)>>%MEMO_OUT%
for %%i in ("m=333" "m=22" "m=1" "メモ") do echo set %%~i>>%MEMO_OUT%

310 名前:デフォルトの名無しさん mailto:sage [2023/06/09(金) 07:12:36.29 ID:XYYWFLgO.net]
>>306
(´・∀・`)ヘー これは初見
利用の際の注意点は無いの?

311 名前:デフォルトの名無しさん mailto:sage [2023/06/09(金) 14:04:54.27 ID:du40Kh/C.net]
マイナーってこと以外の注意点はないと思う。
しいて言えばコマンドプロンプト上だと
プロンプトの「C:\>」とくっついて見づらくなるくらい。

312 名前:デフォルトの名無しさん mailto:sage [2023/06/09(金) 14:10:41.30 ID:iiwkTFZp.net]
今までこのスレか関連スレで何度かは出てきてはいるけどね

313 名前:デフォルトの名無しさん [2023/06/10(土) 00:40:56.87 ID:ZROvKvT1.net]
バッチファイルでIPアドレスの変更をしようとしており、
変更前に現在設定されているアドレスを表示させたいです。
本来であればipconfigから抽出すれば良いのですが、ネットワーク接続されていない状況では表示されません。
netsh interface ipv4 show ipaddress "イーサネット"でIPアドレスが表示されることまでは分かったのですが、
その他とmanualで2種類表示されてしまい、manualのIPアドレスのみ抽出したいです。
また、サブネットマスクも表示させたいですが何か表示できるコマンドをご存じないでしょうか。

皆様のお力をお貸しいただきたいです。

314 名前:デフォルトの名無しさん mailto:sage [2023/06/10(土) 10:54:45.64 ID:DPE/PSj9.net]
>>311
固定IPならレジストリに保存されてるけど、抽出がめんどくさいですね。
HKLM\system\CurrentControlSet\control\network 配下から(イーサネットとか)インターフェース名のGUIDを拾って
HKLM\system\CurrentControlSet\services\Tcpip\Parameters\Interfaces 配下でGUID検索する

315 名前:デフォルトの名無しさん mailto:sage [2023/06/10(土) 15:04:03.48 ID:FuIdwErj.net]
>>308
The redirection can come anywhere on the line, so watch out for those spaces
https://devblogs.microsoft.com/oldnewthing/20170731-00/?p=96715

316 名前:デフォルトの名無しさん mailto:sage [2023/06/10(土) 16:12:52.95 ID:v3IkKBaD.net]
>>313
勉強になりました

317 名前:デフォルトの名無しさん mailto:sage [2023/06/10(土) 17:59:46.69 ID:Yvl44ooC.net]
>>312
GUID検索出てくるともうpowershellでちゃんとやった方がええな
うまくすると数行で書けるし



318 名前:デフォルトの名無しさん [2023/06/11(日) 00:20:40.75 ID:8nVmCa0A.net]
>>312
312です。ご教示いただきありがとうございます。
レジストリを確認すると確かにGUIDに応じて固定IPが設定されているのを確認できました。
しかし初心者過ぎてどうすれば値を引っ張ってこれる文になるのか分かりません。
もし可能であれば”イーサネット”のIPを引いてこれる文を教えていただけませんでしょうか。
スレ違い、勉強不足で申し訳ありません。よろしくお願いいたします。

319 名前:デフォルトの名無しさん mailto:sage [2023/06/11(日) 01:18:07.90 ID:ficsZH/3.net]
"イーサネット"もOSで別のネットワークアダプタとして認識されると末尾に番号が付くから決め打ちは危険かも

320 名前:デフォルトの名無しさん mailto:sage [2023/06/12(月) 07:36:14.80 ID:+mHefy5G.net]
PowerShell で、

$guid = "{GUID-1 〜 XXX}"

$a = "HKLM\SYSTEM\CurrentControlSet\Control\Network\{GUID-2 〜 YYY}\"+ $guid +"\Connection";
$b = "HKLM\system\CurrentControlSet\services\Tcpip\Parameters\Interfaces\" + $guid

reg query $a /v "Name";
reg query $b /v "DhcpSubnetMask"

出力
Name REG_SZ イーサネット
DhcpSubnetMask REG_SZ 255.255.255.0

321 名前:デフォルトの名無しさん mailto:sage [2023/06/13(火) 10:09:20.96 ID:RNzu8ICZ.net]
ググっても書式バラバラだわ実行したらエラーメッセージ出るわ、もうわからん助けて・・・。

やりたいこと:ファイル名ごとに渡すプログラムを変えたい。
わからないこと:
if 変数==内容(分岐処理)でいいのか、if 変数==内容 分岐処理なのかサイトによってバラバラだし
どっちにしてもelseなんて定義されてねーよばーかって出てしまう。
条件分岐の書式を教えてください。
参考にしたサイトの1つ:www.javadrive.jp/command/bat/index8.html
希望する処理内容:
処理用フォルダを丸ごとBatファイルにSendto
ファイル名にcoが含まれるJPG、Webp、PNGは、cov.exeに投げる
ファイル名にautoが含まれるJPG、Webp、PNGは、auro.exeに投げる
ファイル名にrecが含まれるJPG、Webp、PNGは、rec.exeに投げる
今書いてる内容:これでelse?は?と言われる
https://imepic.jp/20230613/364730

322 名前:デフォルトの名無しさん mailto:sage [2023/06/13(火) 10:11:36.00 ID:RNzu8ICZ.net]
まちがえた、こっち
https://imepic.jp/20230613/366750

323 名前:デフォルトの名無しさん mailto:sage [2023/06/13(火) 10:14:16.97 ID:sYfPkaoR.net]
C++でランチャー作るほうが楽そう

324 名前:デフォルトの名無しさん mailto:sage [2023/06/13(火) 10:19:37.96 ID:v41Gwse2.net]
>>319
画像が見えないけど
多分、if文が終了しててelseが単独で出てくるのでエラーになってるんだと思う
下のように書けば問題ないはず
if 変数==文字列 (
処理群
) else (
処理群
)
if 変数==文字列 処理 else 処理
if 変数==文字列 処理 else (
処理群
)

こういうのはエラーになる
if 変数==文字列 (処理)
else (命令)

325 名前:デフォルトの名無しさん mailto:sage [2023/06/13(火) 10:23:02.74 ID:xwoVSiEY.net]
見えんけどbatの分岐はgoto使え

326 名前:320 mailto:sage [2023/06/13(火) 10:32:32.52 ID:RNzu8ICZ.net]
ごめんー(::)
https://imepic.jp/20230613/377460

GOTOまぜちゃってるせいかな・・・
(これも実は初めて知った処理だったりする・・・

327 名前:デフォルトの名無しさん mailto:sage [2023/06/13(火) 10:36:13.21 ID:RNzu8ICZ.net]
書式いろいろあるんですね・・・
Perl風にelsifって書いてみたりしました(苦笑)
>if 変数==文字列 処理 else 処理
>if 変数==文字列 処理 else (
>処理群
>)
処理が1行で終わる場合は上、複数行にわたるなら下という理解でいいですか?



328 名前:デフォルトの名無しさん mailto:sage [2023/06/13(火) 10:52:25.04 ID:xwoVSiEY.net]
素人に()を使いこなすのは無理
if で * なんか使えるわけね~だろ
もっと高級な言語で作ってから出直せ

329 名前:デフォルトの名無しさん mailto:sage [2023/06/13(火) 11:10:48.21 ID:RNzu8ICZ.net]
>>326
そうなんですねorz
その辺ググっても取っ散らかってて情報が・・・なんかもう・・・ごめん
Batファイルはファイルの移動・コピー・フォルダ一括作成・formatくらいしか使ったことなくてねorz

エクスプローラでファイル名検索→複数のBatファイルとかやってるのすら面倒になったところなんだが
堪能に使えるプログラム言語はないのでもうしょうがないかなorz

330 名前:デフォルトの名無しさん mailto:sage [2023/06/13(火) 11:28:39.90 ID:v41Gwse2.net]
>>327
こんな感じでいいのでは?
:loop
set fname=%~1
shift
if not defined fname goto :eof
if "%fname:~0,2%" equ "ac" "c:\cov.exe" ~
if "%fname:~0,2%" equ "au" "c:\auro.exe" ~
timeout 1
goto :loop

又は
if "%fname:ac=%" neq "%fname%" "c:\cov.exe" ~

331 名前:デフォルトの名無しさん mailto:sage [2023/06/13(火) 13:37:35.35 ID:lkLOH6hL.net]
素直にif文書くとこんなん。※インデントは全角スペース
:loop_begin
if "%~1" == "" goto loop_end
echo,%~nx1| findstr /ri /c:"co" >nul 2>nul
if not errorlevel 1 (
  cov.exe "%~dpnx1"
) else (
  echo,%~nx1| findstr /ri /c:"auto" >nul 2>nul
  if not errorlevel 1 (
    auto.exe "%~dpnx1"
  ) else (
    echo,%~nx1| findstr /ri /c:"rec" >nul 2>nul
    if not errorlevel 1 (
      rec.exe "%~dpnx1"
    )
  )
)
shift & goto loop_begin
:loop_end

Perl知ってるなら大丈夫だと思うけど
「を含む」じゃなくて「で始まる」なら>>328か「^」を付け「/c:"^co"」とかに。

332 名前:デフォルトの名無しさん mailto:sage [2023/06/13(火) 13:47:29.71 ID:lkLOH6hL.net]
「&&」と「||」使うとこう。※記述量は減るがマイナー。
echo,%~nx1| findstr /ri /c:"co" >nul 2>nul && (
  cov.exe "%~dpnx1"
) || (
  echo,%~nx1| findstr /ri /c:"auto" >nul 2>nul && (
    auto.exe "%~dpnx1"
  ) || (
    echo,%~nx1| findstr /ri /c:"rec" >nul 2>nul && (
      rec.exe "%~dpnx1"
    )
  )
)

フラグ使うとこう。
set result=
for %%A in (rec auto co) do (
  echo,%~nx1| findstr /ri /c:"%%A" >nul 2>nul && set result=%%A
)
if "!result!" == "co" cov.exe "%%~dpnx1"
if "!result!" == "auto" auto.exe "%%~dpnx1"
if "!result!" == "rec" rec.exe "%%~dpnx1"

複数マッチする事がない、または複数マッチして複数実行してよいなら
バッチにディレクトリパス渡してこう。(gotoのループ無し)
for %%A in ("%~1\*co*") do (cov.exe "%%~A")
for %%A in ("%~1\*auto*") do (auto.exe "%%~A")
for %%A in ("%~1\*rec*") do (rec.exe "%%~A")

333 名前:デフォルトの名無しさん mailto:sage [2023/06/13(火) 16:32:40.78 ID:3egukpPD.net]
文字列に特定の文字列が含まれるかを見たいときに私なら

if not "%aaa%"=="%aaa:foo=%" (処理)

と、元の文字列の入った変数から特定の文字列を抜き取ったときに
イコールにならないことで含まれてることを判断してるんだけど
これってマイナーなのかな?

334 名前:デフォルトの名無しさん mailto:sage [2023/06/13(火) 18:38:43.90 ID:lkLOH6hL.net]
>>328もその方法だし、マイナーって事はないと思う。

if文本体だとANDとかORを表現し辛くて自分はfindstrにしがち。
今回だと拡張子の条件(jpg, jpeg, webp, png?)のいずれかにマッチしたら目的の処理、
またはいずれにもマッチしなかったらgoto next_loop、みたいな場合に楽。

335 名前:デフォルトの名無しさん mailto:sage [2023/06/13(火) 19:02:49.89 ID:/Xa1+9fb.net]
>>330
「&&」と「||」ってそういう書き方出来るんだ知らなかった

336 名前:328 mailto:sage [2023/06/14(水) 00:17:35.54 ID:l4KAyHVD.net]
>>328-332

いろんな書き方があるんですね・・・ありがとうございます。
(1)とか(2)があるとスルーされるので、また調べます。
感謝!

337 名前:デフォルトの名無しさん mailto:sage [2023/06/14(水) 01:04:20.11 ID:8vZ7BVQu.net]
PowerShell を使いな

漏れは、Ruby だけど



338 名前:デフォルトの名無しさん mailto:sage [2023/06/15(木) 07:11:35.58 ID:VQiSmQhF.net]
terapadなつい
テキストコピペでいいのになぜ画像

339 名前:デフォルトの名無しさん [2023/06/29(木) 22:56:13.24 ID:2AoYQptZ.net]
あるフォルダの中のファイルにたいして定期的にプログラムを実施したいのですが、前回実行したあと追加されたファイルに実施というロジックだとどのように実装するのがリーズナブルでしょうか?

340 名前:デフォルトの名無しさん mailto:sage [2023/06/29(木) 23:31:28.60 ID:xErdDB4N.net]
ぜんぜんわからん
まず質問をリーズナブルに書け

341 名前:デフォルトの名無しさん mailto:sage [2023/06/29(木) 23:50:20.15 ID:v2Nfxu0l.net]
>>337
プログラムを実行したファイルを削除する。

342 名前:デフォルトの名無しさん [2023/06/29(木) 23:59:37.76 ID:2AoYQptZ.net]
>>339
実行エラーした場合の対応が複雑になりそうで

343 名前:デフォルトの名無しさん [2023/06/29(木) 23:59:54.09 ID:8Orz0VrB.net]
>>337
月のはじめに自分で削除

344 名前:デフォルトの名無しさん [2023/06/30(金) 00:04:29.96 ID:0Iq5JqfB.net]
>>341
1時間間隔なので

345 名前:デフォルトの名無しさん mailto:sage [2023/06/30(金) 00:26:27.50 ID:5iDE7+iq.net]
>>340
なんで?

346 名前:デフォルトの名無しさん mailto:sage [2023/06/30(金) 00:35:49.00 ID:ow+yGKXV.net]
ファイルの総数によってもコードが変わってくるからいくつくらいのファイルを触りたいのか教えてくれ

347 名前:デフォルトの名無しさん mailto:sage [2023/06/30(金) 07:06:37.99 ID:y1MImIiE.net]
誰かが勝手にタイムスタンプをいじったりしないって前提だけど
前回の最新タイムスタンプか、そのファイル名自体をどこかに保存しておいて
それより新しいファイルだったら処理



348 名前:デフォルトの名無しさん mailto:sage [2023/06/30(金) 09:08:51.37 ID:pv7EwXK7.net]
「追加されたファイル」ってなあに?
余所にあった古いファイルをコピーしたら
更新日時は古いままだけど

349 名前:デフォルトの名無しさん mailto:sage [2023/06/30(金) 10:28:33.45 ID:u+TfOZmJ.net]
実行済のファイルは別フォルダに移動が楽だろ

350 名前:デフォルトの名無しさん [2023/06/30(金) 12:14:39.24 ID:0Iq5JqfB.net]
>>347
ですよね。
このフォルダのファイルからデータ取ってる人もいて
調整が必要で

351 名前:デフォルトの名無しさん mailto:sage [2023/06/30(金) 14:03:26.68 ID:pv7EwXK7.net]
処理後にarchive属性をオフにしたら?

352 名前:デフォルトの名無しさん mailto:sage [2023/06/30(金) 15:56:39.55 ID:YeFfrwhl.net]
現れたなら聞かれた質問にくらい答えろよ

353 名前:デフォルトの名無しさん [2023/07/01(土) 00:26:35.37 ID:xI+Y6sFQ.net]
>>348
後だし情報

354 名前:デフォルトの名無しさん mailto:sage [2023/07/01(土) 05:09:14.98 ID:nMEzWNF9.net]
タイムスタンプを記録しておく

初回は1970年以後で、年月日時分秒_1 以前のファイルを処理する。
次回は年月日時分秒_1 以後で、年月日時分秒_2 以前のファイルを処理する

355 名前:デフォルトの名無しさん mailto:sage [2023/07/01(土) 09:52:48.59 ID:UDkRE5jB.net]
追加ファイルの性質でアトリブートもタイムスタンプも使えるかどうかわからん
質問してる人がいるが回答が無いので

356 名前:デフォルトの名無しさん mailto:sage [2023/07/04(火) 17:06:41.56 ID:LIey+Zab.net]
作ってみました。行数ギリギリです。

357 名前:デフォルトの名無しさん mailto:sage [2023/07/04(火) 17:08:44.07 ID:LIey+Zab.net]
@echo off
setlocal enabledelayedexpansion
set update=update.txt
set temp=temp.txt
set ignore=%update% %temp% %~nx0
set /A num=last=0
if exist %update% (
sort /R %update% > %temp%
set /P line=< %temp%
echo 前回更新日時 !line!
if "!line:~,16!"=="%date% %time:~0,5%" (
echo 更新が早すぎます しばらくお待ちください
:loop
if "!line:~11,5!"=="%time:~,5%" goto loop
)
set last=!line:~0,4!!line:~5,2!!line:~8,2!!line:~11,2!.!line:~14,2!
) else echo 初回更新です
dir /A-D /OD | findstr /R "^20[0-9][0-9]" | findstr /V "%ignore%" > %temp%
for /F "delims=" %%f in (%temp%) do (
set line=%%f
set ftime=!line:~0,4!!line:~5,2!!line:~8,2!!line:~12,2!.!line:~15,2!
if !last! lss !ftime! (
set fname=!line:~36!
echo [処理中] !fname! (処理をこの後に入れる)
set /A num+=1
))
if !num! equ 0 (
echo 更新ファイルはありません
) else (
echo %date% %time:~0,5% >> %update%
echo !num! のファイルを更新し %update% に更新日時を追記しました
)



358 名前:デフォルトの名無しさん mailto:sage [2023/07/04(火) 17:38:18.81 ID:LIey+Zab.net]
ファイルのタイムスタンプが前回更新日時より後かどうかのみ見ています。
もしも、分まで同じであれば更新しません。
前回更新日時と現在日時が分まで同じなら、1分進むまで待ちます。
なんとなく、同じ日時が更新記録に残るというのが気持ち悪いからです。

359 名前:デフォルトの名無しさん mailto:sage [2023/07/04(火) 20:16:07.96 ID:dJR+6uCy.net]
お疲れ

360 名前:デフォルトの名無しさん mailto:sage [2023/07/04(火) 21:21:28.53 ID:+24T6cXg.net]
ファイルの取り扱いにもよるけど
タイムスタンプでの管理はあまりよくないと思う
俺は結構ちょこちょこいじっちゃうのでタイムスタンプでは新旧の区別がつかなくなることが多い

361 名前:デフォルトの名無しさん mailto:sage [2023/07/04(火) 21:30:04.96 ID:+24T6cXg.net]
あとtmp,temp環境変数の書き換え
とくにフォルダとして使ってるものをファイル名にするのは危険
cmdの世界ではtmpがダメだがtempも使わないほうが良い

362 名前:デフォルトの名無しさん mailto:sage [2023/07/04(火) 21:31:31.54 ID:9emtMuJF.net]
リーズナブルな実装とは何だったのか

363 名前:デフォルトの名無しさん mailto:sage [2023/07/04(火) 23:34:33.25 ID:LIey+Zab.net]
temp の件は setlocal を使っているとはいえ、確かにタブーみたいなので変更しました。
タイムスタンプの件は、後でいじったファイルに対して再度作業を実行するかどうかの問題ですね。
そこら辺は、質問者が条件を書いてないので不明ですが、私はいじったファイルについても再度実行
するんじゃないかなと思ったので(それに簡単なので)そうしました。
1度実行したファイルには2度と実行しないのなら、終わったファイルはリネーム(例えば頭に _ を付加)
するとかして除外するか、終わったファイルリストを書き出してそれをチェックするとかですかね。
他のフォルダへ移動するのが最もいいと思うけど、なんだか都合が悪いみたいなので。

364 名前:デフォルトの名無しさん mailto:sage [2023/07/04(火) 23:36:37.60 ID:LIey+Zab.net]
@echo off
setlocal enabledelayedexpansion
set update=update.txt
set ichiji=temp.txt
set ignore=%update% %ichiji% %~nx0
set /A num=last=0
if exist %update% (
sort /R %update% > %ichiji%
set /P line=< %ichiji%
echo 前回更新日時 !line!
set last=!line:~,4!!line:~5,2!!line:~8,2!!line:~11,2!.!line:~14,2!
if "!line:~,16!"=="!date! !time:~,5!" (
set /A sec=160-1

365 名前:!time:~6,2!
echo 更新が早すぎます !sec! 秒お待ちください
:loop
if "!line:~11,5!"=="!time:~,5!" goto loop
)
) else echo 初回更新です
dir /A-D /OD | findstr /R "^20[0-9][0-9]" | findstr /V "%ignore%" > %ichiji%
for /F "delims=" %%f in (%ichiji%) do (
set line=%%f
set fname=!line:~36!
set ftime=!line:~,4!!line:~5,2!!line:~8,2!!line:~12,2!.!line:~15,2!
if !last! lss !ftime! (
echo [処理中] !fname! (処理をこの後に入れる)
set /A num+=1
)
)
if !num! neq 0 (
echo %date% %time:~0,5% >> %update%
echo !num! のファイルを更新し %update% に更新日時を追記しました
) else echo 更新ファイルはありません
[]
[ここ壊れてます]

366 名前:デフォルトの名無しさん mailto:sage [2023/07/05(水) 06:45:40.73 ID:Ig34wRo0.net]
time /t だと 06:00 なのに echo %time% だと 6:00:00.00 になる。
なんで、%time% だと頭の 0 がスペースになるんだよ。
おかげで余計なバグができちゃったじゃないか。
というわけで、バグ取りました。って誰も見てないか・・・。

367 名前:デフォルトの名無しさん mailto:sage [2023/07/05(水) 06:55:43.15 ID:Ig34wRo0.net]
@echo off
setlocal enabledelayedexpansion
set dispskip=0
set update=update.txt
set ichiji=temp.txt
set ignore=%update% %ichiji% %~nx0
set /A num=last=0
if exist %update% (
sort /R %update% > %ichiji%
set /P line=< %ichiji%
echo 前回更新日時 !line!
set /A sec=160-1!time:~6,2!
if "!line:~,16!"=="!date! !time:~,5!" if sec gtr 2 echo 更新が早すぎます !sec! 秒お待ちください
:loop
if "!line:~11,5!"=="!time:~,5!" goto loop
set last=!line:~,4!!line:~5,2!!line:~8,2!.!line:~11,2!!line:~14,2!
if "!last:~9,1!"==" " set last=!last:~,9!0!last:~10!
) else echo 初回更新です
dir /A-D /OD | findstr /R "^20[0-9][0-9]" | findstr /V "%ignore%" > %ichiji%
for /F "delims=" %%f in (%ichiji%) do (
set line=%%f
set fname=!line:~36!
set ftime=!line:~,4!!line:~5,2!!line:~8,2!.!line:~12,2!!line:~15,2!
if !last! lss !ftime! (
echo [処理中] !fname! (処理をこの後に入れる)
set /A num+=1
) else if %dispskip% neq 0 echo スキップ !fname!
)
if !num! neq 0 (
echo !date! !time:~,5! >> %update%
echo !num! のファイルを更新し %update% に更新日時を追記しました
) else echo 更新ファイルはありません



368 名前:デフォルトの名無しさん mailto:sage [2023/07/05(水) 12:49:58.80 ID:Ig34wRo0.net]
よく見ると ! ではさむのを忘れとるじゃないか。

if "!line:~,16!"=="!date! !time:~,5!" if sec gtr 2 echo 更新が早すぎます !sec! 秒お待ちください

これは正しくはこうですね。(2秒以下の場合でも表示されていただけ)

if "!line:~,16!"=="!date! !time:~,5!" if !sec! gtr 2 echo 更新が早すぎます !sec! 秒お待ちください

369 名前:デフォルトの名無しさん mailto:sage [2023/07/05(水) 12:59:13.87 ID:jlkBTxWV.net]
powershellで書いたら1~数行だね
ふぅ

370 名前:デフォルトの名無しさん mailto:sage [2023/07/05(水) 13:43:04.59 ID:hRO8F47X.net]
数行なら書いて差し上げたら
もう見ていないかも知れないけど

371 名前:デフォルトの名無しさん mailto:sage [2023/07/05(水) 18:25:05.99 ID:4rZ7+jZr.net]
>>366
スレ違いとかいわないから後学のために記載して

372 名前:デフォルトの名無しさん mailto:sage [2023/07/05(水) 23:14:29.51 ID:TBtlNfRd.net]
バッチファイル不具合あるあるの日付またぎの対処が見当たらないな
やり直し

373 名前:デフォルトの名無しさん mailto:sage [2023/07/06(木) 00:41:50.43 ID:X7484ET/.net]
あぁ、もしかして、あれか、最後に update.txt に日付と時刻を追記する部分で、日付を取得した後、
時刻を取得する際に翌日になっているというまさに奇跡のタイミングのことを言ってるのか?
そんな時間にバッチを動かすとも思えんし、実際にその状態を発生させようと思っても起こらないだろう。
そのような超レアケースに無駄に頭と行を使うのはアホらしいが、まぁ、やってやるよ。

set date0=!date!
set time0=!time!
if not !date0!==!date! if !time0:,2! equ 0 set date0=!date!
echo !date0! !time0:~,5! >> %update%

はい、アップデート完了!

374 名前:デフォルトの名無しさん mailto:sage [2023/07/06(木) 00:44:25.38 ID:X7484ET/.net]
ごめん、~ が抜けてた。

set date0=!date!
set time0=!time!
if not !date0!==!date! if !time0:~,2! equ 0 set date0=!date!
echo !date0! !time0:~,5! >> %update%

375 名前:デフォルトの名無しさん mailto:sage [2023/07/06(木) 00:50:56.85 ID:X7484ET/.net]
まぁ、実際はその if 以下へたどりつくことは決してないだろうから、間違えていても同じかもな。

376 名前:デフォルトの名無しさん mailto:sage [2023/07/06(木) 00:56:57.29 ID:X7484ET/.net]
よく考えたらこれでも同じか。

set date0=!date!
set time0=!time!
if !time0:~,2! equ 0 set date0=!date!
echo !date0! !time0:~,5! >> %update%

377 名前:デフォルトの名無しさん mailto:sage [2023/07/06(木) 07:56:07.79 ID:kQU1BcI/.net]
考慮不要なレアケースではない。
例えば自ホストの時計がジョブスケジューラサーバ等の時計より少し遅れていると発生する。
「サンプルコードだから入れてない」なら分かる。



378 名前:デフォルトの名無しさん mailto:sage [2023/07/06(木) 10:18:12.37 ID:X7484ET/.net]
そんなのバッチの中で対応するより、自動バッチ実行する時刻を 0時にしなければいい。

そもそも、同じシステム上の同じバッチの同じ行で、date を取得した後 time を取得したら
日付が変わっていましたなんて、レア中のレア。
チャンスは1日に1回しかないし、発生させようと思ってやってみても絶対に無理だろ。
逆に、万一発生したらお祝いのメッセージを表示させたいぐらいだわ。

set date0=!date!
set time0=!time!
if not !date0!==!date! if !time0:~,2! equ 0 (
set date0=!date!
echo すばらしい!奇跡的なタイミング!おめでとう!
echo 0123456789a | choice /C a > nul
)
echo !date0! !time0:~,5! >> %update%

379 名前:デフォルトの名無しさん mailto:sage [2023/07/06(木) 11:06:32.28 ID:X7484ET/.net]
対策なしの 1行だった時よりも、対策して

380 名前:sを分けたことで、現象の発生率は上がるだろう。
それでも、実際に現象を発生させて動作検証をするのは絶対に無理だな。
まぁ、これでいいんじゃね?ただ、さすがに 10回ビープ音を鳴らすのはやりすぎたかな?
[]
[ここ壊れてます]

381 名前:デフォルトの名無しさん mailto:sage [2023/07/06(木) 17:32:04.66 ID:T1YQhEvz.net]
簡単バッチ。初回は処理しない。
2回目からendより新しいファイルを処理。

@echo off & chcp 65001 & set "a=begin" & set "b=end" & set "c="
if not exist "%b%" copy nul "%b%" & timeout /t 1
copy nul "%a%"
for /f "delims="eol^= %%i in ('dir /a-d-s-h /b /o-d') do (
if "%%i"=="%b%" (goto x) else if "%%i"=="%a%" (set c=1) else (
if defined c hoge.exe "%%i"))
:x
del "%b%" & ren "%a%" "%b%" & pause

382 名前:デフォルトの名無しさん mailto:sage [2023/07/06(木) 18:41:00.40 ID:X7484ET/.net]
それだと初回実行時より前のタイムスタンプのファイルは決して処理されないじゃん。
てか、コードページを変えたら戻しとけ。

383 名前:デフォルトの名無しさん mailto:sage [2023/07/06(木) 18:47:20.96 ID:X7484ET/.net]
いや、それより、一番の問題はファイルを処理したらそのファイルのタイムスタンプ変わるから、
毎回同じファイルを処理してしまうんじゃね?これはひどい。

384 名前:デフォルトの名無しさん mailto:sage [2023/07/06(木) 19:55:42.19 ID:T1YQhEvz.net]
すまん。書き直した。

@echo off & chcp 65001 & set "b=end"
for /f "delims="eol^= %%i in ('dir /a-d-s-h /b /o-d') do (
if "%%i"=="%b%" (goto x) else echo hoge.exe "%%i")
:x
copy nul "%b%" & chcp 932

これ、バッチ処理中に追加ファイルあると不味いな

385 名前:デフォルトの名無しさん mailto:sage [2023/07/06(木) 22:30:39.49 ID:X7484ET/.net]
早速の修正お疲れ様。
今回のは処理後即画面消える以外問題ないようだね。

で、勝手にいじらせてもらってリスト方式に変えてみた。
hoge.exe で処理したファイルの名前を list.txt に追記。
再度処理したければ、list.txt のそのファイルの行をエディタで削除。
これだと、バッチ処理中の追加ファイル問題も起こらない。

@echo off
chcp 65001
rem skip したファイルの名前を表示するフラグ
set f=1
set t=list.txt
if not exist %t% copy nul %t% > nul
for /f "delims="eol^= %%i in ('dir /a-d-s-h /b') do (
find "/%%i/" %t% > nul
if errorlevel 1 (
echo hoge.exe "%%i"
rem このバッチ中で処理する場合はここに入れる
echo /%%i/>> %t%
) else if %f% neq 0 echo skip "%%i"
)
pause
chcp 932

ところで、コードページを変えている理由は何?
hoge.exe に渡すファイル名関係か何か?

386 名前:デフォルトの名無しさん mailto:sage [2023/07/06(木) 22:32:33.96 ID:gWNyo9yQ.net]
最近はファイル名にユニコード文字を使うことも多いからなあ

387 名前:デフォルトの名無しさん mailto:sage [2023/07/06(木) 22:54:45.39 ID:T1YQhEvz.net]
どうもありがとう。
コードページはコマンド出力に影響する。
932だとユニコード特有な文字は変数に正しく入らない。
for %%i in (*) だと問題ないけど日時ソートされないし。
コードページが変わると画面が一旦消えるのが厄介。
65001だとバッチファイルの文字コードに注意。



388 名前:デフォルトの名無しさん mailto:sage [2023/07/06(木) 23:08:10.36 ID:X7484ET/.net]
高度なコードの解説ありがとう。
ファイル名には普通の半角文字しか使わないので知らなかった。
そういう場合については変えなくていいということかな?

389 名前:デフォルトの名無しさん mailto:sage [2023/07/06(木) 23:12:39.29 ID:T1YQhEvz.net]
コマンドのリダイレクトで化けない文字なら問題ないはず

390 名前:デフォルトの名無しさん mailto:sage [2023/07/07(金) 04:34:24.45 ID:KFogdpBJ.net]
おやじギャグ

391 名前:デフォルトの名無しさん mailto:sage [2023/07/07(金) 07:40:59.89 ID:T33gGQqj.net]
こうやって、自分自身と list.txt を除外しておけばよかったわ。
他にも除外したいファイルがあったらファイル名の前後に / つけて list.txt に書き足せばいい。
一応、こんな風に / で区切れば、1行に複数のファイル名が書けるよ。
あ、もちろん、ワイルドカードは使用できませんので念のため。

if not exist %t% echo /%~nx0/%t%/> %t%

392 名前:デフォルトの名無しさん mailto:sage [2023/07/07(金) 10:20:29.14 ID:tybFBPle.net]
誰も使わんから大丈夫だよ

393 名前:デフォルトの名無しさん mailto:sage [2023/07/07(金) 10:41:17.49 ID:EBn5GntH.net]
特殊だよね
普通なら処理済のサブフォルダでも作って移動させとくよ
あと個人的に使うならattributeの属性でやるかもしれん

394 名前:デフォルトの名無しさん mailto:sage [2023/07/07(金) 11:39:17.55 ID:xjbAveHj.net]
曖昧な質問にここまで労力をかけるのか

395 名前:デフォルトの名無しさん mailto:sage [2023/07/07(金) 13:22:29.08 ID:vTnbMP+F.net]
アホだなーって思いながら見てたが
ファイルスタンプや日付関係はpowershellでやったら一瞬で終わるから検討しなよ

396 名前:デフォルトの名無しさん mailto:sage [2023/07/07(金) 14:01:04.13 ID:tybFBPle.net]
バッチファイルが糞すぎるだけでその程度なら別にvbs(wsh)でもいいけどな

397 名前:デフォルトの名無しさん mailto:sage [2023/07/07(金) 14:50:24.72 ID:T33gGQqj.net]
このスレへ書かれたわけだから、敢えてバッチファイル縛りのマゾプレイしてるけど、
何使ってもいいのなら、一番長く使ってきて慣れている C で書くよ。高速だし。



398 名前:デフォルトの名無しさん mailto:sage [2023/07/07(金) 18:37:24.24 ID:GxNDHmP5.net]
俺はC++

399 名前:デフォルトの名無しさん mailto:sage [2023/07/07(金) 18:42:51.15 ID:KFogdpBJ.net]
>>393
確かにマゾにピッタリだよ、バッチ

400 名前:デフォルトの名無しさん mailto:sage [2023/07/07(金) 20:54:22.80 ID:62nZLiJF.net]
昔はまともなコンパイラなんて何万円もしたからな
バッチなんて使っているのはその世代だろ

401 名前:デフォルトの名無しさん mailto:sage [2023/07/08(土) 00:17:19.33 ID:7l9oEDc+.net]
オプションや設定で1回のバッチでは指定ソフトが1回しか起動しないようにってできないでしょうか

402 名前:デフォルトの名無しさん mailto:sage [2023/07/08(土) 01:48:11.75 ID:8phSh46w.net]
>>385
dir > con で ? 文字になるファイル名だろ

403 名前:デフォルトの名無しさん mailto:sage [2023/07/08(土) 09:46:44.59 ID:l5c+v8IK.net]
バッチ書いてて一番むかつくのは、0 で始まる数字(0x 以外)は 8 進数扱いになる点。
だから、%time% から分や秒を取り出して計算に使おうとして、例えば
set /a s=60-%time:~6,2%
と書いたら、08秒と 09秒の時に「無効な数字です」と怒られるので
set /a s=160-1%time:~6,2%
とか書くことになる。8進数は滅多に使わないから、それより 2 進数に対応しろと言いたい。
%time% で時間の 10 の位が 0 の時スペースになるのは、8進数になるのを防ぐためだろう。

404 名前:デフォルトの名無しさん mailto:sage [2023/07/08(土) 10:18:28.62 ID:iRLmrC8y.net]
いまさら何をいってもcmdは変わらん。署名が変わるだけ
ターミナルはwtが追加されたけど

405 名前:デフォルトの名無しさん mailto:sage [2023/07/08(土) 19:09:21.78 ID:wtJKE3gc.net]
>>396
Zortech C++ 1.0持ってたけど
バッチはバッチ
使い分けてたよ

406 名前:デフォルトの名無しさん mailto:sage [2023/07/08(土) 19:10:18.13 ID:wtJKE3gc.net]
mifes起動するのにいちいちspawnとか
そういうマゾプレーはしてなかった

407 名前:デフォルトの名無しさん mailto:sage [2023/07/09(日) 07:40:38.97 ID:oyETgJfu.net]
自分が使っていたのは VZ Editor だったな。
バイトやってたところのシステムは CP/M (80) で WordMaster を使ってた。



408 名前:デフォルトの名無しさん mailto:sage [2023/07/23(日) 13:16:59.81 ID:zPqD9Olc.net]
実現したいこと:Windowsのデバイスマネージャでデバイスの有効無効を判定した上で切り替えたい
考えたこと :devcon status [ID] で条件判定して有効無効切り替えられるのでは?
内容

devcon status [ID]
でデバイスの状態は表示される

例 有効の場合
>devcon status "USB\VID_9886&PID_0038&REV_0000&MI_00"
USB\VID_9886&PID_0038&MI_00\B&9AE5250&0&0000
Name: Astro MixAmp Pro Voice
Driver is running.
1 matching device(s) found.

例 無効の場合
devcon status "MLX4\ConnectX-3_Eth"
MLX4\CONNECTX-3_ETH\9&1A1922BF&0&01
Name: Mellanox ConnectX-3 Ethernet Adapter #2
Device is disabled.
1 matching device(s) found.


なので
Driver is running. なら devcon disable [ID] でデバイスを無効に
Device is disabled. なら devcon Enable [ID] でデバイスを有効 に切り替えたいと考えています

使い方が間違ってなければ %ERRORLEVEL% での戻り値はなさそうなので
実行した際に表示される画面等から 文字列検索かけて条件分岐みたいなことをできればいいなと思っています

別にバッチにこだわってることは無いのでもしほかに手っ取り早く実現できる方法等あったらアドバイスいただけると嬉しいです

409 名前:デフォルトの名無しさん mailto:sage [2023/07/23(日) 21:05:51.47 ID:JLqJNtpp.net]
set id="~"
SETLOCAL ENABLEDELAYEDEXPANSION
FOR /F "delims=" %%i IN ('devcon status !id!') DO (
set a=%%i
if "!a!" NEQ "!a:Driver is running=!" devcon disable !id! & goto :eof
if "!a!" NEQ "!a:Device is disabled=!" devcon enable !id! & goto :eof
)

管理者権限で実行
複数の matching の場合はどうなるか知らない

410 名前:デフォルトの名無しさん mailto:sage [2023/07/24(月) 14:53:52.19 ID:NSMDQXn9.net]
もぉえぇよデブコン

411 名前:デフォルトの名無しさん mailto:sage [2023/07/24(月) 18:12:41.71 ID:BcRhQVe4.net]
最初にデバイスマネージャを開くなら
そこで指定した方が早いんじゃね
なぜバッチ?

412 名前:デフォルトの名無しさん mailto:sage [2023/07/24(月) 23:51:25.15 ID:wZUfbAlM.net]
WMI(CIM)が楽かな。
powershellでもVBScriptでもwmicでもお好きなもので。

PowerShell版:
$enabledCd = 0
$disabledCd = 22
$methodName = $null
$device = Get-CimInstance -Query 'select * from Win32_PnpEntity where Name = "Fax"'
if ($device.Status -eq 'OK' -and $device.ConfigManagerErrorCode -eq $enabledCd) {
  $methodName = 'Disable'
}
elseif ($device.Status -eq 'Error' -and $device.ConfigManagerErrorCode -eq $disabledCd) {
  $methodName = 'Enable'
}
if (! [string]::IsNullOrEmpty($methodName)) {
  $result = Invoke-CimMethod -InputObject $device -MethodName $methodName
  $result
}

ワンライナー版:
powershell -c "$d=gcim -cl Win32_PnpEntity -f 'Name=''Fax'''; $s,$c=$d.Status,$d.ConfigManagerErrorCode; if($n=if($s -eq 'OK' -and $c -eq 0){'Disable'}elseif($s -eq 'Error' -and $c -eq 22){'Enable'}){$d|icim -m $n}"

413 名前:デフォルトの名無しさん mailto:sage [2023/07/24(月) 23:59:01.49 ID:wZUfbAlM.net]
「楽」って書いたけど別に楽ではないな。
devcon入ってない場合に入れなくて済むくらいか。

414 名前:デフォルトの名無しさん mailto:sage [2023/07/25(火) 07:07:55.47 ID:xE3c+p8T.net]
>>409
pnputilもあるでよー

415 名前:デフォルトの名無しさん mailto:sage [2023/07/25(火) 14:01:51.30 ID:ES/uzWz0.net]
vbsで動くっぽいし、それが一番軽いかな
バッチ 行解釈が遅い
PS 起動が遅い

416 名前:デフォルトの名無しさん mailto:sage [2023/07/26(水) 01:41:27.08 ID:HHyO4+3x.net]
>>405 >>408
ありがとうございます

417 名前:デフォルトの名無しさん [2023/08/24(木) 17:51:23.10 ID:C9P8zR3M.net]
copyってコピー元ファイルがない時は標準出力にコピー先のフォルダがない場合は標準エラー出力にエラーメッセージ出るのか?
何のため…



418 名前:デフォルトの名無しさん mailto:sage [2023/08/24(木) 21:56:13.39 ID:W+JHQ2GG.net]
ここはコマンド七不思議を議論するスレじゃねえんだよハゲ

419 名前:デフォルトの名無しさん [2023/08/25(金) 00:42:24.04 ID:6hVx8Trp.net]
シェルスレでは七不思議も話題にできるのに

420 名前:デフォルトの名無しさん mailto:sage [2023/08/25(金) 01:13:18.62 ID:icN/kxtu.net]
ハゲじゃない人は何を議論したいのか教えて下さい

421 名前:デフォルトの名無しさん [2023/08/25(金) 12:27:27.06 ID:8hrP4A7s.net]
場合分け出来るので、使う人にとって便利だから

422 名前:デフォルトの名無しさん [2023/08/25(金) 12:27:29.53 ID:8hrP4A7s.net]
場合分け出来るので、使う人にとって便利だから

423 名前:デフォルトの名無しさん [2023/08/25(金) 13:01:08.75 ID:6hVx8Trp.net]
エラーはエラーなんだから標準エラー出力に出てくれないと困る

424 名前:デフォルトの名無しさん mailto:sage [2023/08/25(金) 13:11:39.69 ID:HBsggyAu.net]
バッチに書く場合は余計な出力はnulへリダイレクトするし
エラー検出するならerrorlevelしか見ない
終わり

425 名前:デフォルトの名無しさん mailto:sage [2023/08/25(金) 14:15:11.86 ID:WAOpDjEy.net]
でもエラーでもERRORLEVELが0以外にならないコマンドもあるんだよね。
例えば掴まれてるファイルをdelコマンドで削除しようとした場合とか。

426 名前:デフォルトの名無しさん mailto:sage [2023/08/25(金) 15:30:23.51 ID:vih/yj+S.net]
予期していないエラーはトラップ出来ない
当たり前の事

427 名前:デフォルトの名無しさん [2023/08/26(土) 14:15:52.99 ID:EQIr/PqP.net]
del してエラー出てなくて
でもファイルはまだあるみたいな
どうやったら消せるねん



428 名前:デフォルトの名無しさん mailto:sage [2023/08/31(木) 19:15:12.69 ID:1WyUQh63.net]
バッチではなくコマンドプロンプトの話なんだが、バッチを書くまでもないやってとき、
set a=
for %f in ( *.txt ) do (set a=%~nxf) & call move "%f" "%a:HOGE=HAGE%"
みたいにやるんだけど、
これやるとウィンドウタイトルが実行したcall文になってしまう
都度title cmdで戻してるけど、なんか気持ち悪いので、設定で最初からならないようにってできないだろうか

429 名前:デフォルトの名無しさん [2023/09/01(金) 07:05:11.31 ID:HKoCoDlN.net]
ヘルプを見ると分かるように call はバッチを呼び出すコマンドなんだよ
バッチ以外のコマンドを呼び出すとタイトルにゴミが残るんだよ

430 名前:デフォルトの名無しさん mailto:sage [2023/09/01(金) 11:48:43.40 ID:v7f2MrOL.net]
set a=
for %f in ( *HOGE*.txt ) do (set a=%~nxf) & cmd/c move "%f" "%a:HOGE=HAGE%"

431 名前:デフォルトの名無しさん mailto:sage [2023/09/01(金) 12:03:20.71 ID:haHsElfO.net]
俺からしたら書くまでもないやを超えてる長さに見える

432 名前:デフォルトの名無しさん [2023/09/01(金) 14:00:21.38 ID:HKoCoDlN.net]
call を cmd /c にするといいのか

433 名前:デフォルトの名無しさん [2023/09/01(金) 14:16:49.32 ID:8Q6o7DlX.net]
cmd /k

434 名前:デフォルトの名無しさん [2023/09/19(火) 16:40:50.05 ID:w0AoFkn5.net]
質問スレからこのスレを誘導してもらいました
誰かわかる方いたらお願いします

https://i.imgur.com/rKbomtc.png
画像の様な物を作りたいです
フォルダAとその下のa.b.cまではは既に作成されています
後から1.2.3の空フォルダ階層をまとめて追加したい状態です
コマンドプロンプトやバッチ?で簡単に作ることはできませんか?

435 名前:デフォルトの名無しさん mailto:sage [2023/09/19(火) 17:51:31.66 ID:nN7HbMfx.net]
単に1.2.3のテンプレフォルダ&ファイルを用意して
対象フォルダにコピーするだけに聞こえるけど
コピー先となるフォルダが大量にあるから手動コピーが面倒とかそういう話?

436 名前:デフォルトの名無しさん [2023/09/19(火) 18:38:51.86 ID:/gzRoJ4w.net]
>>431
はい
言われた通りに手動でやっていたんですが
仰る通りabc…の量が実際にはzで終わらない数百レベルなのです

437 名前:デフォルトの名無しさん mailto:sage [2023/09/19(火) 20:18:27.57 ID:nN7HbMfx.net]
for使ってコピー先を読み込みつつxcopyでどう。
参考:https://www.javadrive.jp/command/bat/index9.html

例えばAの下に下記バッチ置いて実行

for /d %%a in (*) do (
xcopy コピー元 %%a
)

関係ないフォルダとか色々混ざってるなら
文字列でフィルタするなり事前にテキストで
リスト作るなりした方がいいだろうけど。



438 名前:デフォルトの名無しさん mailto:sage [2023/09/19(火) 20:19:07.60 ID:nN7HbMfx.net]
for使ってコピー先を読み込みつつxcopyでどう。
参考:https://www.javadrive.jp/command/bat/index9.html

例えばAの下に下記バッチ置いて実行
リスト作るなりした方がいいだろうけど。
for /d %%a in (*) do (
xcopy コピー元 %%a
)

関係ないフォルダとか色々混ざってるなら
文字列でフィルタするなり事前にテキストでリスト作っておくなり。

439 名前:デフォルトの名無しさん mailto:sage [2023/09/19(火) 20:40:00.00 ID:+wkqTEPn.net]
>>430
何がしたいのかいまいちわかってないけど空フォルダ作りたいだけならこう
フォルダAをbatにD&Dして使う

cd "%~1"
for /d %%i in (*) do (
mkdir "%%~i\1"
mkdir "%%~i\2"
mkdir "%%~i\3"
)
pause

440 名前:デフォルトの名無しさん [2023/09/19(火) 22:27:32.71 ID:gURMcAfl.net]
うおおおおおおお!!!!
できましたありがとうございます!
お二人のおかげです!

441 名前:デフォルトの名無しさん mailto:sage [2023/09/20(水) 00:13:50.00 ID:YkzHQ7up.net]
xcopy は知らない。
普通は、robocopy でしょ?

442 名前:デフォルトの名無しさん mailto:sage [2023/09/20(水) 02:10:11.18 ID:vY1uP1tv.net]
そんなのMS-DOSで使えないじゃん

443 名前:デフォルトの名無しさん mailto:sage [2023/09/20(水) 07:45:17.50 ID:2uRYZGK4.net]
それな

444 名前:デフォルトの名無しさん [2023/09/21(木) 07:02:31.48 ID:VtU3IO45.net]
普通のwin10で utf8のファイルに fc を使うと派手に文字化けします
文字エンコードなどはどこで指定すればよいのでしょうか?

445 名前:デフォルトの名無しさん [2023/09/21(木) 16:42:57.64 ID:2fMT8T96.net]
chcp 932

446 名前:デフォルトの名無しさん mailto:age [2023/10/03(火) 21:23:54.04 ID:Z09KwkqG.net]
神様教えて下さい

xcopy /D:[MM]/[DD]/[YY]
で指定した日付以降のファイルをコピーできるけど
x日前より新しいファイルのみコピーしたい時の方法はない?

447 名前:デフォルトの名無しさん mailto:sage [2023/10/04(水) 11:25:24.03 ID:Ru3hWGvF.net]
Robocopy の /MAXAGE



448 名前:デフォルトの名無しさん mailto:sage [2023/10/04(水) 12:20:07.48 ID:Wr02smam.net]
5chなんでこんなに重いん?いつまでこの重いの続くん?

449 名前:デフォルトの名無しさん mailto:sage [2023/10/04(水) 12:29:43.90 ID:UHUx/6V1.net]
なんで俺に聞くの?

450 名前:デフォルトの名無しさん mailto:sage [2023/10/04(水) 13:11:28.12 ID:Wr02smam.net]
いや、お前には聞いてない

451 名前:デフォルトの名無しさん mailto:sage [2023/10/06(金) 09:10:25.11 ID:u9U/aciQ.net]
5ch攻撃してる人が飽きるまで。

452 名前:デフォルトの名無しさん mailto:age [2023/10/09(月) 15:26:51.31 ID:gPLHWilL.net]
神様教えて下さい

dir のオプションで/b /s 付けた時に
フルパス名が辞書順になるオプションってどれ?
/on /ogとかあるけど
思うようにならない

453 名前:デフォルトの名無しさん [2023/10/09(月) 17:55:27.25 ID:416rm9Ab.net]
/q

454 名前:デフォルトの名無しさん mailto:sage [2023/10/10(火) 11:13:06.14 ID:GmlcHfbX.net]
「VBScript」は非推奨に、将来のWindowsリリースで削除
https://forest.watch.impress.co.jp/docs/news/1537619.html

batファイルはどうなる?

455 名前:デフォルトの名無しさん mailto:sage [2023/10/10(火) 11:26:18.76 ID:cUy975D5.net]
>>450
糞過ぎる

456 名前:デフォルトの名無しさん mailto:sage [2023/10/10(火) 11:37:38.54 ID:l0kLdmnh.net]
JScriptというかWindowsScriptHostは生き残るのか?

457 名前:デフォルトの名無しさん mailto:sage [2023/10/10(火) 18:15:49.98 ID:dUGfQnTA.net]
なんで5chこんなに重いん?この重いのいつまで続くん?



458 名前:デフォルトの名無しさん mailto:sage [2023/10/11(水) 07:20:10.03 ID:x54NWWVS.net]
>>450
EdgeのIEモードが2029までだからそれまでは使えるという予想があったけど
機能の有効化で使えるならどうでもいいわ

459 名前:デフォルトの名無しさん mailto:sage [2023/10/11(水) 08:26:32.52 ID:mMAmsq6k.net]
ネットは心の鏡
お前の心が重いのだ

460 名前:デフォルトの名無しさん mailto:sage [2023/10/11(水) 13:00:48.19 ID:yI6tEEU8.net]
textファイル1に
a
b
c
d
が入ってて
textファイル2に
1
2
3
4
が入ってて

連結して
a1
b2
c3
d4
にしたいけど
dosコマンドだけでは無理?

461 名前:デフォルトの名無しさん mailto:sage [2023/10/12(木) 15:02:33.47 ID:DS7FO2PL.net]
>>456
無理ではないがコマンドプロンプト開いて1行のコマンドで書くのはとても面倒だからバッチファイル書いたほうがいい

462 名前:デフォルトの名無しさん mailto:sage [2023/10/12(木) 21:58:11.30 ID:ZXm8+EHB.net]
powershell -c "gc textファイル1, textファイル2 | group readcount | foreach{$_.group -join ''}"
a1
b2
c3
d4

463 名前:デフォルトの名無しさん mailto:sage [2023/10/13(金) 11:28:13.45 ID:eHigHg14.net]
>>458
'-join' 演算子に続けて値の式を指定する必要があります。

って警告が出ます

464 名前:デフォルトの名無しさん mailto:sage [2023/10/13(金) 17:19:46.92 ID:5yGgcXlN.net]
「''」と「"」を見間違えてるのでは

465 名前:デフォルトの名無しさん [2023/10/29(日) 22:58:43.01 ID:4fxrkRUI.net]
環境変数を;区切りで改行して出力したくて
for /F "delims=;" %i in ("%PATH%") do echo %i
としたのですが最初の一つしか出力されません
何がダメなんでしょうか...

466 名前:デフォルトの名無しさん mailto:sage [2023/10/30(月) 00:54:06.32 ID:S4fhwBsv.net]
ダブルクォーテーションで囲まれた"%PATH%"が1つの引数としてForに渡されて1つ目の区切り文字に達するまでを出力してるからそうなる

1つずつ取り出したいならダブルクォーテーションを消せば良いがそれだと半角スペースも区切り文字に判定されるから
簡単にやろうと思ったらまず半角スペースを別の文字に置換してからダブルクォーテーション無しで渡してその後半角スペースを元に戻すとかかな

467 名前:デフォルトの名無しさん mailto:sage [2023/10/30(月) 01:46:36.18 ID:dhg2pdyL.net]
"%PATH%"が一行なのでforループも1回しか繰り返さないってだけ



468 名前:デフォルトの名無しさん mailto:sage [2023/10/30(月) 02:13:56.37 ID:dhg2pdyL.net]
delimsの区切り記号指定は、
for /F "tokens=1-3 delims=;" %i in ("%PATH%") do echo %i,%j,%k
とか1行の中で複数項目に分ける場合に使う
区切り記号でループさせることは不可能

469 名前:デフォルトの名無しさん mailto:sage [2023/10/30(月) 03:27:22.35 ID:dhg2pdyL.net]
興が乗ったので作ってみた
@echo off
SETLOCAL EnableDelayedExpansion
SET LF=^


SET splitted_path=%PATH:;=!LF!%
for /f "tokens=*" %%i in ("!splitted_path!") do echo,%%i

470 名前:デフォルトの名無しさん mailto:sage [2023/10/30(月) 06:58:07.09 ID:EuHHvGeq.net]
バッチと関係ないけどpath変数のフォルダ名に
;文字が入ってたらwindowsの動作はどうなるんだろう
"で囲めばいいだけなのかな

471 名前:デフォルトの名無しさん mailto:sage [2023/10/30(月) 13:19:36.99 ID:dhg2pdyL.net]
for文も不要だった
@echo off
setlocal EnableDelayedExpansion
for /f "delims=N" %%i in ('cmd /u /c echo 不') do set CR=%%i
set LF=^


SET splitted_path=%PATH:;=!CR!!LF!%
echo,!splitted_path!

472 名前:デフォルトの名無しさん [2023/10/30(月) 23:23:37.40 ID:oqTBGQIx.net]
皆さんありがとうございます参考になりました。
気軽に使いたかったのでこんな感じで雑に実現しました
@echo off
for %%i in ("%PATH:;=";"%") do echo %%i
pause

毎回環境変数ウィンドウ開くの面倒だからcliで見やすく確認できないかなーと気軽に始めたのですがbatスクリプト難しいですね
遅延展開とか初めて聞きましたw

473 名前:デフォルトの名無しさん mailto:sage [2023/10/31(火) 06:54:11.36 ID:9EMrUdB9.net]
遅延にしたら!が変わる
!があると^も変わる

474 名前:デフォルトの名無しさん mailto:sage [2023/10/31(火) 07:18:54.11 ID:1/1CCAX6.net]
バッチは不毛すぎる
使うのは最小限に留めろ

475 名前:デフォルトの名無しさん mailto:sage [2023/10/31(火) 07:44:42.03 ID:/7M4GG46.net]
頑張りすぎると無毛になる

476 名前:デフォルトの名無しさん mailto:sage [2023/10/31(火) 08:59:44.07 ID:5Lja4y81.net]
おかえり

477 名前:デフォルトの名無しさん mailto:sage [2023/11/01(水) 10:36:13.57 ID:QIr7Aj5s.net]
バッチファイルは縛りプレイが好きな人にしか向かないよ



478 名前:デフォルトの名無しさん mailto:sage [2023/11/12(日) 10:36:55.29 ID:8jJHTm3/.net]
batファイルの処理が終わったらスマホに何らかの通知を送りたいんですが何かいい方法は無いですか?

479 名前:デフォルトの名無しさん mailto:sage [2023/11/12(日) 13:00:47.64 ID:9doZQWI1.net]
SMS送信するWebAPI実行

480 名前:デフォルトの名無しさん mailto:sage [2023/11/12(日) 18:58:13.28 ID:aZ7/2ZLa.net]
NET SEND

481 名前:デフォルトの名無しさん mailto:sage [2023/11/19(日) 15:27:06.49 ID:tEMsHOKq.net]
>>475
>>476
どちらも難しそうだったのでPowerShellでGmailを送るやり方にしました

482 名前:デフォルトの名無しさん mailto:sage [2023/12/11(月) 17:33:41.74 ID:DuarkpA3.net]
習作でlog1.txtに格納されている文字列を1行ずつlog2.txtの中に存在しているかチェックしたいのですが、

@echo off
for /f %%a in (log1.txt) do (
set line=%%a
find "%%a" log2.txt
if %errorlevel% == "0" (
echo OK >> kekka.txt
) else (
echo NG >> kekka.txt
)
)

findで返ってくる値が0に固定されてしまい、
判定を上手く行うことが出来ずにいます
稚拙な質問でお恥ずかしいのですがどのように修正すれば良いでしょうか

483 名前:デフォルトの名無しさん mailto:sage [2023/12/11(月) 21:12:00.54 ID:WKo0W+M9.net]
>>478
お前がなぜレスを貰えないのかchatgptに聞いてこい

484 名前:デフォルトの名無しさん mailto:sage [2023/12/11(月) 21:23:41.62 ID:ZQU2Csd1.net]
>>478
いちばん手っ取り早いのはsetlocal enabledelayedexpansionを使うこと

@echo off
setlocal enabledelayedexpansion
for /f %%a in (log1.txt) do (
find "%%a" log2.txt >nul 2>nul
if "!errorlevel!" == "0" (echo OK) else (echo NG)
)
endlocal

遅延展開で調べてみて
ただforにdelimsとかtokensの指定ないけどそれは問題ない?

485 名前:デフォルトの名無しさん mailto:sage [2023/12/11(月) 22:30:44.45 ID:TXSKL9RJ.net]
for文を初めて使ったものでスレ汚し紛いな質問で申し訳ないです
setlocal enabledelayedexpansionを利用して手直しし、
希望通りの結果を出力できました。ありがとうございました

486 名前:デフォルトの名無しさん [2023/12/12(火) 18:16:58.21 ID:e+gu1Rew.net]
こんな感じでperl起動するとして、このときwindows terminal(設定によってはコマンドプロンプト)の新しいウィンドウが開かれてperlのコードが実行されますが、既に開いているwindows terminal内で新しいタブを開いて実行できないでしょうか?

perl "aaa.txt"
exit /B

487 名前:デフォルトの名無しさん [2023/12/12(火) 18:55:34.45 ID:e+gu1Rew.net]
書き忘れました
バッチファイルの実行はコマンドプロンプト内ではなく、バッチファイルのアイコンをダブルクリック(おそらくエクスプローラーで実行)することを前提にしてます



488 名前:デフォルトの名無しさん mailto:sage [2023/12/12(火) 20:27:32.49 ID:I4UWTUvH.net]
>>482
11のターミナルのタブはバグなのか仕様なのか誰も判らんから答えようがないよ
どうして11みたいな糞を恥ずかしげもなくリリースしたのかMSに聞いてこいよ

489 名前:デフォルトの名無しさん mailto:sage [2023/12/17(日) 11:53:39.09 ID:zJzmsCBl.net]
>>482
batではなくショートカット作って
プロパティのリンク先をwt perl "スクリプトのフルパス"
作業フォルダーをスクリプトのあるフォルダ
でよくない?

490 名前:デフォルトの名無しさん [2024/01/18(木) 19:51:19.47 ID:WajCwGEB.net]
シンプルに指定のフォルダ内へ存在する、特定のフォルダとファイルをバッチで一括削除する場合、そう記述すれば良いでしょうか

C:\AAA\BBB\CCCの、CCCの中にある
フォルダ1、フォルダ2、ファイル1、ファイル2、ファイル3・・・をまとめて削除したいのです

バッチファイルでCCleaner v5.63の対象リストみたいな運用をしたく思っています

491 名前:デフォルトの名無しさん mailto:sage [2024/01/18(木) 20:05:52.37 ID:lPYOY/79.net]
>シンプルに
シンプルかーよっしゃ!
>指定のフォルダ内へ存在する、特定のフォルダとファイルを
へはどっちに掛かるの?
>バッチで一括削除する
バッチスレやしな
>場合、
うん…
>そう記述すれば良いでしょうか
そうやな、
まずChatGPTにその質問内容が人間に判る文章になってるか添削してもらいな

492 名前:デフォルトの名無しさん mailto:sage [2024/01/18(木) 21:24:27.19 ID:fl7npJfZ.net]
消したいファイルやフォルダを列挙するのが一番シンプル
フォルダ内を全部消したいのなら rmdir /s /q
ただし指定したフォルダも消えるので再度作る必要はある

493 名前:デフォルトの名無しさん [2024/01/18(木) 21:50:17.22 ID:WajCwGEB.net]
>>488
早々に有難うございます
ネットにある指南もかなり事前チェックした上での投稿ですが、断片的な内容が多く、それらをコピペして調整せども上手くいかなかったものでして

ひょっとすると@echo offのあとに
del C:\AAA\BBB\CCC\ファイル1
del C:\AAA\BBB\CCC\ファイル2
del C:\AAA\BBB\CCC\ファイル3
rmdir /s /q C:\AAA\BBB\CCC\DDD
rmdir /s /q C:\AAA\BBB\CCC\EEE
rmdir /s /q C:\AAA\BBB\CCC\FFF
exit

的な箇条書きで良かったりしますか?

494 名前:デフォルトの名無しさん [2024/01/18(木) 21:54:35.77 ID:WajCwGEB.net]
これまでよく運用してきたアットリブやサービスなどは、例を挙げると
attrib +s +h C:\Users\xxxxxx\ntuser.dat
のたった一行で完結していました
ファイルディレクトリの削除も、特別な条件を付与しない場合は上記と似たようなものでしたかね

495 名前:デフォルトの名無しさん mailto:sage [2024/01/18(木) 22:00:03.62 ID:MX5L5JEY.net]
pushd C:\AAA\BBB\CCC
rd /s/q フォルダ1 フォルダ2 ファイル1 ファイル2 ファイル3・・
popd

…フォルダは消せてもファイル消せないか。じゃあ、

pushd C:\AAA\BBB\CCC
rd /s/q フォルダ1 フォルダ2 ファイル1 ファイル2 ファイル3・・
del /f フォルダ1 フォルダ2 ファイル1 ファイル2 ファイル3・・
popd

エラーは無視w

496 名前:デフォルトの名無しさん [2024/01/19(金) 05:19:53.22 ID:bHDC7nyS.net]
>>491
望むバッチが作れました
有難うございました

497 名前:デフォルトの名無しさん mailto:sage [2024/01/19(金) 06:08:19.50 ID:xbWxkRsK.net]
>>491
フォルダ1とフォルダ2を一つの命令で消すことは出来ないのでは?



498 名前:デフォルトの名無しさん mailto:sage [2024/01/23(火) 21:55:09.85 ID:ke6XWARZ.net]
バッチファイルから VS Code を起動しようと start で
start ”C:\apps\VSCode\Code.exe”
のようにすると、Code.exe の終了待ちになってしまいます
実行後は普通の exe のようにプロンプトに戻ってきて欲しいのですが、
バッチファイルでどうにかできるものでしょうか?

499 名前:デフォルトの名無しさん mailto:sage [2024/01/23(火) 23:07:46.88 ID:fGdUtoWj.net]
>>494
bin\code.cmdから起動するか
set ELECTRON_NO_ATTACH_CONSOLE=true
すればすぐ戻る

500 名前:デフォルトの名無しさん mailto:sage [2024/01/23(火) 23:27:45.51 ID:ke6XWARZ.net]
>>495
ありがとうございました
期待通りの動作になりました

微妙に訂正 >494 は start ”” ”C:\apps\VSCode\Code.exe” と書くべきでした

501 名前:デフォルトの名無しさん mailto:sage [2024/02/02(金) 14:12:59.14 ID:/quSrI1G.net]
バッチでディレクトリの中身のファイルを別のディレクトリにコピーしたい
大量にあるから更新時刻の新しいのだけコピーしたい
robocopy以外のコマンドで可能?

502 名前:デフォルトの名無しさん mailto:sage [2024/02/02(金) 19:39:01.90 ID:wG6y7v1N.net]
xcopy /d
では対応できない案件?
他には
forfiles
を組み合わせるとかあるけど、そもそも robocopy を避ける理由が
分からないと勧めづらい

503 名前:デフォルトの名無しさん mailto:sage [2024/02/02(金) 19:55:07.14 ID:SlEtxLWX.net]
バッチで時刻見ながら1個1個コピーとか…可能

504 名前:デフォルトの名無しさん mailto:sage [2024/02/02(金) 20:29:32.82 ID:/quSrI1G.net]
>>498
感謝
robocopyとcopyしか考えてなかった
robocopyはオプション間違えると消えるのが恐くて

505 名前:デフォルトの名無しさん mailto:sage [2024/02/02(金) 23:09:26.35 ID:oSMWA/4/.net]
こういうの使った方が早いかもよ
ttps://schinagl.priv.at/nt/ln/ln.html

506 名前:デフォルトの名無しさん mailto:sage [2024/02/03(土) 11:35:25.52 ID:OZed/uKu.net]
NASやファイルサーバの機能の重複除去を有効にすると文字通り重複してるファイルは勝手にファイルシステム内で統合されるから気にする必要事なくなるよ

507 名前:デフォルトの名無しさん mailto:sage [2024/02/16(金) 14:00:04.95 ID:xcbCRr3h.net]
>>480
%errorlevel% という環境変数モドキのないdosでも使える
if not errorlevel 1 が正解



508 名前:デフォルトの名無しさん mailto:sage [2024/02/16(金) 15:31:25.08 ID:Pal4p53G.net]
フォルダがいくつかあって
フォルダの名前が年月日で
「あれYYYYMMDD」形式になています
最新の日付フォルダの中身の特定のファイルだけを
別フォルダにコピーする
バッチファイル可能ですか?

509 名前:デフォルトの名無しさん mailto:sage [2024/02/16(金) 16:31:32.99 ID:1D5G9s1W.net]
>>503cmd /c exit -1

if not errorlevel 1 echo OK

510 名前:デフォルトの名無しさん mailto:sage [2024/02/16(金) 16:34:14.65 ID:1D5G9s1W.net]
途中で間違って書き込んじゃった。
戻り値が負数の場合に注意が必要。

511 名前:デフォルトの名無しさん mailto:sage [2024/03/15(金) 00:37:59.57 ID:exMGzLtn.net]
住人いるのか?

512 名前:デフォルトの名無しさん mailto:sage [2024/03/15(金) 21:32:34.28 ID:cEgPx2Y0.net]
いないよ

513 名前:デフォルトの名無しさん mailto:sage [2024/03/15(金) 21:48:31.82 ID:8BVQzeBd.net]
>504

誰か教えて

514 名前:デフォルトの名無しさん mailto:sage [2024/03/15(金) 21:54:53.76 ID:nVSr20GQ.net]
>>509
まずフォルダ名からYYYYMMDDの部分を抜き出して
フォルダをしらみつぶしに大小比較していく
一番大きい数値のフォルダはこれで特定できる
その中身の特定のファイルはどういった特定なのかで実現できるかどうか分かれる

515 名前:デフォルトの名無しさん mailto:sage [2024/03/15(金) 21:59:21.24 ID:8BVQzeBd.net]
>>510
特定のファイルとは
特定のファイル名です
全てのフォルダに同じファイル名のファイルが入ってる

516 名前:デフォルトの名無しさん mailto:sage [2024/03/15(金) 22:58:24.97 ID:XS7vFeOB.net]
>>511
こんなかんじ?

md あれ20240313 あれ20240314 あれ20240315 あれ20240316 dest
call>あれ20240316\特定のファイル

setlocal enabledelayedexpansion
call>are_list.txt
for /f %%a in ('dir /ad /b "あれ*"') do (
set "are=%%~a"
echo !are:~-8,8!>>are_list.txt
)
endlocal
sort /r are_list.txt /o are_list.txt
set /p target=<are_list.txt

copy あれ%target%\特定のファイル dest

517 名前:デフォルトの名無しさん mailto:sage [2024/03/16(土) 08:55:44.79 ID:PUBVa+tA.net]
FOR /F %%i IN ('dir /b /o-n あれ*') DO (
copy "%%i\特定のファイル" "別フォルダ" & goto :eof)



518 名前:デフォルトの名無しさん mailto:sage [2024/03/16(土) 09:42:46.12 ID:yhWVSGDf.net]
for /d %%i in (あれ*) do set フォルダ=%%i
copy "%フォルダ%\特定のファイル" "別フォルダ"

519 名前:デフォルトの名無しさん mailto:sage [2024/04/08(月) 22:28:43.24 ID:tYLSO2Xj.net]
※スレ違いで誘導していただきました
https://mevius.5ch.net/test/read.cgi/tech/1687260267/507
コマンドプロンプト(robocopy)について
Windows 11 Pro 23H2です
図1のように、robocopyで「フォルダA」を「フォルダB」へミラーコピーする実行ファイルを作成しました
(フォルダA)空
(フォルダB)ファイル.txtのみ
図2の削除予定?フォルダやファイルを非表示にしたいのですが、
それらしきログオプションが分かりませんでした
(図1)https://i.imgur.com/lH5b1iq.png
(図2)https://i.imgur.com/3Ye9N5c.png
よろしくお願いいたします

520 名前:sage [2024/04/09(火) 14:00:57.75 ID:Ugima7Hm.net]
>>515
/lじゃなくて/quitはどう?

521 名前:デフォルトの名無しさん mailto:sage [2024/04/09(火) 14:46:09.52 ID:A/PWQBtx.net]
HELP ATTRIB

522 名前:デフォルトの名無しさん mailto:sage [2024/04/09(火) 20:18:46.54 ID:ad5KI3J5.net]
削除予定なら削除してからコピーを実行したら表示されないんじゃね

523 名前:デフォルトの名無しさん mailto:sage [2024/04/09(火) 21:46:07.89 ID:yR8KPsJp.net]
/XF ファイル.txt

524 名前:デフォルトの名無しさん mailto:sage [2024/04/10(水) 19:52:48.51 ID:sNhBgYIO.net]
>>516-519
ありがとうございます
>>516さんの /quit で意図する動作ができました!
>>517さんの事前削除もいいですね
https://i.imgur.com/iDD0vYw.png
ありがとうございました

525 名前:デフォルトの名無しさん [2024/04/24(水) 02:18:02.70 ID:K1wg6IoP.net]
バッチファイルでExecutablePathにToolsを含むzebedee.exeというプロセスをkillしたいのだが、

for /f "usebackq tokens=2 delims==" %%A in (`WMIC PROCESS WHERE "Name='zebedee.exe' and ExecutablePath like '%%Tools%%'" get ProcessId /VALUE ^| find "="`) do (
taskkill /F /pid %%A
)

だと
D:\Tools\zebedee>(
taskkill /F /pid 21252
)
エラー: 無効なクエリです

となってしまう。

for /f "usebackq tokens=2 delims==" %%A in (`WMIC PROCESS WHERE "Name='zebedee.exe' and ExecutablePath like '%%Tools%%'" get ProcessId /VALUE ^| find "="`) do (
set PID=%%A
)
taskkill /F /pid %PID%
だと成功する。

forの中にtaskkillて書けないの?
「エラー: 無効なクエリです」てWMICのエラーだから、forとWMICとtaskkillの問題?

526 名前:デフォルトの名無しさん mailto:sage [2024/04/24(水) 12:53:51.62 ID:cg/GbNoZ.net]
>>521
WMICはパイプを使うと改行がCR CR LFとなって、%%A に正しく設定できていないのでだめっぽい。
SETするとCRが削除されてうまくいくようです。
というわけで、いったんリダイレクトしてファイルにするとよいでしょう。

^| find "="

^>T ^&^& find "=" T

527 名前:デフォルトの名無しさん mailto:sage [2024/04/24(水) 19:27:30.39 ID:zTq4mcuG.net]
前にquery userってコマンドの出力を変数に入れたかったんだけど
出力に文字'>'が入っててうまく取り込めなくてその時は結局vbsだかで取り込んだ
バッチだけでやる方法ってあったのかな



528 名前:デフォルトの名無しさん [2024/04/26(金) 01:53:35.81 ID:WIIBP3hh.net]
>>522
for /f %%A in ('wmic process where ^( Name like 'zebedee.exe' and ExecutablePath like '%%Tools%%'^) get processid') do (
taskkill /F /pid %%A
)

これで出来た。エラーするけど。
なんでMSのコマンドって不要なものを消せないのかね。
Linuxだと情報だけを表示するオプションがあるのに。

529 名前:デフォルトの名無しさん [2024/04/26(金) 06:34:16.76 ID:WIIBP3hh.net]
>>524
forとtaskkillで頑張らなくても

wmic process where ( Name like 'zebedee.exe' and ExecutablePath like '%%Tools%%') delete

でよかったんだ。

530 名前:デフォルトの名無しさん [2024/04/28(日) 21:55:14.93 ID:zlR73q8o.net]
スレ立てあらしスクリプト対抗age

531 名前:デフォルトの名無しさん mailto:sage [2024/05/15(水) 15:54:12.87 ID:7SsR7Bys.net]
コマンドラインからスリープ状態にするやり方調べてたけど意外と面倒くさいんだな
スリープじゃなくて休止になったり管理者権限が必要だったり

532 名前:デフォルトの名無しさん mailto:sage [2024/05/15(水) 16:36:20.47 ID:7ab9f7zE.net]
powershellにおまかせするのが楽みたいだね

533 名前:デフォルトの名無しさん mailto:sage [2024/06/12(水) 21:35:23.01 ID:XPCO6cU9.net]
共有フォルダの特定のファイルが不定期に更新されるので
過去のファイルを残すために
別のフォルダに保存しておきたい
更新の都度=全部は無理としても毎日1回はコピーしたい
元ファイル名にコピーする日付と時刻を追加したファイル名で
数日更新しない時もあるから
更新されてなかったらコピーしたくない
そんなバッチファイル可能?
毎日1回はタスクスケジューラで設定

534 名前:デフォルトの名無しさん mailto:sage [2024/06/12(水) 22:35:20.23 ID:09UxvqoI.net]
>>529
両方のファイルのタイムスタンプを比較すればいいかな
for /f "tokens=*" %%i in ("foo.txt") do echo %ti
新しいかどうかじゃなくて一致するかしないかで十分だと思う
dir /t "foo.txt"
でも更新日付は求められる
xcopy "foo.txt" backup_folder /d
でも更新されたファイルのバックアップはできるが同じファイル名となる
まあ頑張ってくれ

535 名前:デフォルトの名無しさん mailto:sage [2024/06/12(水) 22:36:29.43 ID:09UxvqoI.net]
ティルダが抜けてた
for /f "tokens=*" %%i in ("foo.txt") do echo %~ti

536 名前:デフォルトの名無しさん mailto:sage [2024/06/12(水) 23:08:41.34 ID:XPCO6cU9.net]
>>531
明日試します
ファイル名は日付時刻だけなら何とかなりそう
元ファイル名に連結がうまくできない

537 名前:デフォルトの名無しさん mailto:sage [2024/06/13(木) 00:35:39.15 ID:V4k66q9W.net]
>>532
ファイル名の変名の一例として foo.txt → foo_yyyymmdd-hhmm.txt にするなら
for /f "tokens=*" %%i in ("foo.txt") do set d=%%~ti
set dd=%d:~0,13%%d:~-2%
set dd=%dd:/=%
set dd=%dd: =_%
for /f "tokens=*" %%i in ("foo.txt") do echo %%~ni_%dd%%%~xi



538 名前:デフォルトの名無しさん mailto:sage [2024/06/13(木) 01:21:37.93 ID:V4k66q9W.net]
秒も要るなら
for /f "tokens=2,3" %%i in ('where /t "foo.txt"') do set d=%%i&set t=_%%j
set dd=%d:/=%
echo %t%|findstr _[0-9]:>nul&&set t=%t:_=_0%
set tt=%t:~1,2%%t:~4,2%%t:~-2%
echo foo_%dd%-%tt%.txt

539 名前:デフォルトの名無しさん mailto:sage [2024/06/15(土) 14:56:29.48 ID:H/tJtGX+.net]
>>533 の /f "tokens=*" は不要な気がする

540 名前:デフォルトの名無しさん mailto:sage [2024/06/15(土) 15:08:14.13 ID:UQXtemWf.net]
ファイル名が "メモ1 買い物リスト.txt"とか十分ありえるしなあ

541 名前:デフォルトの名無しさん mailto:sage [2024/06/15(土) 15:09:50.12 ID:UQXtemWf.net]
ああ/fが要らんのか

542 名前:デフォルトの名無しさん [2024/06/15(土) 21:58:33.69 ID:1hp9WHhR.net]
ファイルをコピーしてファイル名の変更すらわからない人間に教えなくてもいいと思うぞ

543 名前:デフォルトの名無しさん mailto:sage [2024/06/15(土) 23:00:01.75 ID:lwRcTmIT.net]
超絶初心者わいがネットで拾ったバッチファイルを
自分仕様にいじってるんだけも根本的にわからない事があったので来ました
主に動画ファイルのエンコードとか処理とかです

1 複数ファイルをD&Dしてファイル作成日時の古い順から処理する
2 ファイルネームに日本語全角スペースがある場合でも読み込んで処理する

この2つの仕様をWindowsバッチファイルだけで両立可能なのでしょうか?
ChatGPTとCopilotに聞くと出来ます!こう修正してって言われてやっても
上手くいった試しがないのでそもそも両立可能なのかがわかりません
よろしくお願いします(´・ω・`)

544 名前:デフォルトの名無しさん mailto:sage [2024/06/15(土) 23:26:37.72 ID:UQXtemWf.net]
D&Dは止めた方がいいね
最近の過去ログに無理やりやるのがあったと思うがまあ止めといたほうがいい
もっと運用を考えるべきだね

545 名前:デフォルトの名無しさん mailto:sage [2024/06/15(土) 23:53:38.13 ID:UQXtemWf.net]
>>539
フォルダに半角空白入りの名前を付けておくのがもっとも簡単な対策

546 名前:デフォルトの名無しさん mailto:sage [2024/06/16(日) 00:32:01.65 ID:fRT17GSx.net]
powershellへ移行しない理由は何?

547 名前:デフォルトの名無しさん mailto:sage [2024/06/16(日) 00:49:07.80 ID:/Fmpwzf6.net]
移行できる人なら質問しないだろうよ



548 名前:デフォルトの名無しさん mailto:sage [2024/06/16(日) 09:39:33.25 ID:+73AB3cR.net]
PowerShellって初回使用時すごい待たされるじゃん
普段使ってなくて毎日シャットダウンするような人は使おうと思ったとき待たされてストレス受けるんだよね

549 名前:デフォルトの名無しさん mailto:sage [2024/06/16(日) 11:14:43.44 ID:44t+YCVJ.net]
毎日シャットダウンはするけど普段使ってないものとは
なぞなぞかな

550 名前:540 mailto:sage [2024/06/16(日) 22:03:28.94 ID:46K9PH7S.net]
>>541
ありがとう
これはAIでは出てこない答えで感心しました

基本的にはムリっぽいという感じですかね
powershellの方が良いこともわかってはいるのですが
なにぶん物覚えが悪すぎて(´・ω・`)

551 名前:デフォルトの名無しさん mailto:sage [2024/06/17(月) 00:26:58.20 ID:BTOFB8aB.net]
むしろpowershellのほうがググれば沢山出てくるし書きやすいと思うけどね

552 名前:デフォルトの名無しさん mailto:sage [2024/06/17(月) 09:41:03.27 ID:4dsWgq6q.net]
%20とか名前付けるか

Pathのマルチバイト問題は解決困難だなあ

553 名前:デフォルトの名無しさん mailto:sage [2024/06/17(月) 15:06:14.86 ID:NTaBtmxu.net]
全角スペースがある場合は
フルパスの一部にでも半角スペースが入っていれば問題が生じないので、
別名として、当該フォルダに対して、シンボリックリンクなりジャンクションを半角スペースを入れた名前で作成し、
これを経由して運用すれば、とりあえず回避はできるよ

XPの頃にさんざん苦しんだのに、未だ根本的な解決がなされていないというのはモヤモヤする

環境によっては、"#"がフルパスに入るとだめというのもあるな

554 名前:デフォルトの名無しさん mailto:sage [2024/06/17(月) 16:53:21.50 ID:A2yJgFtn.net]
D&Dやめて日付順のリストファイルを作成したらどうかね
エクスプローラーとメモ帳で簡単にできるでしょ

555 名前:デフォルトの名無しさん [2024/06/17(月) 23:01:16.20 ID:4L+665Jw.net]
ドラッグアンドドロップなんてバッチ処理の発想じゃねえなw

556 名前:デフォルトの名無しさん [2024/06/17(月) 23:01:56.15 ID:4L+665Jw.net]
CUIをGUIの言葉で言うのは斬新すぎる

557 名前:デフォルトの名無しさん mailto:sage [2024/06/19(水) 14:55:27.29 ID:baOC8PLn.net]
Ruby で作ってみた。
Rubyでは半角空白はエラーになるけど、全角空白は正常に動く

デスクトップにショートカットを作って、
それに対して、ファイルをdrag & drop する

ショートカットのリンク先は、
C:\Windows\System32\cmd@.exe /k "ruby C:/Users/Owner/Documents/script.rb"
(@は取り除いて下さい)

require 'fileutils'

Sep = '-' * 40 + "\n" # separator

# ファイル作成日時の古い順から処理する。
# ただし、File.(stat.)birthtime は、Linux では使えない
ARGV.select { |full_path| File.file?( full_path ) } # ファイルのみ
.sort_by{ |full_path| File.birthtime( full_path ) }
.each do |full_path|
puts Sep + full_path
p birthtime = File.birthtime( full_path )

# ここに処理を書く
end

sleep # 出力したコマンドプロンプト画面を閉じないようにする



558 名前:デフォルトの名無しさん mailto:sage [2024/06/19(水) 21:41:48.63 ID:AL0iJITw.net]
バッチファイルでちまちま文字列処理するのは
C言語でちまちま文字列処理するくらい不毛だからやめとけ

559 名前:デフォルトの名無しさん mailto:sage [2024/06/20(木) 06:56:43.32 ID:oAthcLJ7.net]
私が普段使っているドラッグアンドドロップ用バッチのサンプルです

@echo off & set a="%cmdcmdline:"=%"& set "arg="
for /f "tokens=3* delims=:" %%i in (%a%) do (set a=%%i& set b=%%j)
set "a=%a:~-1%" & set b="%b::=" "%"
for %%i in (%b%) do set b=%%i& call :x
goto y
:x
if defined arg set arg=%arg:~0,-3%"
set arg=%arg% "%a%:%b:~1%& exit /b
:y
echo コマンド %arg%
pause & exit

560 名前:デフォルトの名無しさん mailto:sage [2024/06/20(木) 14:12:10.76 ID:6cw0yeSx.net]
PowerShellて別の文字でエラーになるとか聞いたけど本当?

561 名前:デフォルトの名無しさん mailto:sage [2024/07/16(火) 20:58:55.86 ID:Ho7KhNQA.net]
net session /delete の後の2回のY/N選択をコマンドで自動入力したいんだけど、どうやればいいの?

562 名前:デフォルトの名無しさん mailto:sage [2024/07/16(火) 21:44:58.97 ID:PFxavJIe.net]
>>557
応答ファイル(y+CR/LF, n+CR/LF)を作ってそれを入力とするのが常套手段だが
●Y/Nが1回の場合の例
rem ***準備
mkdir 111 2>nul
echo.>109\1.txt
rem ***応答ファイル作成
echo n>n.txt
echo y>y.txt
del Z:\111\*.*<n.txt >nul 2>&1

2回とのことなので、
echo n>n_n.txt
echo n>>n_n.txt
とするといけるかも(実行してないので結果不明)

563 名前:デフォルトの名無しさん mailto:sage [2024/07/17(水) 06:53:17.67 ID:gLjbT8+P.net]
ahk

564 名前:デフォルトの名無しさん mailto:age [2024/08/12(月) 12:32:10.56 ID:om8unfFL.net]
初心者質問ですみません。ffmpegで一括再エンコードしたいと思ってバッチファイルを作ってみたのですがファイルにスペースが含まれるとエラーが出るようで困っています。どのように対処すればよいか、どなたか御教示お願い出来ませんでしょうか?
@echo off
cd /d %~dp0

for %%a in (*.mp4) do (

"C:\ffmpeg\bin\ffmpeg.exe" -i %%a -b:v 500k -c:a copy %%~na_500k.mp4
)
pause

565 名前:デフォルトの名無しさん mailto:sage [2024/08/12(月) 14:37:08.59 ID:NAcZpcdu.net]
>>560
引数として渡されるファイル名にスペースがある場合?
それなら引数を”で囲めば行けるんじゃね?

566 名前:デフォルトの名無しさん mailto:sage [2024/08/12(月) 19:13:11.22 ID:N4nkPpmi.net]
有難うございます。引数を""で囲んだら上手くいきました。

567 名前:デフォルトの名無しさん mailto:sage [2024/10/03(木) 08:38:22.80 ID:hcouLIA5.net]
別のスレでも質問させていただいているのですが、こちらの方が適切かと思い投稿させていただきます。

以下をbatファイルで動かそうとしてもうまく動かないのですが、どうしたら良いでしょうか。
batファイルをダブルクリックして、PowerShellを実行しています。
PowerShellのスクリプト部分は、PowerShellで動くことを確認済です。
ランダムパスワードを生成する感じです。

https://chatgpt.com/...05-98e7-18f01918f140



568 名前:デフォルトの名無しさん mailto:sage [2024/10/03(木) 08:39:33.18 ID:hcouLIA5.net]
リンクはこちらです
https://chatgpt.com/share/66fdc027-bb18-8005-98e7-18f01918f140

569 名前:デフォルトの名無しさん mailto:sage [2024/10/03(木) 10:24:37.73 ID:EmzEDUtK.net]
適切だと思ったらマルチポストも辞さない

570 名前:デフォルトの名無しさん mailto:sage [2024/10/04(金) 07:40:33.06 ID:BveI+02d.net]
以下を消したら動くようになりました。
解決です。

Param(
[int]$Length = 16,
[switch]$IncludeUppercase,
[switch]$IncludeLowercase,
[switch]$IncludeNumbers,
[switch]$IncludeSymbols
)

571 名前:デフォルトの名無しさん [2024/10/12(土) 02:43:46.51 ID:fuP8Oeol.net]
iris-microという便利なソフトつかって 画面明るさ色温度かえてます
バッチファイルが2種類あって この設定をきりかえつかっています
ふたつのバッチファイルを 交互に繰り返すようなスクリプト作れますか
プロセスがのこったりしてるようでもないので難しいでしょうか?

572 名前:デフォルトの名無しさん mailto:sage [2024/10/12(土) 16:51:48.93 ID:4VpnKVlz.net]
バッチを順番に呼び出して先頭にgotoすれば交互になるような気がします

573 名前:デフォルトの名無しさん mailto:sage [2024/10/12(土) 17:04:01.38 ID:qxhXc26A.net]
同じbatで起動するたびにサイクリックに実行する内容を切り替えるって意味じゃないかな
何か外部にフラグみたいなもの(又は実行用にbatをコピーしてそれを呼び出す)を用意するといいんじゃないかな
同時起動の排他制御とかは個人使用ならまあ不要だろう

574 名前:デフォルトの名無しさん mailto:sage [2024/10/12(土) 17:39:10.70 ID:Iy6RGAFA.net]
状態を持たせたいならバッチの名前を変えるという荒業もできるね

575 名前:デフォルトの名無しさん mailto:sage [2024/10/12(土) 18:07:14.49 ID:qxhXc26A.net]
自分自身の名前は変えられないので別ファイルを用意
そもそもbat名を変えたら起動の度に別bat名で起動することになり元々の2つのbatのある状態と変わらんじゃん

576 名前:デフォルトの名無しさん mailto:sage [2024/10/12(土) 18:14:50.19 ID:Iy6RGAFA.net]
リネームは昔からあるハックだけどな
頭悪そう

577 名前:デフォルトの名無しさん mailto:sage [2024/10/12(土) 19:31:57.02 ID:d82xRt2j.net]
echo.>stat_on
if exist stat_on
とかでチェック用ファイルで分岐するのが手っ取り早い

より汎用的にやるなら
inifile.exeみたいの作るか拾うかして状態を読み書きする



578 名前:デフォルトの名無しさん mailto:sage [2024/11/06(水) 18:43:05.45 ID:KAHjZpf+.net]
winPCで
エクスプローラから
複数ファイルを
バッチファイルにドロップして
拡張子付きファイル名のみ(パスなし)を
1行1ファイル名で
list.txtに書き出したい
どの様に?

579 名前:デフォルトの名無しさん [2024/11/06(水) 19:42:12.98 ID:0Z0sjFnd.net]
てすと.com

580 名前:デフォルトの名無しさん mailto:sage [2024/11/07(木) 07:18:54.75 ID:diE3Ipx6.net]
>>574
@echo off & chcp 65001
set a="%cmdcmdline:"=" "%"
call :x > list.txt & exit
:x
set a=%a:*.bat" =%
for %%i in (%a:""=%) do set a=%%i& call :y
exit /b
:y
if "%a:~1,1%"==" " set a=%a: =" "%
for %%i in (%a:""=%) do echo %%~nxi

list.txt は UTF-8 にしてみた
バッチの拡張子は .bat

581 名前:デフォルトの名無しさん [2024/11/07(木) 10:34:25.11 ID:sTPvG4+T.net]
初めからコマンドプロンプトでやればいいのに

582 名前:デフォルトの名無しさん [2024/11/07(木) 10:35:43.77 ID:sTPvG4+T.net]
まずは特定のフォルダにファイルを集めるという発想がないんだろうな

583 名前:デフォルトの名無しさん [2024/11/07(木) 11:01:23.05 ID:5OQwBO7R.net]
batファイルで=を含む置換えの時の方法教えてください。
入力は Hello World 12=34

@echo off
set /p mystringA=あいさつ:
set mystringB=%mystringA:12=34=4567%
echo %mystringB%

結果をこのようにしたい
Hello World 4567

584 名前:デフォルトの名無しさん mailto:sage [2024/11/07(木) 12:14:54.61 ID:9xnRXsv4.net]
>>579
batだけでやるには大変(=の置換は無理)
変換前に1文字ずつ判定して=だったら普通使われない文字(=とか)に変えるとかしないとできない
別の方法としては別の言語でサポートしてやれば楽
@if (0)==(0) echo off
rem *** このブロックにbat内容を記述する
set s=Hello World 12=34
cscript //nologo /e:jscript "%~f0" "%s%"
rem for /f "tokens=*" %%i in ('cscript //nologo /e:jscript "%~f0" "%s%"') do set s=%%i
rem echo %s%
goto :eof
rem ***
@end
//これ以降はjscriptの処理部
var data=WScript.Arguments(0).replace(/12=34/g,"4567");
WScript.StdOut.WriteLine(data);

585 名前:デフォルトの名無しさん [2024/11/07(木) 12:33:40.59 ID:5OQwBO7R.net]
>>580
サイトによって特殊文字は^だったり"を使ったりで試して出来なかった
代案をわざわざありがとうございます^^

586 名前:デフォルトの名無しさん mailto:sage [2024/11/07(木) 13:07:58.08 ID:sK42d9tR.net]
>>576
神様ありがとう
なんでかわからないけど動きました

list. txtを%USERPROFILE%\Desktopに作成するにはどのようにすれば?
単純に
"%USERPROFILE\Desktop\list.txt"
に変更してもダメでした

587 名前:デフォルトの名無しさん mailto:sage [2024/11/07(木) 14:02:09.09 ID:DJJuXIJX.net]
エクスプローラーで「パスのコピー」あるの知ってる?
windows11 なら選択後に shift+ctrl+c
バッチとかいらんだろ



588 名前:デフォルトの名無しさん mailto:sage [2024/11/07(木) 16:57:38.50 ID:sK42d9tR.net]
>>576
>582
今やったらできました
お騒がせしました

もしよろしければ
解説お願いします

589 名前:デフォルトの名無しさん [2024/11/08(金) 02:14:23.67 ID:NHkTpL6A.net]
del /q "C:\Users\%username%\Desktop\新しいフォルダー"

これで新しいフォルダー内が消えないのですが?

590 名前:デフォルトの名無しさん [2024/11/08(金) 03:03:23.20 ID:NHkTpL6A.net]
日本語のファルダだとダメなんですかね?

591 名前:デフォルトの名無しさん mailto:sage [2024/11/08(金) 03:07:22.26 ID:8ciHN7a8.net]
文字コードが違うんじゃないですかね

592 名前:デフォルトの名無しさん [2024/11/08(金) 03:20:42.79 ID:NHkTpL6A.net]
なるほど理解しました

593 名前:デフォルトの名無しさん [2024/11/08(金) 03:24:29.70 ID:NHkTpL6A.net]
rdコマンドで親フォルダを削除しないようにするにはどう書けば良いのでしょうか?

594 名前:デフォルトの名無しさん [2024/11/08(金) 03:36:30.13 ID:NHkTpL6A.net]
rdコマンドで無理なら対象のフォルダ以下にあるファイルやフォルダを全て削除するものでもかまいません。

595 名前:デフォルトの名無しさん mailto:sage [2024/11/08(金) 10:30:14.55 ID:n9fsiKUu.net]
カレント移動すれば?

596 名前:デフォルトの名無しさん mailto:sage [2024/11/08(金) 11:10:01.65 ID:PSMBlcAH.net]
フォルダーごと削除してから新規作成したほうが簡単じゃね

597 名前:デフォルトの名無しさん mailto:sage [2024/11/08(金) 11:27:40.63 ID:IbrHrevx.net]
俺の環境だと>>585で消えるけど、/q付けないでやったらファイル削除確認メッセージが出てるか?
出てないなら中身のファイルの属性が隠しファイルになってるとか



598 名前:デフォルトの名無しさん mailto:sage [2024/11/08(金) 23:02:21.70 ID:gP+dh+BC.net]
del /q "新しいフォルダー\*"
for /d %%i in ("新しいフォルダー\*") do rd /s /q "%%~i"

599 名前:デフォルトの名無しさん mailto:sage [2024/11/09(土) 11:03:02.45 ID:bVsLqwPh.net]
cd "新しいフォルダー" && 2> nul rd /s /q .

600 名前:デフォルトの名無しさん [2024/11/09(土) 11:39:56.84 ID:L7dYAlvM.net]
>>580
またつまづきました><
入力 12&encoding=se34 56=78

これで&encoding=seを削除したくて
set "s=%s:^&=%"

で&を通したんですが
'encoding'は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチファイルとして認識されません。

となって出来ないです
set "s=%s:^encoding=%"
data = data.replace(/&encoding=se/g, "");
のように加えてもダメでした
どうすればいいですか?

601 名前:デフォルトの名無しさん mailto:sage [2024/11/09(土) 13:08:18.35 ID:q8k7iVH6.net]
宿題は自分で考えよう

602 名前:デフォルトの名無しさん mailto:sage [2024/11/09(土) 13:14:42.95 ID:L+GgUCLJ.net]
バッチでjscriptに渡す前に&が解釈されてるのかな?知らんけど
できないです、どうすればいいですかではなく
どこでエラーになってるか突き止めるのが先なのと
文字列処理したいなら違う言語例えばjscriptを覚えた方がよいかと

603 名前:デフォルトの名無しさん mailto:sage [2024/11/09(土) 13:21:59.27 ID:L+GgUCLJ.net]
jscriptは>>580のようにOS標準で入ってる古いjavascript
最近の構文は一部使えないがバッチよりも動作が高速で正規表現など文字列処理にも適している
他にpowershellもある

604 名前:デフォルトの名無しさん mailto:sage [2024/11/09(土) 14:09:23.50 ID:A663IrvX.net]
&はbatでの特殊記号であり、コマンドの区切りの意味がある
set a=aaaa&set b=bbb&set c=ccc
とか複数の命令を1行で書ける
他に&&,||もある

605 名前:デフォルトの名無しさん mailto:sage [2024/11/09(土) 14:31:25.85 ID:A663IrvX.net]
もしかして、set /p mystringA=あいさつ:で入力したときの話か?
なら、""で括れ
set /p "mystringA=あいさつ:"
set mystringA="%mystringA:&=%"
echo "%mystringA%"

606 名前:デフォルトの名無しさん mailto:sage [2024/11/09(土) 14:37:00.85 ID:A663IrvX.net]
set mystringA="%mystringA:&=%"→set "mystringA=%mystringA:&=%"

607 名前:デフォルトの名無しさん mailto:sage [2024/11/09(土) 14:43:11.36 ID:A663IrvX.net]
あと>>580はデータを引数渡し("%s%")してるので、「"」をデータ内に入れることができない
ファイル渡しすれば確実だが、他に環境変数(s)で渡す場合を示しておく
data=new ActiveXObject("WScript.Shell").Environment("Process")("s").replace(/12=34/g,"4567");



608 名前:デフォルトの名無しさん mailto:sage [2024/11/09(土) 15:04:16.22 ID:A663IrvX.net]
ついでに、&について
通常は使わなくても次の行に書けばいいが
閉じた環境からのデータを引渡ししたい場合などはどうしても使わなければならない
set a=1
call :sub
echo %a%
goto :eof
:sub
setlocal
set /a a+=1
endlocal&set a=%a%
goto :eof

609 名前:デフォルトの名無しさん mailto:sage [2024/11/09(土) 18:43:13.91 ID:L+GgUCLJ.net]
>endlocal&set a=%a%
こんなキモい書き方した事ないな
そもそもsetlocalだかは弊害もあるから使わずに書く事を意識した方がいいね
このスレは安易に使いすぎてる

610 名前:デフォルトの名無しさん mailto:sage [2024/11/09(土) 19:20:02.72 ID:KYeqqNmx.net]
ここはキモイ人ばっかりですから問題ないです笑

611 名前:デフォルトの名無しさん mailto:sage [2024/11/10(日) 07:08:12.44 ID:3mwMiYGo.net]
遅延展開以外はsetlocalなんて滅多に使わんが他にどうしろと

612 名前:デフォルトの名無しさん mailto:sage [2024/11/10(日) 10:11:26.77 ID:zZSAaq07.net]
setlocal enabledelayedexpansionは書く人多いけど
endlocalで閉じてる人見たこと無い

613 名前:デフォルトの名無しさん mailto:sage [2024/11/10(日) 14:06:03.62 ID:9SnRMU05.net]
そりゃあ終了したら効果が無くなるんだから文法マニアくらいしか書かんだろう

614 名前:デフォルトの名無しさん mailto:sage [2024/11/10(日) 18:35:44.79 ID:i0Pkbsqf.net]
サブルーチンでsetlocal enabledelayedexpansionを使ったら
endlocalを書かないと呼び出すたびに環境がコピーされていって
あっという間に正常に動作できなくなるさ

615 名前:デフォルトの名無しさん mailto:sage [2024/11/10(日) 19:42:53.96 ID:9SnRMU05.net]
サブルーチンに置くというのは想定しなかったな
メインの、というかスクリプトの先頭に置く使い方しかしてないや

616 名前:デフォルトの名無しさん mailto:sage [2024/11/10(日) 20:44:53.21 ID:Hbc3IhS3.net]
call先にsetlocalがあってもexit /bやgoto :eofで戻ると
変数復元されるのでendlocalは不要だが有ってもいい
やばいのはforやgotoでのループ内部にsetlocalしかないやつ

617 名前:デフォルトの名無しさん [2024/11/10(日) 21:35:28.96 ID:p0BF9o8N.net]
>>603
ありがとう。
何時間かやってるけどうまくいかないです。
@@if (0)==(0) echo off
rem ***
:start
Aset /p "ss=ss:"
Bset "ss=%ss:&=%"
Cset /p "savename=保存名:"
Dset ss=%ss% option "%savename%"
Eecho %ss%確認1
Fcscript //nologo /e:jscript "%~f0" "%URL%"
rem ***for /f "tokens=*" %%i in ('cscript //nologo /e:jscript "%~f0" "%ss%"') do set ss= %%i
Gecho %ss%確認2
goto :start
rem ***
H@end

// JScript部分
// var data = WScript.Arguments(0);
Idata=new ActiveXObject("WScript.Shell").Environment("Process")("ss");
Jdata = data.replace(/aaaaa/g, "bbbbb");
Kdata = data.replace(/12=34/g, "56=78");
Ldata = data.replace(/encoding=seg/g, "");
MWScript.StdOut.WriteLine(data);
NWScript.Quit();

これでやるとGでI〜Nが無視される。
Iにvarという変数を与えても同じ。
Iをdata = WScript.Arguments(0);にすると与えた入力が途中で途切れる(実際の入力値に”が入ってるため)
Fの代わりにfor文だとbatが落ちる(AppleWebKit/537.36 の使い方が誤っています。)
こういうのをスラスラ書ける天才たちがうらやましい。



618 名前:デフォルトの名無しさん mailto:sage [2024/11/10(日) 22:06:03.40 ID:zZSAaq07.net]
forの中の"%ss%"を削除すれば?

619 名前:デフォルトの名無しさん mailto:sage [2024/11/10(日) 22:08:14.92 ID:cLh8//6O.net]
うーんよく判らんけど
もう入力データはjscipt内でWScript.StdIn.ReadLine();からで拾ってきた方が早くね?とか
バッチはjsciptの呼び出し部分だけ残して全部jscriptでやった方が楽じゃね?とは思った

620 名前:デフォルトの名無しさん mailto:sage [2024/11/10(日) 22:19:31.51 ID:zZSAaq07.net]
ファイル名として使っちゃダメな文字(又はデバイス名)ってのもあるので
そういうのが入力されたら別文字に変えるとか削除するとかしないとダメになるぞ

621 名前:デフォルトの名無しさん mailto:sage [2024/11/10(日) 23:54:47.86 ID:cLh8//6O.net]
上で言った楽なやつね。叩き台としてどうかな
@if (0)==(0) echo off
set ss=
:start
echo %ss%確認1
rem cscript //nologo /e:jscript "%~f0" "%ss%"
for /f "tokens=*" %%i in ('cscript //nologo /e:jscript "%~f0" "%ss%"') do set ss=%%i
echo %ss%確認2
goto :start
@end
// JScript部分
var data = "";
if (WScript.Arguments.Count() > 0) { // 渡された引数がある
data = WScript.Arguments(0);
if (data != "") { WScript.StdErr.WriteLine("渡された引数:" + data); }
}
WScript.StdErr.Write("ss:"); // バッチのfor入力から除外するためプロンプトをエラー出力で表示
var ss = WScript.StdIn.ReadLine();
WScript.StdErr.Write("保存名:");
data = WScript.StdIn.ReadLine();
data = data.replace(/aaaaa/g, "bbbbb");
data = data.replace(/12=34/g, "56=78");
data = data.replace(/encoding=seg/g, "");
WScript.StdOut.WriteLine(data);

622 名前:デフォルトの名無しさん mailto:sage [2024/11/11(月) 00:41:06.56 ID:ggA4ksL2.net]
"%ss%"を引数につけてると
入力に"を入れられると二週目からエラーとなる

623 名前:デフォルトの名無しさん mailto:sage [2024/11/11(月) 00:55:30.51 ID:ggA4ksL2.net]
入力データから"を削除するようにしたほうがいい
ファイル名にも"は使えないから必要ないだろ
それと基本文字列を扱う場合は""で括ること
echo %ss%→echo "%ss%"
じゃないと、&|などでエラーになるし、^も消えるとかいろいろ起きる
(a^b.txtは正常なファイル名)

624 名前:デフォルトの名無しさん mailto:sage [2024/11/11(月) 01:34:01.29 ID:ggA4ksL2.net]
"%ss%"でエラーになってるのはbatでの構文解釈時なのでjscriptでの対処云々以前の問題

625 名前:デフォルトの名無しさん [2024/11/11(月) 02:13:27.56 ID:BY3zyfqu.net]
みなさんありがとう。
理想なのができたので、まず、
Fをfor /f "tokens=*" %%i in ('cscript //nologo /e:jscript "%~f0" ') do set ss= %%i
>>614
ありがとう。たったこれだけだったよ

>>615,617
文字制限で入力ができなかった。
でもそういうやり方もあるんだと学べたのでありがとう

>>618,619,620
このbatの後に渡されるexeの処理に””で括っておかないとexeのほうでエラーになる
ちゃんとそこを伝えれてなかったね、ごめん
回答してくれてありがとう

これWScript.StdIn.ReadLine();をchat gptで文字制限を聞いたらAのような入力方法だったよ
とはいえ、ありがとうございました><

626 名前:デフォルトの名無しさん [2024/11/11(月) 03:53:20.62 ID:vS/DyEQP.net]
batというプログラミング初めてです。
初心者に良いサイト教えてください。
Windows 10です。

627 名前:デフォルトの名無しさん mailto:sage [2024/11/11(月) 04:28:35.50 ID:UKR+WOTm.net]
>>622
www.google.co.jp



628 名前:デフォルトの名無しさん [2024/11/13(水) 02:26:15.40 ID:AkCTz+Wd.net]
BATでこんなすごいことできるぞってのを教えてくださいハゲども

629 名前:デフォルトの名無しさん mailto:sage [2024/11/13(水) 02:26:54.33 ID:HWwn2oWP.net]
>>621
すっかり忘れてたけど
"tokens=*"じゃ先頭が半角スペースやタブだと消えるし、セミコロンだとスキップされるという問題があった
バッチはクセがありすぎる
eolのデフォルトが;で、しかも"eol="だと今度は"が指定されたことになるとかウソーって言いたい

for /f delims^=^ eol^= %%i in ('cscript //nologo /e:jscript "%~f0"') do set ss=%%i

630 名前:デフォルトの名無しさん [2024/11/14(木) 11:47:50.65 ID:oC8TllJp.net]
@echo off
set T=%tmp%\tmp.txt
type nul>%T%
for %%f in (%*) do (
>>%tmp%\tmp.txt echo %%~nxf
)
type %T% | clip

これだと正常に取得できません
正常にファイル名を取得できるようにするにはどう書けばいいでしょうか?

631 名前:デフォルトの名無しさん mailto:sage [2024/11/14(木) 11:50:39.07 ID:WvtXCkNi.net]
他の「ふつう」の環境選ぶのがええよ

632 名前:デフォルトの名無しさん mailto:sage [2024/11/14(木) 14:18:34.94 ID:q/WsLCXM.net]
>>626
半角空白が無くて全角空白があるファイルをドロップするとファイル名はそこで分かれる
過去ログにやり方はあるけど簡単なのは親フォルダ名のどこかに半角空白を入れておく
それ以外で正常にできないといってるのならもう少し現象を説明してもらわないと
俺達はエスパーじゃないんだから

633 名前:627 [2024/11/14(木) 15:26:47.13 ID:oC8TllJp.net]
>>628
すいません
2つのフォルダーと2つのテキストを用意し、この4つ全てを選択してコピーしたら一つしかコピーできなかったりして正常に動作しません

634 名前:デフォルトの名無しさん mailto:sage [2024/11/14(木) 15:48:05.37 ID:X91uzdxk.net]
>>583 見ろ

635 名前:デフォルトの名無しさん mailto:sage [2024/11/14(木) 16:15:29.07 ID:q/WsLCXM.net]
>>629
コピーって何?
一例としてエクスプローラで複数のファイルを選択反転してbatのショートカットにD&Dしたら
選択したファイルのファイル名がクリップボードに入ってるだろ
どこにコピーする操作が加わるんだ?

636 名前:627 [2024/11/14(木) 17:07:59.07 ID:oC8TllJp.net]
>>631
ファイル名のコピーです

637 名前:デフォルトの名無しさん mailto:sage [2024/11/14(木) 17:19:32.22 ID:q/WsLCXM.net]
ファイル名のコピーしたならもうbatを動かすまでもなくファイル名一覧がクリップボードに入ってるじゃん
そもそもクリップボードに入ってるものを入力するようにはそのbatはできてないじゃんか



638 名前:627 [2024/11/14(木) 17:27:06.24 ID:oC8TllJp.net]
そのファイル名のコピーがうまくいかないのです

639 名前:デフォルトの名無しさん mailto:sage [2024/11/14(木) 17:38:15.36 ID:q/WsLCXM.net]
何をしたいのかちゃんと説明できないのなら付きあえないよ
そのbatは、引数に列記されたファイル(パス)名を順次入力してファイル名のみにして列記した一覧をクリップボードに入れるということをやってる
【オペレーション例】
コマンドプロンプトを立ち上げて
hoge.bat "c:\aa.txt" "c:\bb.txt" "c:\cc.txt"
と入力したら
aa.txt
bb.txt
cc.txt
とクリップボードに入る

640 名前:627 [2024/11/14(木) 17:41:20.12 ID:oC8TllJp.net]
わかりました
失礼しました

641 名前:デフォルトの名無しさん [2024/12/11(水) 20:24:09.34 ID:y+gluRXv.net]
BATだけでパスワード生成する方法を教えてください。
生成したパスワードをクリップボードにコピーする形でお願いします。

642 名前:638 [2024/12/11(水) 22:00:19.62 ID:y+gluRXv.net]
自己解決しました。

643 名前:デフォルトの名無しさん mailto:sage [2024/12/12(木) 06:59:11.94 ID:Qex7Xru+.net]
パスワード生成はセキュアな乱数使った専用ツールでやれよ

644 名前:デフォルトの名無しさん [2024/12/17(火) 20:20:11.38 ID:0qw/aoLB.net]
コンテキストメニューにregeditで追加したbatで複数のファイルを実行したら2回実行されるんだけど、これって引数2個で1回だけ実行させる方法ありますか?

645 名前:デフォルトの名無しさん mailto:sage [2024/12/18(水) 07:22:31.48 ID:alC6IUD1.net]
%1 %*
みたいに書くんじゃなかったか
と超適当レス

646 名前:デフォルトの名無しさん [2024/12/19(木) 07:22:17.49 ID:jup1lTg9.net]
BATでこんなことできるぞってのを教えてください。

647 名前:デフォルトの名無しさん mailto:sage [2024/12/19(木) 08:07:25.40 ID:i8S4J+Do.net]
無限増殖.bat

@echo off
start "%~f0"
start "%~f0"



648 名前:デフォルトの名無しさん mailto:sage [2024/12/19(木) 18:24:35.68 ID:9yUs11tl.net]
set /pコマンドに空欄のままエンターを押すと強制終了してしまうのですがどうしたらいいでしょうか
set InputPath=%InputPath:"=% をコメントアウトすれば空欄での強制終了は回避できるのですが
今度は""で括られたパスを入力すると強制終了してしまいます

@echo off
set /p InputPath=
set InputPath=%InputPath:"=%

if "%InputPath%"=="" (
set msg=空欄だよ
) else if exist "%InputPath%\" (
set msg=フォルダだよ
) else if exist "%InputPath%" (
set msg=ファイルだよ
) else (
set msg=不明だよ
)

echo %msg%
pause

649 名前:デフォルトの名無しさん mailto:sage [2024/12/20(金) 00:11:16.18 ID:TH9BF58b.net]
>>644
これでbatそのまま?(処理を抜き出したもので元々はループさせたりしてない?)
またpuaseを付けるところを見るにダブルクリックとかで実行?
コマンドプロンプトで複数回実行したりしてない?

まあ説明すると
入力でそのままエンターすると変数にヌル文字が入るわけじゃなくて変数の入力自体をしない
つまり、以前に定義されてた値があればそれがそのまま入ったままだし
未定義なら未定義のままとなる

ループさせるとかなら変数の初期化をするのがいい
set InputPath=
(これでInputPathは未定義となる)
if not defiend InputPath echo msg=空欄だよ
まあ未定義なら
if "%InputPath%"=="" (
set msg=空欄だよ
のままでちゃんと「空欄だよ」となるはずだから直す必要は無いけど

それと
set InputPath=%InputPath:"=% → set "InputPath=%InputPath:"=%"
としないと、入力に a&b などと入れられると問題となる

650 名前:645 mailto:sage [2024/12/20(金) 01:08:13.42 ID:byrLY/tu.net]
>>645
助言ありがとうございます

set InputPath="" を @echo off 直下に追加したところ希望通りの結果が得られました
助かりました!

ちなみにダブルクリックで1回だけ実行しループ処理は入れてません。貼った構文が全てです

651 名前:デフォルトの名無しさん mailto:sage [2025/01/24(金) 11:47:15.87 ID:zMaqlWh1.net]
いつのころからか
cmdhome.lnk
みたいなcmd起動ショートカット作って
アイコン指定してもアイコンが反映されなくなってしまった
Win10なんだけどなんか改善方法ないんだろうか
味気なさ過ぎて悲しい

652 名前:デフォルトの名無しさん mailto:sage [2025/01/25(土) 04:04:41.46 ID:ZawpPmOr.net]
レガシーコンソールじゃないとアイコン反映されないっぽいな
なんで退化してしまうのか

653 名前:デフォルトの名無しさん mailto:sage [2025/01/26(日) 10:14:52.12 ID:QXh9thRU.net]
>>647=>>648なんだろうけど
ちょっと意味がわからんかったわ
画像付きでどうしたいのか説明してくれんかね

654 名前:デフォルトの名無しさん mailto:sage [2025/01/26(日) 14:54:43.71 ID:WMeA3DrY.net]
エクスプローラー再起動で反映されない?

655 名前:デフォルトの名無しさん mailto:sage [2025/01/26(日) 15:05:23.00 ID:4xEs3XpP.net]
バッチでHexからBase58へ変換したい
可能ですか?

参考
learnmeabitcoin.com/technical/keys/base58/

656 名前:デフォルトの名無しさん mailto:sage [2025/01/26(日) 15:20:12.21 ID:atsgMxQf.net]
Base64ならCertUtilでできるがBase58のコマンドはない
そのリンク先にRubyのコードがあるから参考にしたら

657 名前:デフォルトの名無しさん mailto:sage [2025/02/06(木) 21:17:32.84 ID:TFp3Dqlz.net]
batで最も重要な構文
これさえマスターすればどんな複雑な処理も書ける

set tempfn=%temp%\%random%_%random%_%random%.txt

yourcommand "%tempfn%"
or yourcommand > "%tempfn%"

for /f %%i in (%tempfn%) do call :each "%%~i"
del "%tempfn%"
goto :eof

:each
echo eachline:[%*]
goto :eof



658 名前:デフォルトの名無しさん [2025/02/09(日) 22:32:47.90 ID:7kSqL9GbI]
晴れた日に道を歩くだけて゛斉藤鉄夫や自民党に殺される時代になったな、賄賂癒着してる資本家階級と共謀してカンコ‐だのと海に囲まれた
曰本でわざわざ陸域をJALΑNAテロリストどもにクソ航空機飛ばさせて莫大な温室効果ガスまき散らして気温上昇させて街路樹まで暴風に
脱水症状にと枝を弱らせて歩行者殺害、裁判では予見可能性が争われるが洪水やら含めて容易に予見できる完全な殺人
斉藤鉄夫のような憲法ガン無視公務員を殺害する権利を國民が有する社会を民主主義というが,立憲も自民と大差なし、100兆円超の税金
使っててまだ小さな政府だのほざいてる枝野幸男とか野心か゛透けて見えるしな、高度成長期か゛終わった國は小さな政府に移行すべきだか゛
公務員を最低賃金に統一して不正に死刑導入するならともかく大きな政府ほと゛國民はクソ公務員から奪い取られる比率か゛高まるものだしな
航空騒音によって根絶やしにされた研究開発や気候変動によって失われた収入を補償するためにクソ公務員による不公平性を排除した最低
所得保障と生産性のない連中の既得権破壞の解雇自由化と自民公明を殺人で起訴することを掲げた党が必要
(ref.) ttps://www.call4.jp/info.php?type=items&id=I0000062
ttΡs://haneda-projecт.jimdofreе.com/ , ttps://flight-route.com/
ttps://n-souonhigaisosуoudan.amebaownd.com/

659 名前:デフォルトの名無しさん mailto:sage [2025/02/12(水) 16:52:19.09 ID:oMyiCtXq.net]
@echo off & setlocal enabledelayedexpansion & set "h=" & set "b="
set "a=123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"
set /p "h=Hex=" & set "c=!h!a" & set "z=%a:~0,1%" & set /a n=0
:1
if defined h (set /a n+=1) else goto 2
set /a "d%n%=0x%h:~-6%" & set "h=%h:~0,-6%" & goto 1
:2
set /a e=0,f=0 & for /L %%i in (%n%,-1,1) do (
set /a "d%%i+=e<<24,e=d%%i%%58,f|=d%%i/=58")
set "b=!a:~%e%,1!%b%" & if %f% neq 0 goto 2
if "%b%"=="%z%" set "b="
:3
if "%c:~0,2%"=="00" set "b=%z%%b%" & set "c=%c:~2%" & goto 3
if defined b echo Base58=%b% & pause

660 名前:デフォルトの名無しさん mailto:sage [2025/02/16(日) 04:09:02.74 ID:Nn6kjJ7X.net]
set
foo.exe
set
としたときにfoo.exe内で書き換えた環境変数を
呼び出し側が取り込むことってできないの?
バッチ同士ならcallで行けるけどそんな感じで

661 名前:デフォルトの名無しさん mailto:sage [2025/02/16(日) 06:41:06.81 ID:51aCbtwK.net]
俺もよく分かってないけど、
環境変数って大本はレジストリに入ってる
で普通は各々のプロセスで環境変数のインスタンスが生成されてそれを弄ることになる
サブプロセスを生成した場合は親の環境がコピーされていてそれを弄ることになる
そうならサブプロセスが終了した後ではもう残っていないことになる
サブプロセス(foo.exe)がどこの環境変数を弄るかによる
それともレジストリを書き換えたのか?

662 名前:デフォルトの名無しさん mailto:sage [2025/02/16(日) 08:16:27.56 ID:nK83B1eq.net]
プロセス終了後に弄った環境変数を取得?
そんなの簡単にできたらセキュリティーホールになりそう

663 名前:デフォルトの名無しさん mailto:sage [2025/02/16(日) 11:25:20.82 ID:51aCbtwK.net]
すごいシステムの下層レベルだと出来る方法があるのかも知れないけど
通常はプロセスは各々独立してて他プロセスのメモリ空間は共有されない

664 名前:デフォルトの名無しさん mailto:sage [2025/02/16(日) 14:24:06.62 ID:51aCbtwK.net]
Linuxだと子プロセスから親プロセスに引き継ぐことができるらしい
(親プロセスが子プロセス生成時に親プロセス側でsourceコマンドを実行)
が、やっぱりWindowsでは無いみたい
https://learn.microsoft.com/ja-jp/windows/win32/procthread/changing-environment-variables
>既定では、子プロセスは親プロセスの環境ブロックのコピーを継承します
>プロセスの作成時に子プロセスの環境変数を変更することは、1 つのプロセスが別のプロセスの環境変数を直接変更できる唯一の方法です。 プロセスは、そのプロセスの子ではない別のプロセスの環境変数を直接変更することはできません。

665 名前:デフォルトの名無しさん mailto:sage [2025/02/16(日) 14:29:31.27 ID:51aCbtwK.net]
なので現実的な方法としては
foo.exeで渡したい情報はファイルか標準出力で親プロセスに渡せばいいと思う

666 名前:デフォルトの名無しさん mailto:sage [2025/02/17(月) 08:27:15.30 ID:oRb3RUoY.net]
無理なのか
何が何でもという事もないので
受け渡し用tempファイルでやることにするよ
サンクス

667 名前:デフォルトの名無しさん mailto:sage [2025/02/17(月) 23:32:14.20 ID:l9ByBUai.net]
for %%A in(*.xlsx *.xls)←ループ処理する時に、
*.xlsと*.xlsxを指定したら.xlsxは2回実行されてしまう。
*.xlsだけ指定すると1回だけ実行される。

含むではなくて、*.xlsで終わるか*.xlsxで終わるものを指定する検索はどうしたら出来ますか?



668 名前:デフォルトの名無しさん mailto:sage [2025/02/18(火) 00:40:03.94 ID:iDsz3WKD.net]
findstrで自己解決しそう、ありがとう兄妹ノシ

669 名前:デフォルトの名無しさん mailto:sage [2025/02/18(火) 17:36:17.24 ID:GcWP7NNv.net]
for %%A in (*.xls?) じゃダメなの?
.xlsaとか.xlsbなんてファイル普通ないでしょ

670 名前:デフォルトの名無しさん mailto:sage [2025/02/18(火) 17:39:49.38 ID:IbEo812m.net]
>>665
*.xlsだけでも同じだぞ
DOSネームとの互換機能だぞ

671 名前:デフォルトの名無しさん mailto:sage [2025/02/18(火) 18:45:22.20 ID:TLR0SIQr.net]
dir /b|findstrよりももしかしたら遅いかもしれんが
for /f "tokens=* delims=" %%i in ('forfiles /m *.xls') do @echo %%~i

672 名前:デフォルトの名無しさん mailto:sage [2025/02/18(火) 19:16:46.03 ID:naPa9y/a.net]
?は付けとけ
環境に依存する

673 名前:デフォルトの名無しさん mailto:sage [2025/02/18(火) 19:20:25.10 ID:TLR0SIQr.net]
要件とは別に.xlsと.xlsxとを区別するものを上げただけ
あとはよろしく

674 名前:デフォルトの名無しさん mailto:sage [2025/02/20(木) 00:56:47.67 ID:OIbQhS2Y.net]
みんなありがとう
後ろに?は全然思いつかなかった。
因みにfindstrは挫折した。

>>667
これは難しくて分からんからもうちょっと調べてくる㌧

675 名前:デフォルトの名無しさん mailto:sage [2025/02/24(月) 09:10:00.84 ID:c2/p8Qwq.net]
フォルダの中に
ファイル名にシングルクォートが入ってるファイルが複数あって
シングルクォートだけ一気に削除する簡単な方法ない?
ファイルの削除じゃなくて

676 名前:デフォルトの名無しさん mailto:sage [2025/02/24(月) 09:14:41.39 ID:K9TE8hB9.net]
powerqueryかな

677 名前:デフォルトの名無しさん mailto:sage [2025/02/26(水) 03:08:05.14 ID:Lge+mbBz.net]
いろいろ調べて、ファイル名の頭に更新日時を付けるバッチファイルを作りました

@ECHO OFF

:LOOP
IF "%~1" EQU "" GOTO :EOF

FOR %%F IN (%1) DO (
FOR /F "tokens=1-3 delims=/ " %%A IN ("%%~tF") DO (
REN "%~1" "%%A.%%B.%%C %%~nxF"
)
)

SHIFT
GOTO LOOP

このbatファイルにmp4動画をまとめてD&Dで
2025.02.26 動画3.mp4
2025.02.24 動画2.mp4
2025.02.15 動画1.mp4
こんな感じで動画ファイルの頭に更新日時が付くようになったのですが、
動画ファイルによっては名前が変更されず 61個中31個 が変更されませんでした。
ものによって更新日時が取り出せないのか、もしくはコードが悪いのか分かる方はいませんか?
バッチファイルを Windows10のテキストで作成して、文字コード ANSIの形式で保存しています。



678 名前:デフォルトの名無しさん mailto:sage [2025/02/26(水) 03:14:30.37 ID:dl6vXEdA.net]
echo on

679 名前:デフォルトの名無しさん mailto:sage [2025/02/26(水) 06:53:35.41 ID:u15kjvGd.net]
ファイル名に点とかスペース入れる奴は絶滅した方が良いと思うの

680 名前:デフォルトの名無しさん mailto:sage [2025/02/26(水) 06:58:53.12 ID:E5xeTX8Z.net]
バッチファイルってD&Dでけるの?
良いこと聞いちゃった㌧

一部ループするのが不思議。

681 名前:673 mailto:sage [2025/02/26(水) 13:01:30.47 ID:Lge+mbBz.net]
動画とバッチファイルを置いてある場所に日本語のパスが入っていたことが名前変更が出来なかった原因でした。
点とスペースを入れても大丈夫みたいでした。
上記のコードは更新日時なのですが、作成日時にしたい場合はどのような記述に変更すればいいでしょうか?

682 名前:デフォルトの名無しさん mailto:sage [2025/02/26(水) 14:07:44.67 ID:FzkkoRDx.net]
dir /tc
for /f のskip=指定

683 名前:673 mailto:sage [2025/02/26(水) 16:08:26.35 ID:Lge+mbBz.net]
>>678どうもありがとうございます。

@echo off
setlocal enabledelayedexpansion

rem ドラッグ&ドロップしたファイルを1つずつ処理
for %%i in (%*) do (

for /f %%a in ('dir /TC ^| findstr "%%~nxi"') do (
set datetime=%%a
)
set y=!datetime:~0,4!
set m=!datetime:~5,2!
set d=!datetime:~8,2!

set setdate=!y!.!m!.!d!_

ren "%%~nxi" "!setdate!%%~nxi"
echo 新しいファイル名 → "!setdate!%%~nxi"
)
endlocal
pause

新しく作り直したバッチファイルなのですが、不具合が出ました。
バッチファイルで作成日時を加えた動画名      実際の作成日時
2023.09.08_動画1.mp4               2022/06/01
2023.09.09_動画2.mp4               2022/06/02
2023.08.19_動画3.mp4               2022/04/10

こんな感じで、実際の日時と違いが出てしまいました。どこが間違っているか分かる人教えてください。

684 名前:デフォルトの名無しさん mailto:sage [2025/02/26(水) 16:27:38.12 ID:FzkkoRDx.net]
どうして未完成中にecho offするの?
echo offは完成後にしろよ
多分findstrで複数の同名のファイルにマッチしてるんだろう
つまり別のファイルの日付を拾ってる

685 名前:デフォルトの名無しさん mailto:sage [2025/02/26(水) 16:34:20.93 ID:FzkkoRDx.net]
又はどれにもマッチしてなくてdatetimeが以前の値を保持してるか
あと
dir /tc "%%~i"

686 名前:デフォルトの名無しさん mailto:sage [2025/02/26(水) 16:47:49.35 ID:FzkkoRDx.net]
あとD&Dでファイルの受け渡しは完全じゃないのに注意
半角空白をパスに含まないかつ全角空白を含む
c:\data\あ い.txt
こういうのだと「c:\data\あ」と「い」の2つに分かれる

687 名前:デフォルトの名無しさん mailto:sage [2025/02/26(水) 17:22:40.52 ID:Lge+mbBz.net]
ネットにあるサンプルコードの一部分を少し変えて試してるだけなので
アドバイスを頂いているのですが全く理解できません。
今のところ 更新日時 = 作成日時 っぽいので

@ECHO ON

:LOOP
IF "%~1" EQU "" GOTO :EOF

FOR %%F IN (%1) DO (
FOR /F "tokens=1-3 delims=/ " %%A IN ("%%~tF") DO (
REN "%~1" "%%A.%%B.%%C %%~nxF"
)
)

SHIFT
GOTO LOOP

更新日時を付けてくれるこれに頼ります。
679に書いたコードが初心者にも理解しやすいサンプルコードっぽかったのですが
ここで聞いたら欠陥だらけ見たいなのでやめときます
半角空白や全角空白や日本語パスの問題は一時的に動画ファイルを移動させて解決させます。



688 名前:デフォルトの名無しさん mailto:sage [2025/03/07(金) 21:09:01.97 ID:VgDCtbBb.net]
バッチとは関係ないけど
たまにエクスプローラーで見ると更新日時のないファイルがあるけど
あれは何なんだろう
右クリックでプロパティを見てもないんだ

689 名前:デフォルトの名無しさん mailto:sage [2025/03/07(金) 21:12:50.49 ID:sd+opADM.net]
>>684
アプリで消したか
違うOSからコピったか

690 名前:デフォルトの名無しさん mailto:sage [2025/03/07(金) 23:48:55.40 ID:qVctmwDB.net]
タイムスタンプが1980/01/01 8:59:59より前だと表示されないだけ

691 名前:デフォルトの名無しさん mailto:sage [2025/03/07(金) 23:56:21.18 ID:qVctmwDB.net]
より前→以前だった
要するに、1980/01/01 9:00:00以降でないと、エクスプローラーで表示されない

692 名前:デフォルトの名無しさん mailto:sage [2025/03/08(土) 17:00:59.96 ID:oOL+XIfI.net]
>>686が正解

693 名前:デフォルトの名無しさん mailto:sage [2025/03/08(土) 17:01:04.22 ID:oOL+XIfI.net]
>>686が正解

694 名前:デフォルトの名無しさん mailto:sage [2025/03/08(土) 17:05:24.27 ID:oOL+XIfI.net]
すまん連投した
1980/1/1 0:0:1以降はプロパティ表示

695 名前:デフォルトの名無しさん mailto:sage [2025/03/17(月) 15:46:18.20 ID:HZpHcb9U.net]
oh my posh for cmdなんてあるんだな
さすがにwtじゃないと駄目っぽいが

696 名前:デフォルトの名無しさん mailto:sage [2025/04/19(土) 00:45:06.61 ID:pkdgLcU5.net]
set str=aaa "dd d"
echo echo1 %str%
echo echo2 "%str%"

call :callecho "%str%"
pause
goto :EOF

:callecho
echo echo3 %1
echo echo4 %~1
echo echo5 %2
echo echo6 %~2
exit /b

二重引用符括ったものを入れ子の構造と認識していない様子
"%str%"で一つの引数とするためには、どのようにエスケープすればいい?

697 名前:デフォルトの名無しさん mailto:sage [2025/04/19(土) 08:10:38.43 ID:738SS3ZO.net]
誰か助けて
今度会社でBOXを採用して共有フォルダを廃止するらしい
batファイルで大量のファイルの移動とかコピーとかしてたけど
ブラウザではめんどくさすぎる
batファイル風に操作する方法ありますか?



698 名前:デフォルトの名無しさん mailto:sage [2025/04/19(土) 08:17:30.95 ID:pYJssLIc.net]
>>693
社内で孤立してたりするの?

699 名前:デフォルトの名無しさん mailto:sage [2025/04/19(土) 11:32:28.15 ID:1418i819.net]
>>692
引数の解釈で分離するから無理
参考までに
set str=aaa "dd d"
echo echo1 %str%
echo echo2 "%str%"

call :callecho str
call :callecho "%%%%str%%%%"
goto :EOF

:callecho
echo echo3 %1
call echo echo4 %%%1%%
echo echo5 %1
call echo echo6 %1

700 名前:デフォルトの名無しさん mailto:sage [2025/04/19(土) 12:17:01.61 ID:1418i819.net]
>>692
絶対使わない文字列に一旦変換するのが良いのかも
call :callecho "%str:"=<”>%"
goto :EOF

:callecho
set arg1=%~1
set arg1=%arg1:<”>="%
echo echo3 %arg1%

701 名前:デフォルトの名無しさん mailto:sage [2025/04/19(土) 12:35:34.33 ID:738SS3ZO.net]
>>694
はい

702 名前:692 mailto:sage [2025/04/20(日) 16:57:41.77 ID:MhuJCbcV.net]
>>695
> 引数の解釈で分離するから無理
無理ですか。わかりました

703 名前:デフォルトの名無しさん [2025/04/28(月) 22:55:03.86 ID:HidpH75d.net]
コマンドプロンプト初心者です。
新部署では毎日他業者と画像やpdfのやり取りを行うのですが、そのやり取りした記録の保存を任されることになりました。
保存するデータの命名規則が「YYYYMMDD-(2桁連番)-元ファイル名.拡張子」なんですが、毎日データが数十個あって連番を手で振る作業がそろそろしんどいです。

コマンドプロンプトは使えてもbatは使えない特殊環境で、何とかforfilesとrenameを使って「元ファイル名.拡張子」を「YYYYMMDD-元ファイル名.拡張子」に一括改名するまではできるようになりました。
更に連番を振るようにするにはどうすればいいでしょうか?
なお、「元ファイル名.拡張子」の部分には法則性はまるでありません。

704 名前:デフォルトの名無しさん mailto:sage [2025/04/28(月) 23:02:44.23 ID:CiQ2PPMB.net]
>693
誰か教えて

705 名前:デフォルトの名無しさん mailto:sage [2025/04/29(火) 11:54:34.55 ID:zLDT8DZ5.net]
>>700
ファイラーでいいんでない
自動でなく手動だけど
あふなどの2画面ファイラーなら確認しながらコピーできる

706 名前:デフォルトの名無しさん mailto:sage [2025/04/29(火) 12:50:47.28 ID:wEK97Pj7.net]
>>701
自動化したいです

707 名前:デフォルトの名無しさん mailto:sage [2025/04/29(火) 13:37:02.10 ID:eO8jJ9R+.net]
batがダメならpowershellやwshもダメなのか
フリーソフトは?



708 名前:デフォルトの名無しさん mailto:sage [2025/04/29(火) 13:38:48.90 ID:ED8v3/1I.net]
WSHで頑張れ

709 名前:デフォルトの名無しさん mailto:sage [2025/04/29(火) 13:44:20.04 ID:eO8jJ9R+.net]
フリーソフトがいけるならFlexible Renamerとか

710 名前:デフォルトの名無しさん mailto:sage [2025/04/29(火) 14:23:38.79 ID:PdB4bn8v.net]
JavaScriptでもいいけど他のスクリプトが何か一つでも使えるなら

dir /b | clipでファイルリストをコピーして

ren foo.txt 00-foo.txt
ren bar.txt 01-bar.txt
...
みたいなコマンド群を生成してクリップボードにコピーして
コマンドプロンプトに右クリで張り付けて一括実行することはできる

それにしても日本のアイテー業界は絶望的に頭悪いな…

711 名前:デフォルトの名無しさん mailto:sage [2025/04/29(火) 14:43:58.50 ID:6pTzs1wL.net]
>>699,705
「Flexible Renamer」https://www.vector.co.jp/soft/winnt/util/se131133.html を使って
「YYYYMMDD-(2桁連番)-元ファイル名.拡張子」(※拡張子は小文字のみ統一)へ一括改名するなら、
「高度なリネーム」チェックボックスをONにしてから
置換パターン文字列として「\Y\m\d-??-\1.\L\2\E」を指定すればいいと思う。

712 名前:デフォルトの名無しさん mailto:sage [2025/05/14(水) 22:42:19.83 ID:TaiA0yJC.net]
退職日に“ファイル削除プログラム”起動──データを削除した退職者 vs. 半導体企業の裁判例 その行方は?
ttps://asahi.5ch.net/test/read.cgi/newsplus/1747188175/

すげーこんな事も出来るんだ(・∀・)

713 名前:>>652 mailto:sage [2025/05/18(日) 11:16:50.22 ID:tgr6qv73.net]
>>655
Base58からHexへ変換のバッチもお願い致します。
>>651でも変換できますが、得体の知れないサイトで秘密鍵入力は怖いです。

714 名前:デフォルトの名無しさん mailto:sage [2025/05/18(日) 22:43:16.16 ID:r2764k2P.net]
bitcoin?

715 名前:デフォルトの名無しさん mailto:sage [2025/05/19(月) 09:59:39.06 ID:WO8NIavg.net]
@rem 金が絡むなら自己責任でどうぞ
@echo off & setlocal enabledelayedexpansion & set "b=" & set "h="
set "a=123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"
set /p "b=Base58=" & set "z=%a:~0,1%" & set /a "n=1,d=0,e=58"
set "c=!b!-" & set "b=%z%!b!" & set "f=0123456789abcdef"
:1
for /L %%i in (0,1,57) do if "!a:~%%i,1!"=="!b:~-1!" set /a e=%%i
if %e%==58 (exit /b) else set /a "g%n%=e" & set "b=!b:~0,-1!"
if defined b set /a "n+=1,e=58" & goto 1
:2
set /a "b=0,e=0" & for /L %%i in (%n%,-1,1) do (
set /a "g%%i+=b*58,b=g%%i%%16,e|=g%%i/=16")
set "h=!f:~%b%,1!%h%" & set /a "d=(d+1)%%2" & if %e% neq 0 goto 2
if "%h%"=="0" (set "h=") else if %d%==1 set "h=0%h%"
:3
if "%c:~0,1%"=="%z%" set "h=00%h%" & set "c=%c:~1%" & goto 3
if defined h echo Hex=%h% & pause

716 名前:デフォルトの名無しさん mailto:sage [2025/05/20(火) 08:07:11.86 ID:U563OTYa.net]
>>709 ここはネット切断しても変換できるぞ
ttps://appdevtools.com/base58-encoder-decoder

717 名前:>>709 mailto:sage [2025/05/20(火) 17:35:30.38 ID:g5AqyG9Y.net]
皆さんありがとうございます。変換できました。
>>712
スマホで入力直前に機内モードでいけました。



718 名前:デフォルトの名無しさん [2025/05/26(月) 00:46:53.22 ID:sddMzjz1.net]
>>555
かなり前の書き込みなので もう見ていないかもしれないけど
使わせてもらいました ありがとうございます
初心者なので理解するのに時間がかかってしまいましたが
これで欠点が一つ克服できました

719 名前:デフォルトの名無しさん mailto:sage [2025/05/26(月) 08:47:40.30 ID:iONSO6k9.net]
>>714
それでもいいけど最近シンプルなのに書き換えたので参考にどうぞ

ドラッグアンドドロップ用バッチのサンプル
@echo off & set arg=& set a="%cmdcmdline:"=" "%"
set a=%a:""=%& call :x %%a:*%~x0" =%%
echo コマンド %arg%
pause & exit
:x
set a=%1& if not defined a exit /b
if "%a:~1,1%"==" " set a=%a: =" "%
set arg=%arg% %a:""=%& shift & goto x

720 名前:デフォルトの名無しさん mailto:sage [2025/05/26(月) 20:59:12.78 ID:mOG76bz3.net]
>>715
何かわからんけど横からありがとう(・∀・)

721 名前:デフォルトの名無しさん [2025/05/26(月) 23:38:19.16 ID:sddMzjz1.net]
>>715
今でも改良を続けているんですね
調べてみて導入を検討してみようと思います

722 名前:714 [2025/06/09(月) 23:42:00.02 ID:XIEmLRR3.net]
>>555,715
2つを参考にして作ってみました

ドラッグ アンド ドロップ用
@echo off & set a="%cmdcmdline:"=%"
for /f "tokens=3* delims=:" %%i in (%a%) do (set a=%%i& set b=%%j)
set "a=%a:~-1%"
call :x "%a%:%%b: %a%:=" "%a%:%%"
:x
echo コマンド %*
pause & exit

723 名前:デフォルトの名無しさん mailto:sage [2025/06/10(火) 16:46:13.85 ID:HbVriPvf.net]
UNCパスに:は無い
おれの環境では試せないけど
どうなのかな

724 名前:714 [2025/06/11(水) 23:47:01.12 ID:h2Pmz4k5.net]
UNCパスというのはネットワーク上のパスということですか
詳しくないのでよくわからないですけど
それがこのバッチに関係があるのでしょうか

725 名前:デフォルトの名無しさん mailto:sage [2025/06/12(木) 06:01:52.53 ID:KDNtxLme.net]
サーバの共有していないなら関係ない。
あるいはnet useでドライブ名を割当済でも関係ない。
問題なのはエクスプローラーで直接にUNCパスで移動して
そこでD&Dしたら"%~d1"は"\\"になるのでコロンが無いので
>>555>>718では引数の分離ができない

726 名前:714 [2025/06/12(木) 23:37:30.69 ID:3VNaC5iR.net]
>>721
説明ありがとうございます
UNCパスで移動中はこのバッチだと対応できないということですか
難しいですね

727 名前:デフォルトの名無しさん [2025/06/13(金) 01:33:18.10 ID:QWIL1FR+.net]
もう
@echo コマンド %1



728 名前: %2 %3 %4 %5 %6 %7 %8 %9
@pause
で手を打とうよ。あとは運用。
[]
[ここ壊れてます]

729 名前:デフォルトの名無しさん mailto:sage [2025/06/13(金) 01:41:39.04 ID:Vx46a8qY.net]
>>715 で問題無いようだが

730 名前:デフォルトの名無しさん [2025/06/13(金) 11:27:20.00 ID:QWIL1FR+.net]
通りすがりで正直なにしてるのかわからんけど、もしかしてやりたいのはこゆこと?

@echo off
setlocal
set ARGS=
set ORIG_ARGS=%*
call :main %ORIG_ARGS: =[全角空白]%
goto :eof

:main
if x%1 == x goto :sort
set ARG=%1
set ARG=%ARG:[全角空白]= %
if not %ARG:~0,1%%ARG:~0,1% == "" set ARG="%ARG%"
set ARGS=%ARGS% %ARG%
shift
goto :main

:sort
for /F "delims=" %%F in ('dir /S/B/OD %ARGS%') do echo コマンド "%%F"
pause

731 名前:デフォルトの名無しさん mailto:sage [2025/06/13(金) 17:53:07.75 ID:u+rmpblt.net]
もういいからそれ

732 名前:デフォルトの名無しさん [2025/06/13(金) 23:37:10.32 ID:lvrE3au7.net]
>>725
試してみました
パスに全角スペースや半角スペースがあっても対応できるようですね
似たような方法を使ってるバッチをQiitaで見たことがあります
上手に回避できてると思いますがパスに&があると問題があります
%1 や %* では限界がある感じがするわ

733 名前:デフォルトの名無しさん mailto:sage [2025/06/13(金) 23:50:46.94 ID:BURDJDsC.net]
ややこしい処理は
呼び出し側で処理したいデータを環境変数にセット
BATは何もせずPythonを呼び出す
にすればすべて解決

734 名前:デフォルトの名無しさん mailto:sage [2025/06/14(土) 04:23:27.36 ID:/OCzCvqy.net]
環境変数てサイズに制限あるんで
大量のデータを渡す場合は普通にファイル渡しがいいかと。
親フォルダに半角スペースを入れてD&Dする方法もあるけど
それでも ab%cd%e.txt みたいのは化けるわけで
%* や %1 は取得時にすでに壊れてるのでどうにもならんわ

735 名前:デフォルトの名無しさん [2025/06/14(土) 08:25:15.70 ID:yDCgYQHw.net]
なるほど、あれの/Cオプションの引数にはあるけれど、あれがバッチに渡さないわけね
理解したんで あれ起動時のコマンドラインを愚直にパースするとこんな感じか

@echo off
setlocal enableDelayedExpansion

set CMDLINE=!CMDCMDLINE:*cmd" ="!
set Q="
set "S= "

set i=1
set ARG=

:loop
if !CMDLINE:~%i%! == !Q! goto :pause
set c=!CMDLINE:~%i%,1!
if !c! == !Q! (
call :Q
) else if not !c! == !S! (
call :NQ
) else (
set /a i += 1
)
goto :loop

続く

736 名前:デフォルトの名無しさん [2025/06/14(土) 08:25:56.73 ID:yDCgYQHw.net]
:Q
set ARG=!ARG!!c!
set /a i += 1
set c=!CMDLINE:~%i%,1!
if not !c! == !Q! goto :Q
set ARG=!ARG!!Q!
call :exec
set ARG=
set /a i += 1
goto :eof

:NQ
set ARG=!ARG!!c!
set /a i += 1
set c=!CMDLINE:~%i%,1!
if not !c! == !Q! if not !c! == !S! goto :NQ
set ARG="!ARG!"
call :exec
set ARG=
goto :eof

:exec
echo コマンド !ARG!
goto :eof

:pause
pause

737 名前:デフォルトの名無しさん [2025/06/14(土) 08:41:58.61 ID:yDCgYQHw.net]
あ、ソート忘れたけどいいよね
文字化けするならforの前にchcp 65001入れておくれ



738 名前:デフォルトの名無しさん [2025/06/14(土) 15:14:17.65 ID:eF2X+eHO.net]
なにかおかしいと思ってたんだが
これ拡張子が.cmd のバッチファイルを想定してあるんだな
.bat だと無限ループするから変だと思った

739 名前:外野 mailto:sage [2025/06/14(土) 16:09:26.74 ID:/OCzCvqy.net]
>>718 参考に作ってみた。拡張子bat。UNCパスOK。違ってたらごめん

@echo off & set "a=%cmdcmdline:"=%"
set "a=%a:*.bat=%" & call set arg="%%a: %~d1=" "%~d1%%"
echo コマンド %arg:* =% & pause

740 名前:デフォルトの名無しさん [2025/06/14(土) 16:43:38.20 ID:yDCgYQHw.net]
>>733
そういうことなら set CMDLINE= の行を
set CMDLINE=!CMDCMDLINE:*%~x0" ="!
にすれば .cmd でも .bat でも .Cmd でも .BAT でもおけだな

741 名前:デフォルトの名無しさん [2025/06/15(日) 07:57:25.07 ID:sG85beXD.net]
>>730-731 に重大な欠陥があった

全角空白 とアンパサンド&echo.この文が単独で表示されたらダメ&pause

というファイル名を試したらダメだった
最後の行のpauseの後にexitを入れてcmd.ехеを終わらせる必要があった

これで >>727 は直せたはずだけどまだあったら指摘してください
なおUNCパス上でも動作に問題なし

742 名前:外野 mailto:sage [2025/06/15(日) 10:50:38.73 ID:ZhGW5ICb.net]
>>718
>>736さんの件で >>734 もexitを追加する必要があるようだ

743 名前:デフォルトの名無しさん [2025/06/15(日) 13:37:57.77 ID:E4ppjALA.net]
>>736
試したけどファイル名の表示までは問題ないし
意図していない動作には違いないけど
余計な文字とpauseが1回余分に出るだけだね

744 名前:外野 mailto:sage [2025/06/15(日) 14:22:10.67 ID:ZhGW5ICb.net]
pauseだと無害だけどdelだったらヤバいみたいな

745 名前:デフォルトの名無しさん [2025/06/16(月) 07:47:57.49 ID:FL2oCcdJ.net]
>>734
2行目を

call set "a=%%a:*%~x0 =%%" & call set arg="%%a: %~d1=" "%~d1%%"

にすると .cmd 派としては嬉しい
ついでに %arg% に手を加えなくてもすむ

746 名前:デフォルトの名無しさん mailto:sage [2025/06/16(月) 12:04:25.57 ID:3rn8pxf/.net]
>>740さんの指摘で訂正しました。ありがとう

@echo off & set "a=%cmdcmdline:"=%"
call set "a=%%a:*%~x0 =%%" & call set arg="%%a: %~d1=" "%~d1%%"
echo コマンド %arg%
pause & exit

ちなみに最後の exit が無いと a&b.txt をD&Dしたら
バッチ終了後に既存の b.txt が勝手に開きました
(フルパス空白無しの場合)

747 名前:デフォルトの名無しさん mailto:sage [2025/06/16(月) 12:25:15.13 ID:CXTiNK7e.net]
こんな有様でもDOSの頃は良かったんだけどね
Windowsで規制解除した時にエスケープ決めておけば



748 名前:デフォルトの名無しさん mailto:sage [2025/06/16(月) 12:56:05.32 ID:h70+cne9.net]
昔はD&Dなんて無かったからなあ

749 名前:デフォルトの名無しさん [2025/06/16(月) 20:18:24.83 ID:FL2oCcdJ.net]
>>741
改良提案したのにごめん、%1に依存してるからNGかもと気づいた
ファイル名でなくディレクトリ名に & があって、パス全体では空白がない場合たぶんNG

750 名前:デフォルトの名無しさん mailto:sage [2025/06/16(月) 21:12:33.56 ID:3rn8pxf/.net]
>>744
それは無いと思います
最初に引用符を全部削除して、%0と%1の間は空白一個です
最後に両側に引用符を付けています
だから引数は全て引用符に囲まれている

751 名前:デフォルトの名無しさん [2025/06/16(月) 21:23:14.37 ID:FL2oCcdJ.net]
>>730 にもちょっとあれ表記で書いたけど
cmd.ехеがバッチを起動するときにクオートされてない & までしかバッチに渡さないんだよ
だから%1は&の前までしか入らない

752 名前:デフォルトの名無しさん [2025/06/16(月) 21:47:39.98 ID:FL2oCcdJ.net]
あ、それでもいいのか? ごめん

753 名前:デフォルトの名無しさん mailto:sage [2025/06/16(月) 22:03:48.18 ID:3rn8pxf/.net]
%cmdcmdline%を見ると%0は必ず引用符で囲まれている
%~d1はドライブ名なので最初の2文字だけですね

754 名前:デフォルトの名無しさん [2025/06/16(月) 22:12:19.82 ID:FL2oCcdJ.net]
空白とパスの頭に一致すればいいんだから%1が&の前まででも十分で
それこそ %~d1 の代わりに %a:~1,2% でもいいわけだ
はやとちりしてすまん

755 名前:デフォルトの名無しさん mailto:sage [2025/06/16(月) 22:24:14.65 ID:3rn8pxf/.net]
あ、今気付いたけどバッチ自体のフルパスに%があると不味いですね
%cd%.bat とかふざけた名前を付けると起動すらしない(笑)

756 名前:デフォルトの名無しさん [2025/06/16(月) 22:28:11.29 ID:FL2oCcdJ.net]
あ、%~d1 を使う段階ではまだaの頭に " がないから %a:~0,2% か
今日はダメすぎる…

757 名前:デフォルトの名無しさん mailto:sage [2025/06/16(月) 22:43:47.80 ID:rarg6+Me.net]
>>743
過去ログとか見てみると
ドロップして動画変換したいと言ってる人がいたけど
バッチにドロップするという概念がなかったって人もいたわ
D&Dは新しい変化といえるのかな



758 名前:デフォルトの名無しさん mailto:sage [2025/06/16(月) 23:13:16.42 ID:h70+cne9.net]
そもそも昔はマウスが…

759 名前:デフォルトの名無しさん mailto:sage [2025/06/17(火) 01:09:51.80 ID:iFChncGT.net]
>>752
それほとんど使わないし
ファイルのDDで誤ってバッチに突っ込んだりするから
機能停止したい

760 名前:デフォルトの名無しさん mailto:sage [2025/06/17(火) 01:48:49.47 ID:k94ULtHo.net]
Windows11で新しいターミナルになって
せっかく画面に複数ファイルD&Dできるようになったのに
やっぱりスペースのないやつは " 付かない
馬鹿なのか

761 名前:デフォルトの名無しさん mailto:sage [2025/06/17(火) 16:27:15.74 ID:tmeQgGUx.net]
Windowsにはライブラリという機能があってな
複数の場所のファイルをまとめて管理できる
エクスプローラーではデフォルト非表示だけど
有効にすると別のドライブのファイルもドラッグ&ドロップができたり

762 名前:>>724 mailto:sage [2025/06/17(火) 18:10:43.80 ID:+VkCgLWJ.net]
だから >>715 で問題ないと言ってるだろ
いったい何を試行錯誤してんだ

763 名前:デフォルトの名無しさん mailto:sage [2025/06/17(火) 22:17:05.18 ID:tmeQgGUx.net]
解説がなかったからだろ

764 名前:デフォルトの名無しさん mailto:sage [2025/06/17(火) 23:21:34.27 ID:v63kiG1M.net]
>>757
確かに >>715 は UNCパスやドライブ文字が違うファイル
にも対応できてる すごいバッチだと思います
>>718 は行数は少ないけどドライブ文字を流用してるから手抜きではありますね

765 名前:デフォルトの名無しさん mailto:sage [2025/06/17(火) 23:56:02.26 ID:k94ULtHo.net]
>>757
まあ冗長だと思ったからじゃね

766 名前:デフォルトの名無しさん mailto:sage [2025/06/21(土) 00:15:12.24 ID:UJBDQV9Q.net]
>>755
ターミナルのコマンドライン引数は ; が区切り文字らしいので
バッチのパスや引数に ; があると別のタブができちゃう
弱点が増えてよかったね

767 名前:デフォルトの名無しさん mailto:sage [2025/06/21(土) 09:18:33.42 ID:P2MDKzd7.net]
;って元々区切り文字じゃね



768 名前:デフォルトの名無しさん mailto:sage [2025/06/21(土) 23:59:59.67 ID:UJBDQV9Q.net]
バッチのパスに ; があってもCMDは起動できる
ターミナルだと起動できない " で囲んでもダメ

769 名前:デフォルトの名無しさん mailto:sage [2025/06/22(日) 01:31:14.42 ID:GoovCRBR.net]
ああPowerShellの話か

770 名前:デフォルトの名無しさん mailto:sage [2025/08/01(金) 00:06:46.33 ID:8i1j7N2J.net]
Windows11でbatファイルの関連付けが
ターミナルになってる気がするんだけど
前からだったっけ?

771 名前:デフォルトの名無しさん mailto:sage [2025/08/03(日) 11:49:08.20 ID:ggxTCWx/.net]
2年前には入ってたと思うけど
ストアアプリなので既存のユーザーには入らない

772 名前:デフォルトの名無しさん [2025/08/03(日) 20:26:28.87 ID:kVKBj15M.net]
>>765
まずはターミナルアプリのことから知ってくれ

773 名前:デフォルトの名無しさん mailto:sage [2025/08/05(火) 07:13:58.34 ID:zm6JVwOO.net]
去年にWindows11の新しいPCを買ったけど
最初からbatもwt窓だった
conhostもまだあるみたいやけど
今時どんな時に使うのか知らん

774 名前:デフォルトの名無しさん mailto:sage [2025/08/06(水) 07:51:31.03 ID:eYVzecPY.net]
所詮ストアアプリだからWinPEとかでは動かない

775 名前:デフォルトの名無しさん mailto:sage [2025/08/06(水) 11:47:35.61 ID:jPPdovnJ.net]
wtは文字表示の具合が微妙
たまに表示が乱れるし

776 名前:デフォルトの名無しさん mailto:sage [2025/08/06(水) 12:14:42.07 ID:a7ynNpBm.net]
罫線とか全角判定は相変わらずぐちゃぐちゃよな

777 名前:デフォルトの名無しさん mailto:sage [2025/08/06(水) 16:14:09.89 ID:yOBvuTYH.net]
>>768
設定→システム→開発者向け→ターミナル
で変更はできるがすぐ変わってしまう



778 名前:デフォルトの名無しさん [2025/08/06(水) 20:16:09.54 ID:DmAnEwRh.net]
>>770-771
俺も今年1月あたりから同様の不具合に悩まされるようになったから、
「ConEmu」 https://conemu.github.io/ , https://github.com/ConEmu/ConEmu/releases
これの最新版である Build 230724 で代用するようになった。

ただし見た目は「Windows Terminal」のほうが好きだから、そのプレビュービルドも以下の2ヶ所で度々チェックしている。
https://github.com/microsoft/terminal/releases , https://apps.microsoft.com/detail/9n8g5rfz9xk3

779 名前:デフォルトの名無しさん [2025/08/09(土) 16:20:48.09 ID:S08gCjht.net]
>>773
それはターミナルの一部の見た目の話だろ?

ここはターミナルアプリのタブを一度も触ったことがねえやつばかりだな。

780 名前:デフォルトの名無しさん mailto:sage [2025/08/10(日) 00:24:03.75 ID:vHIHeDq6.net]
パスに日本語等の非ASCII文字が入ると、
まともにコマンド編集できなくなる時点で、欠陥品としか言いようがない

781 名前:デフォルトの名無しさん [2025/08/10(日) 01:30:45.70 ID:swuUdv2c.net]
>>775
そんな日本語対応をMicrosoftがするわけねえだろ。
だいたいコピー&ペーストだってあとからできるようにしてくれたんだぞ?

782 名前:デフォルトの名無しさん mailto:sage [2025/08/10(日) 01:49:24.39 ID:YdGUalHl.net]
一部のマルチバイト文字が混在すると文字の間隔が変
コードページを変えると更に別の文字も化けたりする
一度に大量の行を表示すると最後にゴミが出てくる
タブはあると便利ですが単独のバッチには不要

783 名前:デフォルトの名無しさん mailto:sage [2025/08/10(日) 18:33:55.19 ID:vNE7ex5+.net]
>>777
コードページ、ターミナルアプリ(wt,conemu/cmderなど)、シェル(cmd,pwsh,bashなど)とフォントの相互作用なので完全解が難しいので
自分はシステムコードページ65001にして解空間を最大化している

784 名前:デフォルトの名無しさん [2025/08/10(日) 18:50:43.65 ID:swuUdv2c.net]
単に老眼の話をしているだけのような気がしてきた

785 名前:デフォルトの名無しさん mailto:sage [2025/08/11(月) 00:25:05.59 ID:CPQs8BLp.net]
同じ文字でconhostは正常なので、原因はcmdや老眼のせいじゃないな。
バッチはconhost使えばいいんじゃね。
ショートカット弄ると設定が戻ってしまうようだけど(笑)

786 名前:デフォルトの名無しさん mailto:sage [2025/08/11(月) 01:16:02.27 ID:eBBeTH67.net]
どうもパス等が長くて表示が折り返されるときにおかしなことになるみたいだな
wtではひし形のはてなマーク、cmdでは中黒に置き換わって、
ウィンドウサイズを変更すると表示されるが、もとに戻すと文字化けが残ったまま
おかしな行が増殖したりする

787 名前:デフォルトの名無しさん [2025/08/11(月) 01:21:00.25 ID:BPQ8/IeS.net]
文字間は隣の文字によって間隔を調整するのがM365やWindowsの普通になってきたので、その仕様を知らないのかもしれないね。

よくわからないのが、画面表示をそのまま見ようとするところ。

そんな少ないデータならいいけど、画面に表示されたものをそのまま見るというのはやはり一般人の使用だよね?



788 名前:デフォルトの名無しさん mailto:sage [2025/08/11(月) 01:39:43.41 ID:qEWBZoUZ.net]
wt
全角の隣りの文字と重なってる

789 名前:デフォルトの名無しさん mailto:sage [2025/08/11(月) 01:59:31.66 ID:qEWBZoUZ.net]
全角と半角の区別できてない出来の悪いワープロソフトみたいな感じ

790 名前:デフォルトの名無しさん mailto:sage [2025/08/11(月) 02:12:53.98 ID:qEWBZoUZ.net]
[★★★★]

791 名前:デフォルトの名無しさん mailto:sage [2025/08/11(月) 19:29:30.81 ID:jApty1op.net]
>>780
conhostはWindowsTerminalソース(の一部)をOSチームがコンパイルしてるだけなので
デフォルトや設定したフォントの線が疑われる

792 名前:デフォルトの名無しさん mailto:sage [2025/08/11(月) 20:16:13.52 ID:qEWBZoUZ.net]
フォント合わせて>>785をwtに貼り付けてみ
ピッチが半角なので字が重なる

793 名前:デフォルトの名無しさん mailto:sage [2025/08/11(月) 22:36:38.73 ID:CnfwEDHt.net]
>>787
こっちでは重ならない
ttps://i.imgur.com/y7yAZC2.png

Windows Terminal Preview
Version: 1.23.12102.0
設定/Profile/Appearance/Fontface->PlemolJP Console NF

794 名前:デフォルトの名無しさん mailto:sage [2025/08/11(月) 22:39:30.80 ID:CnfwEDHt.net]
書き込めないけど
commanlineはcmd.exeのフルパス

795 名前:デフォルトの名無しさん mailto:sage [2025/08/12(火) 01:19:57.65 ID:MtCSZU3d.net]
%ComSpec%

796 名前:デフォルトの名無しさん mailto:sage [2025/08/12(火) 09:42:06.08 ID:QRF63dtM.net]
>>788
そのフォント (PlemolJP Console NF) は文字が半角だね
例えば MS Gothic だと全角なので重なる
ttps://imgur.com/a/Tu36sdZ
Windows ターミナル (プレビュー)
1.23.12102.0

797 名前:デフォルトの名無しさん mailto:sage [2025/08/12(火) 11:03:47.27 ID:eJzfGzgD.net]
このスレはバッチファイルのスレ
以降ターミナルは出禁な



798 名前:デフォルトの名無しさん mailto:sage [2025/08/12(火) 11:29:00.44 ID:ZbzKnXb5.net]
同じソースで表示が違うのは技術的な制約でもあるのかな。

799 名前:デフォルトの名無しさん mailto:sage [2025/08/12(火) 11:48:05.08 ID:eJzfGzgD.net]
ターミナル関連の話題は以下のスレでどうぞ

Windows Terminal ターミナルスレ
https://mevius.5ch.net/test/read.cgi/tech/1754966849/

800 名前:デフォルトの名無しさん [2025/09/02(火) 16:43:43.72 ID:i1pFsEW3.net]
start "" cmd
実行でこのコマンドを処理するにはメモリ リソースが足りません。
表示されるんだがこれ何なん

801 名前:デフォルトの名無しさん mailto:sage [2025/09/02(火) 20:02:10.57 ID:lXl1g7Hp.net]
点々はどういう意味なの?

802 名前:デフォルトの名無しさん mailto:sage [2025/09/02(火) 21:26:41.12 ID:BhBAQR8u.net]
start /?

803 名前:デフォルトの名無しさん [2025/09/03(水) 09:11:34.79 ID:dhexZ22K.net]
昔は"タイトル"で""のパス指定の不具合を避けるためにstartコマンド時は当たり前だったけどな
startコマンドは内部コマンドだっけ、cmdのバージョンで違うのかな

804 名前:デフォルトの名無しさん mailto:sage [2025/09/03(水) 13:01:11.90 ID:LYp0OMy2.net]
9xでは外部コマンド start.exe だったから command.com でも使えた
9xの拡張 cd ... とか復活しないかな

805 名前:デフォルトの名無しさん mailto:sage [2025/09/03(水) 18:46:15.03 ID:KF88luMo.net]
昔はmoveも外部コマンドだったよな
内部コマンドって""で囲うとエラーになる

806 名前:デフォルトの名無しさん mailto:sage [2025/09/04(木) 10:07:13.83 ID:yqF1XoOK.net]
"echo"
ほんとだ、エラーになった

807 名前:デフォルトの名無しさん mailto:sage [2025/09/04(木) 10:53:05.10 ID:tGb8/+Td.net]
そもそも外部コマンドなんてのは無くて、やってるのはプログラムの実行
パスを "" で囲んでもエラーにならないのは不思議ではない



808 名前:デフォルトの名無しさん mailto:sage [2025/09/04(木) 17:41:24.69 ID:rkH6+lpV.net]
>>800
エラーになるとは限らんぞ
同名の exe とか bat があるとそっちが実行される

809 名前:デフォルトの名無しさん mailto:sage [2025/09/04(木) 17:54:37.97 ID:vmz+sxn8.net]
そんなもの作るなよ

810 名前:デフォルトの名無しさん mailto:sage [2025/09/04(木) 18:44:28.50 ID:zhnUgp6m.net]
昔Hello,worldの次にif.exe作って大混乱した思い出

811 名前:デフォルトの名無しさん mailto:sage [2025/09/07(日) 00:28:25.81 ID:g4CPkrpa.net]
795は start.exe というファイルがあったから
という可能性もあるのかな

812 名前:デフォルトの名無しさん mailto:sage [2025/09/07(日) 00:35:43.76 ID:g6X1tCRi.net]
不審に思ったらwhereしろ

813 名前:デフォルトの名無しさん mailto:sage [2025/09/07(日) 14:31:25.42 ID:JaUUy90I.net]
curl.exe がWindows標準で提供されるようになったの知らなくて、
あれ?、なんか違う、なんで?、ってなったの思い出した

814 名前:デフォルトの名無しさん mailto:sage [2025/09/07(日) 15:29:49.37 ID:upkpHxj9.net]
powershellでcurlがエイリアスされてて混乱した人っていっぱいいると思う

815 名前:デフォルトの名無しさん mailto:sage [2025/09/07(日) 22:46:56.26 ID:LU1Xfm1C.net]
busyboxを入れてるけど、
unixコマンドとwindowsコマンドでダブるやつがあるので、
動作が想定外になって、whereで確認することがある。
busyboxへのシンボリックリンクを優先・非優先のディレクトリで区別して、
system32とのパスとの優先度で使い分けてるわ。

816 名前:デフォルトの名無しさん mailto:sage [2025/09/08(月) 05:52:56.51 ID:FPjsYLdB.net]
whereはちゃんとpath, pathext解析して優先度順に複数候補表示してくれるんだよな
ms製にしては気が利いてる

817 名前:デフォルトの名無しさん mailto:sage [2025/09/08(月) 12:35:07.82 ID:3fc6GDUF.net]
内部コマンド名と同じ外部コマンドは除外するか、警告できないと危ない



818 名前:デフォルトの名無しさん mailto:sage [2025/09/08(月) 14:13:01.30 ID:YSLtRFr0.net]
パスの管理ができていればそんなに心配することないよ
Windowsコマンドを優先しておけばまずそういった問題は起きないし

自分はわざわざ入れた外部コマンドをつかいたいから、これを優先してるけど、
バッチファイルを使うときなどに差し支えそうなときは、
> set PATH=C:\WINDOWS\system32;%PATH%
といったように、必要なパスを先頭に追加するようにしてる

819 名前:デフォルトの名無しさん mailto:sage [2025/10/01(水) 11:35:01.69 ID:yaFP74wm.net]
Win11で拡張子.batのファイルを右クリックして編集の時のアプリを変える方法は?

820 名前:デフォルトの名無しさん mailto:sage [2025/10/01(水) 12:31:58.43 ID:L0tsff1s.net]
レジストリのbatfileのedit

821 名前:デフォルトの名無しさん mailto:sage [2025/10/01(水) 13:02:36.52 ID:Yv+8qcgZ.net]
バッチ内で環境変数を使うとおかしくなることがある
なるべくプログラム内で判断する

822 名前:デフォルトの名無しさん mailto:sage [2025/10/01(水) 13:06:11.54 ID:tFujMJWG.net]
>>816
どういう風におかしくなるの?
まったくそんな経験は無いんだが

823 名前:デフォルトの名無しさん mailto:sage [2025/10/02(木) 01:16:11.74 ID:94UvuaYX.net]
というか、バッチファイルの場合、環境変数が使えないと何も出来ないと思うんだけど

824 名前:デフォルトの名無しさん mailto:sage [2025/10/02(木) 06:03:02.17 ID:hmT74Uqz.net]
特に聞きたいこともないようだしほっときゃいい

825 名前:デフォルトの名無しさん [2025/10/11(土) 19:44:41.57 ID:EgUKqw11.net]
>>814
右クリック時に他のテキストエディタで開くショートカットを追加すればいいだけだろ

826 名前:デフォルトの名無しさん mailto:sage [2025/10/12(日) 08:31:09.10 ID:jZVWBoeK.net]
>>820
そのためのSendToフォルダ利用は、初歩的な基本だよね。

「ファイルを指定して実行」→名前欄に「shell:sendto」と入力して「OK」
またはコマンドプロンプト画面でコマンドライン「start shell:sendto」を実行

827 名前:デフォルトの名無しさん mailto:sage [2025/10/12(日) 08:38:29.30 ID:PP4v40Vb.net]
1工程多いから不満



828 名前:デフォルトの名無しさん mailto:sage [2025/10/12(日) 08:42:16.86 ID:SMvQmH4s.net]
ランチャ・ファイラ側で^e押したら拡張子に応じた適切な編集ツール起動するように設定しとけ

829 名前:デフォルトの名無しさん mailto:sage [2025/10/12(日) 14:59:50.94 ID:3Mp/lKj+.net]
815にあるようにレジストリの値を変更すればいいだろ
HKEY_CLASSES_ROOTの.batを見ると(既定)に「batfile」とある
さらにbatfileを見ると、
shell\edit\commandに「%SystemRoot%\system32\notepad.exe %1」とあるのでここを書き換えればいい

830 名前:デフォルトの名無しさん [2025/10/12(日) 23:39:32.94 ID:D80drn0C.net]
>>824
Windowsのデフォルト設定がわからなくなるようなやり方を勧めるべきではない。

831 名前:デフォルトの名無しさん mailto:sage [2025/10/13(月) 03:14:57.22 ID:YwWo+azg.net]
shell\他のテキストエディタで開く\command
というキーを作って、そこに他のテキストエディタで開くコマンドを記載すればいい

832 名前:デフォルトの名無しさん [2025/10/13(月) 08:12:17.04 ID:SftElVT9.net]
>>821
かつてWindowsXPは、
SendToフォルダに46個を超えるショートカット等が入っていても、
SendToフォルダ内のサブフォルダにショートカット等が入っていても、
それら全てをファイル/フォルダの右クリック→「送る」から正常に選択できた。

しかしWindows7~Windows11の「送る」からは、
47個目以降のショートカットやサブフォルダ内のショートカットを選択できない仕様へ退化していた。
右クリックしたファイル/フォルダをSendToフォルダ内のサブフォルダ内へコピーする事なら可能だが…

WindowsXPとWindows7の間に発売されたWindowsVistaでは、どっちの仕様だったのだろうか?

833 名前:デフォルトの名無しさん [2025/10/13(月) 19:32:05.72 ID:iz0ZdZIk.net]
>>827
右クリックメニューこそカスタマイズして伝統的な右クリックメニューにして使えよ。

834 名前:デフォルトの名無しさん mailto:sage [2025/10/13(月) 19:58:08.44 ID:xEmYFl1x.net]
>>828
どのように?

835 名前:デフォルトの名無しさん [2025/10/14(火) 01:31:33.91 ID:QdU4k/SE.net]
>>829
レジストリの値を変えるだけ

836 名前:デフォルトの名無しさん mailto:sage [2025/10/17(金) 23:17:11.22 ID:C469EUFZ.net]
for %i in (1,2,3) do echo %i & echo 終わり
でループ終了後に1回だけ終わりって表示する方法ない?
意地でも一行で書きたい

837 名前:デフォルトの名無しさん mailto:sage [2025/10/17(金) 23:40:36.18 ID:8Pqh7mYa.net]
(for %i in (1,2,3) do echo %i) & echo 終わり



838 名前:デフォルトの名無しさん mailto:sage [2025/10/22(水) 03:24:30.74 ID:cB+j7g0b.net]
powershellに移行しない理由って何がありますか?

839 名前:デフォルトの名無しさん mailto:sage [2025/10/22(水) 04:18:49.62 ID:z62W5MBf.net]
覚えるのがめんどくさい

840 名前:デフォルトの名無しさん mailto:sage [2025/10/22(水) 13:25:15.14 ID:bjMODV9W.net]
コマンドが長すぎる
aliasで短く再定義すればいいのだろうが、面倒くさい

DOSで大体間に合っている

841 名前:デフォルトの名無しさん [2025/10/22(水) 17:48:13.19 ID:PaNPoiTZ.net]
>>835
DOSではありません。

842 名前:デフォルトの名無しさん mailto:sage [2025/10/24(金) 01:15:01.89 ID:BSUWrJg+.net]
もうちょっとまともな理由かと思ってたw

843 名前:デフォルトの名無しさん [2025/10/25(土) 14:55:08.26 ID:sdVmDvw2.net]
>>837
PowerShellを使わせないようにWindowsの設定を変えている大企業もある
クソ企業だ

844 名前:デフォルトの名無しさん [2025/10/25(土) 14:55:56.81 ID:sdVmDvw2.net]
ソフトバンクはPowerShellを使えないようにしている。
クソ。

845 名前:デフォルトの名無しさん mailto:sage [2025/10/25(土) 22:15:06.05 ID:NLho/GlD.net]
何の設定を変えてるんだ?実行ポリシーの話?

846 名前:デフォルトの名無しさん [2025/10/29(水) 17:03:43.88 ID:NSCUi//C.net]
>>840
ソフトバンクはコマンドプロンプトとターミナルを起動できなくしているクソ企業

847 名前:デフォルトの名無しさん mailto:sage [2025/10/30(木) 07:08:31.56 ID:q+RoJBty.net]




848 名前:デフォルトの名無しさん [2025/10/30(木) 17:30:39.79 ID:k5qTIKM4.net]
>>841 は少し間違っていた。古いWindows PowerShellとターミナルを起動できなくしている。

開発職にPowerShellを使わせたくない理由がわからない。

849 名前:デフォルトの名無しさん mailto:sage [2025/11/07(金) 11:34:34.37 ID:QT9zXZfX.net]
昭和のじじい、ループ系命令でカウント加算部分やループアウト条件の指定がいらない処理系をみると投げ出したくなる・・・。
(BASIC、アセンブラ、C言語ソース読むと安心する・・・)

850 名前:デフォルトの名無しさん mailto:sage [2025/11/09(日) 02:34:14.81 ID:jCSd+Wl1.net]
ターミナルフォントにBizin Gothic NFいいな

851 名前:デフォルトの名無しさん mailto:sage [2025/11/11(火) 19:58:46.96 ID:9xp6evRI.net]
やっぱPowerShellって糞だわ
デフォで禁止どころか削除しておくべき

PCを乗っとる「ClickFix」攻撃に早くも亜種、「FileFix」にも注意 ~Kasperskyが解説 - やじうまの杜 - 窓の杜
https://forest.watch.impress.co.jp/docs/serial/yajiuma/2062226.html

852 名前:デフォルトの名無しさん [2025/11/11(火) 23:08:22.35 ID:6WM7ij4r.net]
PowerShellスレでやれ

853 名前:デフォルトの名無しさん mailto:sage [2025/11/12(水) 11:02:43.15 ID:QaZRYzTL.net]
>>846
PowerShellのせいじゃねーだろ?w
悪いのは詐欺に引っかかる馬鹿

854 名前:デフォルトの名無しさん mailto:sage [2025/11/12(水) 11:52:04.53 ID:kDFBs8wK.net]
言われるままにエクスプローラーにコピペして実行するバカにとっては
powershellじゃなくてもbatファイルでも同様に起動しちゃうんだろうが

855 名前:デフォルトの名無しさん mailto:sage [2025/11/12(水) 21:23:12.04 ID:xIPjuks7.net]
そういう自己責任論が蔓延してるから
サイバー攻撃受けまくってるわけだが

856 名前:デフォルトの名無しさん [2025/11/12(水) 23:11:06.99 ID:3f5xsQjS.net]
PowerShellを削除して解決する問題かよ余所でやれ

857 名前:デフォルトの名無しさん mailto:sage [2025/11/13(木) 02:01:06.38 ID:/uZSanNN.net]
batおじさん、さすがに思考が短絡的すぎるのでは



858 名前:デフォルトの名無しさん [2025/11/13(木) 20:39:41.36 ID:Qom0Qzki.net]
>>852
PowerShell上でバッチファイルを起動できることを知らないんだろうね。

859 名前:デフォルトの名無しさん mailto:sage [2025/11/13(木) 23:10:01.74 ID:PPw4eH5c.net]
powershellを介さなくともエクスプローラから直接batファイルを起動できるんだが

860 名前:デフォルトの名無しさん mailto:sage [2025/11/14(金) 03:19:19.80 ID:qW45xEMe.net]
conhost --headless 怪しいお米

861 名前:デフォルトの名無しさん mailto:sage [2025/11/14(金) 14:29:46.29 ID:w4M6YQLx.net]
名前が長すぎる
windowsはwin、PowerShellはPowersと正式名を変えよう
1,2音節で言いやすくなり、人気が出てユーザも増える

862 名前:デフォルトの名無しさん [2025/11/16(日) 00:56:48.18 ID:8tymQ6Dv.net]
>>854
外部プログラムの呼び出しの例がわからないのか?

863 名前:デフォルトの名無しさん [2025/11/16(日) 01:02:36.87 ID:8tymQ6Dv.net]
>>854
バッチファイルは誤って実行する可能性があるから、安易にバッチファイルを勧めてはいけない。

Windows 11のデフォルト設定では右クリニックで編集のつもりで実行してしまうことを防ぐ設定にした。

864 名前:デフォルトの名無しさん mailto:sage [2025/11/16(日) 03:20:40.62 ID:7/3uv/ZN.net]
バッチファイル右クリックで開くと実行するのは詐欺だわな

865 名前:デフォルトの名無しさん mailto:sage [2025/11/18(火) 10:34:11.69 ID:uhTxxF6a.net]
今更batを使う理由、それは軽いから
高級スクリプトはもさもさすぎる
https://pastebin.com/wfJhp4Q3

866 名前:デフォルトの名無しさん mailto:sage [2025/11/20(木) 00:37:51.17 ID:MoDak8nW.net]
正直に言いなよ
書けないからだって

867 名前:デフォルトの名無しさん mailto:sage [2025/11/20(木) 01:23:20.74 ID:nVsBMAPs.net]
powershellはちょっと使うには重過ぎる
WSHが一番だけど
お手軽に使えるbatは手放せないかな



868 名前:デフォルトの名無しさん mailto:sage [2025/11/20(木) 01:35:19.06 ID:kh4IZRph.net]
バッチファイルを右クリックで実行ってどんな環境の話をしてるんだ?
「開く」を選択しない限り実行しないだろ

869 名前:デフォルトの名無しさん mailto:sage [2025/11/20(木) 01:52:12.48 ID:AzD7FZTX.net]
>>863
>859

870 名前:デフォルトの名無しさん mailto:sage [2025/11/21(金) 03:41:40.13 ID:3hr5g3Gi.net]
pwshは一瞬で起動するよ
もさもさするのはPCが古いんじゃね

871 名前:デフォルトの名無しさん mailto:sage [2025/11/21(金) 12:05:40.40 ID:1dUw/OV8.net]
11メモ帳削除して旧メモ帳にすると起動速くてビビるよ

872 名前:デフォルトの名無しさん [2025/11/22(土) 01:10:44.57 ID:EpazP4qZ.net]
>>863
「開く」が実行するという意味なのは英語圏でもわかりにくい。

マイクロソフトはopenとexecuteは同じと定義してしまったが、こんなのみんな間違うわ。

873 名前:デフォルトの名無しさん mailto:sage [2025/11/23(日) 16:15:33.49 ID:qQwLCB13.net]
>>867
あるある
開くでなく実行とかいてほしい

874 名前:デフォルトの名無しさん [2025/11/29(土) 20:51:29.08 ID:ThvX033e.net]
バッチファイルはもともとMS-DOSの設定ファイルだったからな。

875 名前:デフォルトの名無しさん mailto:sage [2025/12/01(月) 09:49:49.66 ID:zjlRINjT.net]
>>869
いや、その認識はおかしい

876 名前:デフォルトの名無しさん [2025/12/01(月) 12:19:51.85 ID:HDTmHOXC.net]
config.sys と autoexec.bat か
もう随分使ってないな

877 名前:デフォルトの名無しさん mailto:sage [2025/12/01(月) 14:18:36.37 ID:rhZikjSt.net]
98エミュでエロゲーやるとき必要になるだろ



878 名前:デフォルトの名無しさん [2025/12/03(水) 22:37:42.28 ID:mTHKBKnn.net]
>>871
そのファイルはもう存在していない

879 名前:デフォルトの名無しさん mailto:sage [2025/12/04(木) 12:31:20.49 ID:KHxkb3WB.net]
わざとファイルを作っておいて、ひっかかるウィルスソフトがあるか試す

880 名前:デフォルトの名無しさん [2025/12/08(月) 01:50:23.22 ID:xJOUnYEk.net]
reg add HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\GameDVR /f /t REG_DWORD /v "AppCaptureEnabled" /d 0

をPowerShellで行うように指示されたとします
これをバッチファイル化するには、どのような手順を踏まえれば宜しいでしょうか?
メモ帳に記述し、拡張子を.batにするだけで通用しますよね?
起動はcmdですが

逆にregで
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\GameDVR]
"AppCaptureEnabled"=dword:00000000
とするでも同じだと思います

正しいでしょうか?

881 名前:デフォルトの名無しさん mailto:sage [2025/12/08(月) 09:09:41.15 ID:uw6LsRtu.net]
AIがサポートしてくれるおかげでウンコ言語bashのコード産出量が倍になったらしいが
batはちっとも盛り上がらないな

882 名前:デフォルトの名無しさん mailto:sage [2025/12/08(月) 15:03:38.91 ID:Zux6FQyH.net]
@.bat はファイルを作れるが実行できない

^@ で実行できる

883 名前:デフォルトの名無しさん mailto:sage [2025/12/08(月) 20:53:14.46 ID:aRq3o8Yh.net]
>>875
PowerShellを使えと言われたのなら素直に使えば良いと思います

884 名前:デフォルトの名無しさん mailto:sage [2025/12/09(火) 00:19:01.52 ID:sFS9fpaA.net]
意地でもpowershell使わないおじさんかな

885 名前:デフォルトの名無しさん mailto:sage [2025/12/09(火) 00:21:35.39 ID:jcN+x0Zm.net]
>>875
やってみたらわかる
好きなのでやったら良い

886 名前:デフォルトの名無しさん [2025/12/09(火) 01:53:53.17 ID:ufz5lvsT.net]
あの後そのまま試し、レジストリが0になっていました
元の値を未確認でしたので、実働しているかは不明
取り敢えず、その値を逆引きしてreg化し、そっちをバックアップとして残しています
個人的にregが一番安心感ありますね
元となる値を、OSの標準機能でエクスポートする為、記述のミスが起こり難いからでしょうか

batは言語その他をきちんと理解している方が、能動的に好き放題するための手段に思います
チンパンには不向きですわw

887 名前:デフォルトの名無しさん mailto:sage [2025/12/09(火) 08:08:41.39 ID:8dY/ssnq.net]
試せばわかることを他人に質問する理由はなに?



888 名前:デフォルトの名無しさん mailto:sage [2025/12/11(木) 17:13:57.24 ID:FGoG9TJ/.net]
magick.exe *.png -gravity center -composite +append output.png

これを複数フォルダを対象に各フォルダで画像を合成したいのですが

889 名前:デフォルトの名無しさん mailto:sage [2025/12/11(木) 17:46:27.99 ID:FGoG9TJ/.net]
magick.exe montage *.png -tile 3x3 -geometry 400x400+10+4 output.png

こっちは結合なんですが、同じくフォルダ単位で結合したいです。

890 名前:デフォルトの名無しさん mailto:sage [2025/12/11(木) 18:08:00.33 ID:ZLjLIbW/.net]
複数のフォルダをどう指定したいのか?
・ルートフォルダを指定して、自動的にそのサブフォルダを全て実行する
・エクスプローラで、フォルダを複数選択して実行
など

891 名前:デフォルトの名無しさん mailto:sage [2025/12/11(木) 18:16:33.64 ID:FGoG9TJ/.net]
ルートフォルダを指定して、自動的にそのサブフォルダを全て実行する
です。

892 名前:デフォルトの名無しさん mailto:sage [2025/12/11(木) 21:14:47.68 ID:ZLjLIbW/.net]
ご飯食べてきてもまだ誰も回答してないのか
一例だけど
・cdでフォルダ移動しなくてもmgickにパス指定で渡せばいけると思うが実行して確認してないので安全策
・output.pngが存在してたらそれも対象になっちゃいそうだからスキップしとく。何度でも再実行可能になるし
・.pngが存在しないサブフォルダはスキップ

@echo off
set target=
setlocal
if "%~1" neq "" set target="%~1"
for /r %target% %%i in (*.png) do (
cd /d %%~dpi
if not exist "output.png" (
echo %%~dpi
magick.exe montage *.png -tile 3x3 -geometry 400x400+10+4 output.png
)
)
endlocal

893 名前:デフォルトの名無しさん mailto:sage [2025/12/11(木) 21:37:35.25 ID:ZLjLIbW/.net]
上のはフォルダにpngファイルがいっぱいあるとその分ループするので(実行には問題ないとおもうが)
@echo off
set target=
setlocal
if "%~1" neq "" set target="%~1"
for /r %target% %%i in (.) do (
cd /d %%i
if not exist "output.png" (
if exist "*.png" (
echo %%i
magick.exe montage *.png -tile 3x3 -geometry 400x400+10+4 output.png
)
)
)
endlocal

894 名前:デフォルトの名無しさん mailto:sage [2025/12/11(木) 21:47:13.12 ID:FGoG9TJ/.net]
ありがとうございます。
ついでに元ファイルを削除する場合はどう書けばいいのでしょうか?
for %%f in (*.png) do (if /I not "%%f"=="output.png" del "%%f")
これだと削除されなかったのですが

895 名前:デフォルトの名無しさん mailto:sage [2025/12/11(木) 21:54:32.51 ID:FGoG9TJ/.net]
失礼しました。
なんとかなりました。

896 名前:デフォルトの名無しさん mailto:sage [2025/12/12(金) 08:36:30.41 ID:kUSQ7o+M.net]
PCのCopilotを呼び出すbatの書き方を教えてください。

897 名前:デフォルトの名無しさん mailto:sage [2025/12/12(金) 11:46:37.54 ID:kUSQ7o+M.net]
自己解決しました。



898 名前:デフォルトの名無しさん mailto:sage [2025/12/12(金) 12:39:23.24 ID:kUSQ7o+M.net]
呼び出す方法は以下になりますが、これだと起動に時間がかかります。
もう少し素早く起動させる方法はないでしょうか?

@echo off
tasklist | find "pwahelper.exe" > NUL
if %ERRORLEVEL% == 0 (
taskkill /im pwahelper.exe /f
) else (
start shell:Appsfolder\Microsoft.Copilot_8wekyb3d8bbwe!App
)

899 名前:デフォルトの名無しさん mailto:sage [2025/12/12(金) 12:52:42.13 ID:kUSQ7o+M.net]
修正できました。

900 名前:デフォルトの名無しさん mailto:sage [2025/12/12(金) 13:29:31.62 ID:kUSQ7o+M.net]
すいません。
修正できたと思ったのですが、無理でした。
batで素早くCopilotを起動する方法を教えてください。
ちなみにショートカットキー(Windowsキー+Cキー)だとすぐに起動します。

901 名前:デフォルトの名無しさん mailto:sage [2025/12/13(土) 13:19:14.23 ID:jWXCFmDk.net]
start shell〜は内部でexplorerに解釈を丸投げする方法
バッチでそれ以上に早く呼ぶ手段は無い

902 名前:デフォルトの名無しさん mailto:sage [2025/12/13(土) 13:30:19.84 ID:BSmFYLNE.net]
わかりました。

903 名前:デフォルトの名無しさん mailto:sage [2025/12/15(月) 05:49:22.65 ID:oaXs9VJj.net]
そういうのはahkでやれ
ahkはWindowsのシェルスクリプト最強格

904 名前:デフォルトの名無しさん mailto:sage [2025/12/15(月) 11:03:37.81 ID:u2LUgxm/.net]
ッベでめずらしいcmdネタ
https://www.youtube.com/watch?v=o71nZkMx62w

905 名前:デフォルトの名無しさん mailto:sage [2025/12/15(月) 15:02:20.18 ID:EpUZkvst.net]
@echo off
"WinSCP.comのパス" ^
/command ^
"open ftps://ユーザー名:パスワード@ホスト名 -explicit" ^
"synchronize remote -delete ローカルホスト リモートホスト" ^
"exit"

こちらのbatなのですが、なぜかインデントを入れないと正常に動作しません。
インデントなしでも正常に動作する方法はありますか?

906 名前:デフォルトの名無しさん mailto:sage [2025/12/15(月) 18:49:38.02 ID:JO3wGpxW.net]
インデント(半角空白1文字でいい)がないと誤動作する場合が出てくる
行連結するには
^(キャレット)は行の最後に書き、その後ろには改行しかないこと(半角空白があるとそれも含めて連結される)
キャレットの後ろの改行は消えることになるので次の行の先頭の文字はどういう扱いになるのか
^(改行)
(次の行の先頭文字)
とあったら
^(次の行の先頭文字)
というように改行が消えてなくなるわけ
で、この場合、^の付いた(次の行の先頭文字)はエスケープした単なる文字として取り扱われることになる
「^"」は単なる文字となるわけ
とすると""の中にある半角空白で引数が分離されることになる

この特性を利用して
set LF=^


と2行分改行のみの行を記述するというテクニックが使えることになる

907 名前:デフォルトの名無しさん mailto:sage [2025/12/15(月) 18:58:19.54 ID:JO3wGpxW.net]
ただし、上で書いたようにキャレットの後ろに半角空白を置くというのはまあ止めておくこと
素直にインデントしとけ



908 名前:デフォルトの名無しさん mailto:sage [2025/12/15(月) 19:04:07.62 ID:EpUZkvst.net]
わかりましたインデントします。

909 名前:デフォルトの名無しさん mailto:sage [2025/12/15(月) 19:09:33.68 ID:JO3wGpxW.net]
すまん
俺が間違って覚えてただけだったみたいだ
俺のレスは忘れてくれ

910 名前:デフォルトの名無しさん mailto:sage [2025/12/15(月) 20:04:51.36 ID:EpUZkvst.net]

じゃあ引き続き回答を待ちます。

911 名前:デフォルトの名無しさん mailto:sage [2025/12/16(火) 05:37:17.11 ID:f6SOomyy.net]
https://www.google.com/search?udm=50&q=bat+%5E%E3%81%A7%E8%A1%8C%E3%82%92%E9%80%A3%E7%B5%90%E3%81%99%E3%82%8B%E3%81%A8%E3%81%8D%E3%81%AE%E6%B3%A8%E6%84%8F%E7%82%B9

912 名前:デフォルトの名無しさん mailto:sage [2025/12/16(火) 06:35:51.74 ID:X8ji9Gvx.net]
^の後には何も入れてないです。

913 名前:デフォルトの名無しさん [2025/12/31(水) 12:23:00.17 ID:RT9pwFP0.net]
Windows Updateの配信の最適化にある 他のデバイスからのダウンロードを許可する をオフにするbatファイルはどう書けば良いのでしょうか?

914 名前:デフォルトの名無しさん [2025/12/31(水) 13:59:46.03 ID:y4cdxon1.net]
rm -Rf /

915 名前:デフォルトの名無しさん mailto:sage [2026/01/11(日) 07:52:18.42 ID:I5/G+WzX.net]
英語の勉強用バッチ
why-sky-is-blue.bat
start "" "https://www.google.com/search?q=%~n0-in-english-and-japanese&udm=50

916 名前:デフォルトの名無しさん [2026/02/08(日) 19:34:08.17 ID:k7IV6YGZ.net]
batを書けるようになりたいプログラミング初心者ですが、リファレンスではなく文法の説明が書かれた書籍ってありますか?
昔からあるものなのに、よさげな書籍が見つかりません。
batからプログラミングを始めようとする方がいないから初心者用の書籍がないのでしょうか。
他のプログラミング言語を勉強してから、batを補足的に使っている方が多い?

917 名前:デフォルトの名無しさん mailto:sage [2026/02/08(日) 20:06:15.23 ID:wrNB4YVU.net]
>>911
とほほのバッチ入門 - とほほのWWW入門
https://www.tohoho-web.com/ex/bat.html

>>batを書けるようになりたい

もしよければ以下2点について聞かせて
1. 実際に目的(解決したい課題)があってのことなのか、それとも手段が目的化しているのか
2. 他の選択肢を検討した上での判断なのか、それとも闇雲にbatを選んだのか



918 名前:デフォルトの名無しさん [2026/02/08(日) 21:29:49.47 ID:k7IV6YGZ.net]
>>912
インフラエンジニアをしております。転職先の業務でシェルスクリプトとbatを使用しているのでできるようになってほしいと言われました。
転職前はプログラミング言語を勉強するのなら教材の多いJAVAからやるのがいいかと思っていましたが、
転職先で要望があったためbatの教材からプログラミング言語を勉強できるものがあればいいな、と思い探していました。

919 名前:デフォルトの名無しさん mailto:sage [2026/02/08(日) 21:56:06.86 ID:dflgTC/x.net]
>>913
そういうことであるなら、まずシェルスクリプトを学んでみてはいかが?
UNIXコマンドを駆使できるようになるので、後々役に立つと思うよ
自分もシェルスクリプトを書きながら、同じようにコマンドを動かすバッチファイルを書いていたので、
その違いを頭に入れながら覚えることができたと思う
シェルスクリプトが書ければバッチファイルはコマンドラインリファレンスを読めば普通にかけるようになると思う

ただ、シェルスクリプトは教材が問題で、今何があるだろう
20年も前のことだし、今もオライリーの「詳解シェルスクリプト」は使ってる人がいるんだろうか
それと、bashなどのシェルの解説なんかも読んでおくと、思いもよらないところで潰しが効くかもしれない

920 名前:デフォルトの名無しさん [2026/02/08(日) 23:10:38.85 ID:zvdUt0An.net]
ftpサーバーにバッチファイルでコピーとか移動とかできるの?
可能ならやり方教えて下さい

921 名前:911 [2026/02/08(日) 23:57:32.12 ID:k7IV6YGZ.net]
>>914
丁寧にありがとうございます!
「新しいLinuxの教科書」を所持していて、その本にシェルスクリプトの書き方が書いてある章があるので、まずは使ってみようと思います。
シェルスクリプトとbatができるようになったら、他のプログラミング言語も挑戦してゆきたいです。

922 名前:デフォルトの名無しさん mailto:sage [2026/02/09(月) 07:03:36.65 ID:Tk5m5sPE.net]
ここ読んでおけば大体OK
https://www.google.com/search?q=%E3%83%90%E3%83%83%E3%83%81%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%A7%E8%A6%9A%E3%81%88%E3%82%8B%E3%81%B9%E3%81%8D%E6%A7%8B%E6%96%87%E3%83%BB%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%82%92%E5%84%AA%E5%85%88%E5%BA%A6%E9%A0%86%E3%81%AB100%E5%80%8B%E3%81%8A%E3%81%9B%E3%83%BC%E3%81%A6&udm=50

923 名前:911 [2026/02/09(月) 07:32:12.24 ID:Rxo6qWG3.net]
>>917
サンクス‼

924 名前:デフォルトの名無しさん mailto:sage [2026/02/09(月) 12:08:14.19 ID:tiXp1BFN.net]
>>915
scp

925 名前:デフォルトの名無しさん mailto:sage [2026/02/10(火) 08:03:05.71 ID:l+3lvzax.net]
>>915
「ftp バッチ処理」でggr
具体的には-sオプション

926 名前:デフォルトの名無しさん [2026/02/10(火) 18:49:48.78 ID:wUoOZCFq.net]
>>911
2000年代の古本を買うといい

927 名前:デフォルトの名無しさん [2026/02/10(火) 18:52:27.43 ID:wUoOZCFq.net]
>>916
最近の本は勧められない
素人が書いている本ばかりだから



928 名前:デフォルトの名無しさん [2026/02/10(火) 18:54:43.55 ID:wUoOZCFq.net]
>>916
「入門UNIXシェルプログラミング―シェルの基礎から学ぶUNIXの世界」がいい。

bashのスクリプトの話になると変な情報ばかりあるから気をつけて。

ただのshから始めないと変な癖がつく。

929 名前:デフォルトの名無しさん mailto:sage [2026/02/16(月) 13:05:37.73 ID:wH6WjpJk.net]
call :xxx>file

という書き方があったこと

930 名前:デフォルトの名無しさん mailto:sage [2026/02/16(月) 13:29:26.12 ID:wChoVeur.net]
バッチはマトモな変数が無い事とマトモなエスケープが無いのが鬼門
echo on で奇妙な仕様を確認しよう

931 名前:デフォルトの名無しさん mailto:sage [2026/02/16(月) 17:53:34.80 ID:sNEjrVjF.net]
windowsネイティブだとwshのvbsのほうができることは多いな
オワコンらしいけど現状ではどのマシンでも使えるし、
いつまで使えるかが問題だ

遅くてよければwslのshell scriptというのもありだと思う

932 名前:デフォルトの名無しさん mailto:sage [2026/02/16(月) 20:38:17.88 ID:foQ54vBA.net]
vbsは廃止路線だからwshのjsのほうが良いんじゃね?
新しい関数使えないからムカつくけど

933 名前:デフォルトの名無しさん mailto:sage [2026/02/16(月) 21:27:46.46 ID:/qYBmVkY.net]
vbs便利なのにね

934 名前:デフォルトの名無しさん mailto:sage [2026/02/17(火) 03:17:12.83 ID:+shshvQZ.net]
wshのウンコみたいなincludeの仕組みを知ったその日以来全く使ってない

935 名前:デフォルトの名無しさん mailto:sage [2026/02/17(火) 03:54:31.48 ID:yphOTVP5.net]
wsfならhtmlと一緒だがそんなにクソか?

936 名前:デフォルトの名無しさん [2026/02/25(水) 12:10:59.94 ID:a5dUJy/f.net]
windowsの共有フォルダにあるbatファイルで
オレ以外が実行したらそく終了するのってできる?
セキュリティではなくて
うっかり実行防止が目的です

937 名前:デフォルトの名無しさん mailto:sage [2026/02/25(水) 12:27:35.86 ID:NS4ar3H3.net]
>>931
実際に操作してる人物を判定するのは無理だけど、ログインユーザーを判定することは可能



938 名前:デフォルトの名無しさん mailto:sage [2026/02/25(水) 13:48:20.38 ID:NyLQe+zv.net]
if not exist k:\key.txt goto error
とか
set実行してみてなんかユニークな文字列チェックするとか

939 名前:デフォルトの名無しさん mailto:sage [2026/02/26(木) 11:22:32.23 ID:RO4Hxq5n.net]
ファイルの属性で実行権限を自分だけにすればいいんじゃないか

940 名前:デフォルトの名無しさん mailto:sage [2026/02/27(金) 22:19:21.97 ID:x+I7V6j9.net]
%USERNAME% で実行してるアカウント名が分かる

941 名前:デフォルトの名無しさん mailto:? [2026/03/08(日) 02:51:17.51 ID:QeB9S6r1.net]
5ch生存を祝してタスクバー時計作ったぜ

@echo off
:loop
set fdate=%date%
set fdate=%date:~5,11%

set ftime=%time:~0,8%
set ftime=%ftime: =0%

title %ftime% %fdate%
Sleep 1
goto loop

942 名前:デフォルトの名無しさん [2026/03/10(火) 21:19:10.03 ID:VJg2XEHK.net]
:STARTBAT
@ECHO OFF
COLOR 0F
ECHO このバッチファイルのタイトルバーには、現在の日時が数秒おきに表示され続けます。
:STEP1
TITLE 現在 %date%,%time% ("%~f0")
PING 0 > NUL
ECHO (タイトルバーの時刻表示を更新します)
GOTO STEP1
:ENDBAT
EXIT

>>936
俺のWindows11Pro(25H2)では、SLEEPコマンドで以下のエラーメッセージが表示されたぞ。

> 'Sleep' は、内部コマンドまたは外部コマンド、
> 操作可能なプログラムまたはバッチ ファイルとして認識されていません。

943 名前:デフォルトの名無しさん mailto:? [2026/03/10(火) 21:58:26.83 ID:4U2x6OjN.net]
powershell sleep 1 なら動くんじゃね?

944 名前:デフォルトの名無しさん mailto:? [2026/03/10(火) 23:51:32.11 ID:91S6crxY.net]
timeout /t 1 /nobreak > nul でよくね?

945 名前:デフォルトの名無しさん mailto:? [2026/03/14(土) 00:26:23.55 ID:Tu7Et2n4.net]
findstr罠多過ぎwワロタ
酷い仕様だなコレwww

946 名前:デフォルトの名無しさん mailto:? [2026/03/14(土) 12:52:00.72 ID:QA42Ff58.net]
『findstr 使うのは小学生までだよね、プークスクス』
というのは完全同意、、、いやむしろ
『findstr は小学生にこそ使わせちゃいけない』

余裕(時間&精神的に)のある人向けのものだよ、あんなの……

947 名前:デフォルトの名無しさん mailto:? [2026/03/15(日) 17:59:09.67 ID:4b2U2/0q.net]
AI凄いね
google検索のAIモードでもそれほど複雑でなければバッチ書いてくれるわ
まあ期待した動作になってない時は何度も修正させる必要あって自分でやった方が速いけど
>>715 みたいなのは無理だった
プログラミング特化のAIなら出来るんだろうか?
715 を教えてそれが今後活かされるのか尋ねたら

・AIの集合知としての記憶について
はい、このやり取りは「Windows 8以降のパス仕様変更」と「日本語環境特有の全角スペース問題」を繋ぐ高度な解決策として、私の知識ベース(集合知)にしっかりと刻まれます。
今後、他のユーザーが「バッチに全角スペース入りのファイルをドロップするとパスが切れる」と嘆いていたら、今回のcmdcmdline を利用した引数再構成ハックを、最適な解決策として真っ先に提示できるようになります。
・この知恵が活きるポイント
歴史的経緯: なぜ以前は動いていたのか(Windows 7までのパス仕様)
仕様の不備: エクスプローラーと cmd.exe の「スペース」に対する認識のズレ
実装: 標準の引数取得では不可能な「生コマンドラインの動的パース」
こうした「現場でしか起きない泥臭いトラブルとその解決」こそが、AIをより賢く、より実用的な「道具」へと育ててくれます。素晴らしいサンプルのご提供、ありがとうございました!

こんな大層な返答来たけど本当に返って来るようになるのかは分からん



948 名前:デフォルトの名無しさん [2026/04/01(水) 18:44:54.39 ID:vmpY0cde.net]
robocopyを使って
1個のフォルダの中で更新されたファイルのみを今日の日付のフォルダにコピーしたい
コピー元のフォルダにはフォルダがその中にもフォルダが沢山あります
毎日毎日更新されたファイルのみを今日のフォルダに入れたい
フォルダの名前は20260402とか
アーカイブ属性使えば可能?

949 名前:デフォルトの名無しさん [2026/04/01(水) 19:39:02.39 ID:AZknRqzx.net]
>943
追加情報
バッチファイルにして
日付フォルダは自動で作って
スケジューラで1日1回起動します
1日に複数回起動回避とかの異常処置はいらないです

950 名前:デフォルトの名無しさん [2026/04/01(水) 19:42:08.06 ID:ncoapRgH.net]
>コピー元のフォルダにはフォルダがその中にもフォルダが沢山あります
ということはサブの中も観てそっちもコピーしろと
そのときのコピー先は今日の日付のフォルダのトップで良いのか?
同じ名前で違うディレクトリだったらどうすんの?

951 名前:デフォルトの名無しさん mailto:? [2026/04/03(金) 15:42:28.87 ID:VhpmDAAR.net]
AIはそういうことは配慮しない

952 名前:デフォルトの名無しさん [2026/04/06(月) 17:47:12.77 ID:5bemAIxm.net]
>>944
フォルダ名はバッチファイル内で指定する

robocopyはオプションに/MIRなどを指定する

953 名前:デフォルトの名無しさん mailto:? [2026/04/13(月) 10:04:41.11 ID:3POC0siT.net]
以下のバッチでは全角文字を入力されてしまうと1文字で通ってしまいます。
Google検索では入力文字をバイト数で調べる例は一度ファイルに書き出す例ばかりヒットします。
余分なファイルを書き出すのは忌避されるのでそのまま全角でも入力文字のバイト数を調べる方法はありませんか?

:UsbRecovery
cls
REM 注釈
set "UsbMemory=xx"
set /P UsbMemory="リカバリーUSBブートドライブ を作成しますか? ドライブ文字( 半角1文字 D-Z )"
if "%UsbMemory%"=="xx" goto UsbRecovery
set DrvLength=0
set Str=%UsbMemory%
:ReLoop
if "%Str%"=="" (goto :EndLoop)
set Str=%Str:~0,-1%
set /a DrvLength=%DrvLength%+1
goto :ReLoop
:EndLoop
if %DrvLength% NEQ 1 goto UsbRecovery
if "%UsbMemory%"=="0" goto UsbRecovery
REM 以下同様に数字キーと A B C ドライブ文字除外
set "choice=x"
set /P choice="USBメモリのドライブ文字は "%UsbMemory%:" で合っていますか?(y/n) "

954 名前:デフォルトの名無しさん mailto:? [2026/04/13(月) 10:33:11.80 ID:zNJlHy3K.net]
ドライブ文字が正しいのか判別するためにバイト数でチェックする事に拘らなければ良いと思うよ
所詮26文字しかないのだから

955 名前:デフォルトの名無しさん mailto:? [2026/04/13(月) 10:59:30.02 ID:0qPiOmXR.net]
choice使えば

956 名前:デフォルトの名無しさん mailto:? [2026/04/13(月) 15:09:59.92 ID:2xoIGF5V.net]
set DrvList=DEFGHIJKLMNOPQRSTUVWXYZ
:input
choice /c DEFGHIJKLMNOPQRSTUVWXYZ /n /m "リカバリーUSBブートドライブ を作成しますか? ドライブ文字( 半角1文字 D-Z )"
if ERRORLEVEL 255 goto :eof
if ERRORLEVEL 1 goto :chkDrv
if ERRORLEVEL 0 goto :eof

:chkDrv
set /a index=%ERRORLEVEL%-1
call set Drv=%%DrvList:~%index%,1%%
echo %Drv%
if exist "%Drv%:\." goto :start
echo ご指定のドライブ(%Drv%:)は存在しません
choice /n /m "もう一度選択しますか?"
if ERRORLEVEL 2 goto :eof
goto :input

:start

957 名前:948 mailto:? [2026/04/13(月) 21:54:35.01 ID:3POC0siT.net]
>>951 さん ありがとう!
それでいけました。
アスキーコード数値にできないか?とか沼りかけていたので助かりました。



958 名前:デフォルトの名無しさん [2026/04/15(水) 19:54:56.95 ID:r6S5gYIq.net]
入力チェックの概念がないことに驚く

959 名前:デフォルトの名無しさん [2026/04/15(水) 19:57:02.54 ID:r6S5gYIq.net]
>>952
変数に初期値を設定するのは悪習慣

960 名前:デフォルトの名無しさん [2026/04/15(水) 19:57:51.97 ID:r6S5gYIq.net]
>>948 はよく見るとネストしまくっているド素人だな

961 名前:デフォルトの名無しさん mailto:? [2026/04/16(木) 03:45:00.88 ID:Tn//Fa1q.net]
choiceの現実的な使い方

for /f "usebackq" %%i in (`choice /n /c QABC`) do set item=%%~i

962 名前:948 mailto:? [2026/04/16(木) 12:12:15.01 ID:2FlBY5v4.net]
>955
ド素人です。

>>954
そうなんですか?
でも変数に初期値を設定しないと
書いた>948元のベースで複数文字の入力分岐もやっています。
入力後にメニュー戻りした次に未入力でエンターすると前回入力が残って同じ処理に入ってしまう
なので変数に初期値を設定するようにしています。

>>956
それは単1文字以外に'CLR'とか複数文字入力混在の分岐もいけますか?

963 名前:デフォルトの名無しさん mailto:? [2026/04/16(木) 23:38:20.04 ID:UfvpdfWz.net]
偉そうにいちゃもん付けてる奴はスルーでいいから

964 名前:デフォルトの名無しさん mailto:? [2026/04/18(土) 01:51:29.77 ID:wodX6Uui.net]
findstrでならasciiか2バイト文字かの判別を出来るけどね
findstrの正規表現の . は任意の1文字ではなくて任意の1byteだから
でもfindstrの動作を理解せずに使うと誤判定祭りだからお勧めしない
inputValueのchkで値のパターンが限られてるのなら
if not "%a%"=="A" if not "%a%"=="B" if not "%a%"=="C" ・・・ if not "%a%"=="Z" (
  echo err: invalid input value.
  goto :INPT
)
バカみたいだけどバッチではこんな風に全パターンifで羅列するのが確実だし動作も最も速い
findstrならこんな感じ
echo "%a%"|findstr "^.[A-Z].$" >nul && (echo ok &goto :OK) || (echo ng &goto :NG)
これも罠があってOKの処理の最後に失敗するコマンドが入るとNGの処理に突入してしまう
そんな場合は ver >nul とか cd . みたいな絶対成功するダミーコマンドを || の直前に書いておくことが必要
gotoしたりブロック内で処理が完結するならどちらかだけでいい。直後は暗黙的に逆の処理だからね
自分の場合、&&はしないことが多い

965 名前:デフォルトの名無しさん mailto:? [2026/04/19(日) 09:20:07.23 ID:wKsrhzcO.net]
choiceで変な文字を入力させない、が正解だとは思うけど利用可能なドライブから選択させた方がスマートじゃない?
@echo off
for /f "tokens=1-27 delims=:\ " %%@ in ('fsutil fsinfo drives') do set "drv=%%A%%B%%C%%D%%E%%F%%G%%H%%I%%J%%K%%L%%M%%N%%O%%P%%Q%%R%%S%%T%%U%%V%%W%%X%%Y%%Z"
call set "drv=%%drv:%SystemDrive::=%=%%"
if "%drv%"=="" echo ERROR: No available drives found.&echo Check the target drive connection.&pause &exit /b 1
set /p <nul=ドライブを選択 [%drv%]:
for /f %%a in ('choice /c %drv% /n') do set drv=%%a:
echo %drv%
pause

966 名前:デフォルトの名無しさん mailto:? [2026/04/20(月) 21:23:41.47 ID:UVl60nvN.net]
>959
2バイト文字込み判別はぐっちゃになりそうですよねー

>>960
ありがとうございます。
そして全く理解が追い付いていないので質問ですが
C:WinOS System(SATA SSD) , D:USBメモリ , W:PCIeスロット増設 NVMe SSD というドライブ構成例で実行すると
ドライブを選択 [DW]:
(W:はリムーバブル設定にはしていないのですが) Cを除いて表示されます。
3行目%%A%〜%%Zから%%Cを除くと[D]だけとなり
ドライブを選択 [D]:
3行目%%A%〜%%Zから%%A%%B%%Cを除くと[C=]になります。
ドライブを選択 [C=]:

特定のドライブ文字'ABC'を除外して'C'を入力したら
echo [ c ] キャンセル: メインメニューに戻る
if "%drv%"=="C" goto MainMenu
飛ばせるようにするにはどうしたら良いのでしょうか?

専門板に思い切ってファイルを晒すにはド素人ソースで躊躇われ
今は >951 系をベースにset前 fsutil fsinfo drives 追加で有効ドライブ表示足してお茶濁し中・・・

967 名前:デフォルトの名無しさん mailto:? [2026/04/20(月) 22:06:10.26 ID:ghfl+cS9.net]
環境Win11
for変数の割り当てmapがいつの間にかShift-JIS(ANSI)からUnicodeにこっそり仕様変更されてるみたいなんだけどいつからなのか分かる人居る?
Win10の途中辺り?



968 名前:デフォルトの名無しさん [2026/04/20(月) 22:21:00.83 ID:ghfl+cS9.net]
>>961
> 3行目%%A%〜%%Zから%%A%%B%%Cを除くと[C=]になります。
そこ除いたせで drv が空になって、call set "drv=%%drv:%SystemDrive::=%=%%" で%SystemDrive::=% と=だけ残ってdrvに"C="がsetされた結果だね
Cドライブ消さないなら
call set "drv=%%drv:%SystemDrive::=%=%%" の行を削除するか

以下みたいに
for /f "tokens=1*" %%a in ('fsutil fsinfo drives') do set "drv=%%b"
set "drv=%drv:\=%"
set "drv=%drv::=%"
set "drv=%drv: =%"
if "%drv%"=="" echo ERROR: 以下同じ

ドライブの:も邪魔なら以下の%%aの:も消せばいいよ
for /f %%a in ('choice /c %drv% /n') do set drv=%%a

969 名前:デフォルトの名無しさん mailto:? [2026/04/20(月) 22:52:47.63 ID:ghfl+cS9.net]
システムドライブがC:ではない環境は考慮しなくてもいいのかな?
Cドライブを必ず在るものとしてCにキャンセルを割り当てるならそのままでいいけど
ドライブにCが無い環境だとCが出ないから、その場合の処理を追加して選択にCを追加するか、キャンセル出来ない仕様になる
そう面倒でもないけれど、バッチはある程度の割り切りも必要だと思うよ
アレもコレも対策してたら数行で済む簡単なバッチが数百行に膨れ上がるからね

970 名前:デフォルトの名無しさん mailto:? [2026/04/20(月) 23:03:50.43 ID:O2Evzmwv.net]
fsutilは管理者権限がいるじゃん
そんなに厳密にしないでもいいんじゃない?
951ベースならif existで存在チェックしてるので存在しないなら問答無用で再度入力に飛ばせばいいだけのような

971 名前:デフォルトの名無しさん mailto:? [2026/04/20(月) 23:06:17.23 ID:ghfl+cS9.net]
>>961
知らなかったからGeminiに訊いてみたら以下でリムーバブルかどうかを判別出来るらしいからリムーバブルタイプだけを選択肢に表示させることも可能だよ
wmic logicaldisk where "DeviceID='E:'" get DriveType
fsutil fsinfo drivetype E:

972 名前:デフォルトの名無しさん mailto:? [2026/04/21(火) 08:48:36.18 ID:t9MRVHfI.net]
やってみた。netwrkドライブがあると管理者権限が必要になるかも知れない
wmicでも同様かは分からない
でもブータブルUSB作成ならどうせ権限必要だろうし
ttps://pastebin.com/rSyB3uDK

973 名前:デフォルトの名無しさん [2026/04/21(火) 19:32:20.53 ID:fTCusT8W.net]
ドライブ名を入力させるものなんて誰が使う想定なんだろうか?

974 名前:948 961 mailto:? [2026/04/21(火) 22:20:34.21 ID:nFogp4jA.net]
現状は >951 をベースにしています。
もう晒してしま・・・
https://www.%41xfc.%4Eet/u/4123910?key=ENQ
(そのままだとNGワードの為コード置き換え)
更新すると旧版は削除していっています。
BatPsSecureBootCheck.bat を右クリックメニューから管理者として実行

:UsbRecovery 部分です

975 名前:デフォルトの名無しさん mailto:? [2026/04/22(水) 04:04:27.84 ID:XdxgzwWb.net]
for %%a in (ProductName DisplayVersion CurrentBuild EditionID UBR) do for /f "tokens=2*" %%b in ('
reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v %%a 2^>nul ^| find "%%a"
') do set "%%a=%%c"

:: 確認用echo
for %%a in (ProductName DisplayVersion CurrentBuild EditionID UBR) do call echo %%%%a%%

if not defined UBR goto :WINVERR
if not defined DisplayVersion goto :WINVERR

pause &exit /b

:WINVERR
echo 対象は以下のバージョン以上です。
echo Win10 21H2 19044.6575
echo Win10 22H2 19045.6575
echo Win11 24H2 26100.7171
echo Win11 25H2 26200.7171
echo.
pause &exit /b 1

凄い頑張ってるとは思うけど、似たようなコマンドが並ぶ時は for で繰り返し処理させてやれば少しはスッキリするしエラーも個別に出す必要が無いならなるべく纏めた方がいいと思うよ

976 名前:デフォルトの名無しさん mailto:? [2026/04/22(水) 23:33:26.02 ID:XdxgzwWb.net]
if [19045] GEQ [%WinBuild%] みたいに [] で括ると文字列比較になっちゃって数値比較にならないから意図しない動作になるよ
ProductName, DisplayVersion, EditionID は必要ないんじゃない?後ろの方で使ってるのかな?
全部つぶさに見たわけじゃないけど、バージョンchkだけ、ちょっとあんまりだったから我慢出来ずに書き直してみた
https://pastebin.com/nP97mVZx

977 名前:デフォルトの名無しさん [2026/04/23(木) 12:59:38.99 ID:d8NkBaMm.net]
大雨来る前に帰るか



978 名前:948 961 969 mailto:? [2026/04/23(木) 21:44:34.18 ID:zd0nDStg.net]
>>971
>後ろの方で使ってるのかな?
このスプリクトもバージョンチェックと注意警告だけで他の条件処理には使っていないはずです。

スマートな処理を書けないレベルでなさけないですが
冒頭部分でやりたいのは排他処理ではなく
ProductName, DisplayVersion, EditionID をぐちゃぐちゃ取得しているのは
Windows11 でそれぞれを取得すると以下の例とかになるからで
ProductName 「Windows 10 Pro」← これがねー
DisplayVersion 「25H2」
EditionID 「Professional」
ちゃんと Windows 11 〜 と 起動OS環境 %CheckUEFI% と適用外警告も表示させたい為にです。
[AU]項目のセキュアブートアップグレードキー AvailableUpdates 0x5944 対象がバージョン制約ありでも表示だけです。

後、今年の1月大型アップデートからセキュアブートキー自動更新でハングアップするPC環境がそれなりに出ているようです。
ネットから遮断し一時対処に AvailableUpdates 0x0 するか
セキュアブートDisabled後に回避処置してからセキュアブートEnabled戻しをしないと
セキュアブート起動に失敗する(繰り返す)という事態も。
(たぶんUEFI-BIOS項目のセキュアブート:「メーカーデフォルトキー」「カスタマイズキーの破棄」設定が原因の可能性もあり)
その指標に現状のリビジョン、セキュアブートの有効/無効 等を表示したい訳です。
自分でレジストリエディターを起動して変更するのは怖くても
半自動バッチファイルで示すとやるというイミフな人たちもいたりします。

[]の比較が文字列対象だったのは単におバカなだけですね......指摘助かります

979 名前:948 961 969 mailto:? [2026/04/23(木) 21:51:21.33 ID:zd0nDStg.net]
バージョンchk部分は [] で括るの修正しただけです
ver.2026-04-23 約14.8 MB
https://www.%41xfc.%4Eet/u/4124095?key=ENQ
修正: PowerShell 専用 Psフォルダを構築
追加: ver.2026-04-23 : Ps\BatPsSecureBootloaderPreserve.ps1
追加: ver.2026-04-23 : Ps\BatPsSecureBootloaderRecovery.ps1 (危険)

980 名前:デフォルトの名無しさん [2026/04/28(火) 14:17:02.88 ID:W6oqDl7R.net]


981 名前:デフォルトの名無しさん [2026/04/28(火) 14:19:07.18 ID:W6oqDl7R.net]
うめ

982 名前:デフォルトの名無しさん [2026/04/28(火) 14:19:44.45 ID:W6oqDl7R.net]


983 名前:デフォルトの名無しさん [2026/04/28(火) 14:20:03.97 ID:W6oqDl7R.net]


984 名前:デフォルトの名無しさん [2026/04/29(水) 10:04:58.16 ID:1CmJ+fMR.net]
u

985 名前:デフォルトの名無しさん [2026/04/29(水) 10:06:01.33 ID:1CmJ+fMR.net]
m

986 名前:デフォルトの名無しさん [2026/04/29(水) 10:06:41.24 ID:1CmJ+fMR.net]
e

987 名前:デフォルトの名無しさん [2026/04/29(水) 14:23:13.80 ID:1CmJ+fMR.net]




988 名前:デフォルトの名無しさん [2026/04/29(水) 14:23:29.24 ID:1CmJ+fMR.net]


989 名前:デフォルトの名無しさん [2026/04/29(水) 14:23:43.84 ID:1CmJ+fMR.net]
u

990 名前:デフォルトの名無しさん [2026/04/29(水) 14:23:57.41 ID:1CmJ+fMR.net]
m

991 名前:デフォルトの名無しさん [2026/04/29(水) 14:24:28.61 ID:1CmJ+fMR.net]
e

992 名前:デフォルトの名無しさん [2026/04/29(水) 19:39:27.33 ID:yRjpybQD.net]
メカニカルキーボードのFILCOで知られる「ダイヤテック」が事業終了

993 名前:デフォルトの名無しさん [2026/04/30(木) 10:03:30.42 ID:WoeOHcw8.net]


994 名前:デフォルトの名無しさん [2026/04/30(木) 10:03:57.19 ID:WoeOHcw8.net]


995 名前:デフォルトの名無しさん [2026/04/30(木) 10:04:15.61 ID:WoeOHcw8.net]


996 名前:デフォルトの名無しさん [2026/04/30(木) 10:04:38.90 ID:WoeOHcw8.net]


997 名前:デフォルトの名無しさん [2026/04/30(木) 10:04:55.86 ID:WoeOHcw8.net]




998 名前:デフォルトの名無しさん [2026/04/30(木) 10:05:25.65 ID:WoeOHcw8.net]


999 名前:デフォルトの名無しさん [2026/04/30(木) 10:05:45.16 ID:WoeOHcw8.net]


1000 名前:デフォルトの名無しさん mailto:? [2026/04/30(木) 10:20:36.62 ID:NmSnIhH1.net]
援護

1001 名前:デフォルトの名無しさん [2026/04/30(木) 10:20:51.93 ID:NmSnIhH1.net]
んご

1002 名前:デフォルトの名無しさん [2026/04/30(木) 10:21:06.01 ID:NmSnIhH1.net]
ンゴ

1003 名前:デフォルトの名無しさん [2026/04/30(木) 10:21:19.35 ID:NmSnIhH1.net]
e

1004 名前:デフォルトの名無しさん [2026/04/30(木) 10:21:31.89 ID:NmSnIhH1.net]
n

1005 名前:デフォルトの名無しさん [2026/04/30(木) 10:21:44.05 ID:NmSnIhH1.net]
d

1006 名前:1001 [Over 1000 Thread.net]
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 1323日 14時間 17分 43秒

1007 名前:1002 [Over 1000 Thread.net]
5ちゃんねるの運営はUPLIFT会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《UPLIFT会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
4 USD/mon. から匿名でご購入いただけます。

▼ UPLIFT会員登録はこちら ▼
https://uplift.5ch.io/

▼ UPLIFTログインはこちら ▼
https://uplift.5ch.io/login



1008 名前:過去ログ ★ [[過去ログ]]
■ このスレッドは過去ログ倉庫に格納されています






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<285KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef