【.cmd】 バッチファイルスクリプト %15 【.bat】
1 :デフォルトの名無しさん :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/
2 :デフォルトの名無しさん :2022/09/16(金) 00:28:41.18 ID:9kvq1ahn.net 助けてください。 変数HOGEをキー入力してsplit()的な区切り文字列で分割する挙動を取りたいのですが なぜかファイルが見つかりませんとなります。 リテラルでSET HOGE=1,2,3と記述していれば希望の動作となります。 半日困って今日は会社にお泊りです。誰か教えてください。 REM キー入力でHOGEに"1,2,3"と入力する SET /P HOGE= FOR /f "tokens=1,2 delims=," %%a in (%HOGE%) do ( ECHO %%a %%b %%c ) OUTPUT ファイル 0_0 がみつかりません。
3 :デフォルトの名無しさん :2022/09/16(金) 00:29:57.20 ID:9kvq1ahn.net FOR /f "tokens=1,2,3 delims=," %%a in (%HOGE%) do ( ECHO %%a %%b %%c ) の間違いでした。だれか助けて〜
4 :デフォルトの名無しさん :2022/09/16(金) 00:32:46.68 ID:/mniU0r8.net for /? for /f (ファイル) ("文字列") ('コマンド')
5 :デフォルトの名無しさん :2022/09/16(金) 00:42:16.15 ID:9kvq1ahn.net >>4 ありがとうございます! 神!
6 :デフォルトの名無しさん :2022/09/25(日) 20:41:32.40 ID:0LVDTkG9.net set /a hoge1=%random% set /a hoge2=%random% set /a hoge3=%hoge1%+%hoge2% echo %hoge3% hoge3のところには単に「+」と表示され、 echoのところにはなにも表示されず、 その次に「オペラントがありません」と表示されます。 これはなにが起こっているのでしょうか…
7 :デフォルトの名無しさん :2022/09/26(月) 00:15:07.76 ID:7oxCYWvG.net if とか for のブロックの中? https://otnx.jp/CMD/?%C1%B4%C8%CC/%B9%BD%CA%B8%B2%F2%C0%CF
8 :デフォルトの名無しさん :2022/09/26(月) 00:46:39.21 ID:ou4YDIZU.net >>7 御明察です!理由が分かって安心しました。ありがとうございます。 forループの中で、このような処理を書くことはできないのでしょうか。毎回ランダムで少し変えて実行する、という処理を書きたいのですが…
9 :デフォルトの名無しさん :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 :デフォルトの名無しさん :2022/09/26(月) 01:54:43.87 ID:yGyQXERn.net %random% じゃなくて !random!
12 :デフォルトの名無しさん :[ここ壊れてます] .net そういえば、181系って、完全に揃った編成ってあったんだろうか? 台車違いの編入車や、485系仕様の編入車・新製車とかで、 いつも凸凹でちぐはぐだったイメージしかない もし、153系の前面が165系の塗りになったら 足回りとか見慣れた目にはやっぱり違和感あるんだろうなぁ クハ164は塗装変更しないで正解だったと思うわ
13 :デフォルトの名無しさん :[ここ壊れてます] .net 誤爆失礼!
14 :デフォルトの名無しさん :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 :デフォルトの名無しさん :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 :デフォルトの名無しさん :[ここ壊れてます] .net set /a a=random は0なんやな 一般変数と処理が違うんだ
17 :デフォルトの名無しさん :2022/09/26(月) 21:36:40.64 ID:ou4YDIZU.net >>11 >>14 ありがとうございます。 うまく動きました!
18 :デフォルトの名無しさん :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 :デフォルトの名無しさん :2022/09/28(水) 12:04:21.93 ID:Cg5haYXb.net >>16 set /a a=%random%
20 :デフォルトの名無しさん :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 :デフォルトの名無しさん :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 :デフォルトの名無しさん :2022/10/08(土) 17:43:53.04 ID:f2a8Snt9.net 空の標準出力をリダイレクトで書き込んでるからだろう
26 :デフォルトの名無しさん :2022/10/08(土) 17:48:05.02 ID:R/0NVeNc.net なぞなぞじゃね?
27 :デフォルトの名無しさん :2022/10/08(土) 18:00:30.98 ID:zk6uj/6h.net コマンドプロンプトからバッチファイルにコピペしたら間違えて作業フォルダが付いてしまって 何かのコマンドなのでしょうか
28 :デフォルトの名無しさん :2022/10/08(土) 18:59:40.31 ID:f2a8Snt9.net オカルトかな? ん?お前のパソコン何かおかしくね?
29 :デフォルトの名無しさん :2022/10/08(土) 21:15:53.37 ID:4RiXxOsU.net >>27 日本語でOK
30 :デフォルトの名無しさん :2022/10/08(土) 21:20:11.87 ID:NCKRr8hU.net エラーになってもリダイレクトは実行されちゃうんだな バグとちゃうか
31 :デフォルトの名無しさん :2022/10/08(土) 21:31:19.08 ID:bRwGYufv.net プロンプトまでバッチにコピペするなよ
32 :デフォルトの名無しさん :2022/10/09(日) 11:18:46.47 ID:yk0ofCIK.net >>30 指定された実行対象ファイルがない、 というのは実行時エラーなので(構文エラーではない) そのエラーメッセージをファイルリダイレクトして記録できる事は有益。 なのでバグ(仕様バグ)ではないと思われる。
33 :デフォルトの名無しさん :2022/10/09(日) 12:38:18.26 ID:r7gKIzvL.net 一貫性のある動きだよな エラー出力は欲しいけど標準出力はリダイレクト自体をなかったことにしてくれというのは無理がある そもそもリダイレクト先がログファイルなら気にも留めないような話 びっくりする理由があるとしたらexeにリダイレクトしても容赦なく書き換えられるという点で、コマンドラインはそういう点で結構慈悲がない ある程度はパワーユーザー向けという位置付けなので気をつけるしかない
34 :デフォルトの名無しさん :2022/10/12(水) 04:44:03.67 ID:Jko2ebMR.net window-position異なる位置のバッチをそれぞれ作ってるのですが bat2個目を起動すると1個目の起動したバッチにつられてカスケード起動します 何か対処方法ありますでしょうか?
35 :デフォルトの名無しさん :2022/10/30(日) 06:52:23.05 ID:i1fpLCEI.net zipファイルに書き込むコマンドはありますか? copy foo.txt bar.zip とやっても「bar.zipに上書きしますか?」になるだけなんですけど 上書きがしたいんじゃなくアーカイブしたいんです。
36 :デフォルトの名無しさん :2022/10/30(日) 08:16:49.21 ID:oF72FRjI.net 7za.exe
37 :デフォルトの名無しさん :2022/10/30(日) 17:16:25.85 ID:RObFZ+1A.net compressコマンドはcabだけだったかな? pwsh -c "gh compress-archive"参照
38 :デフォルトの名無しさん :2022/10/30(日) 20:28:18.19 ID:WT6dub7d.net explorerで操作すると書き込めるからコマンドありそうな気がする
39 :デフォルトの名無しさん :2022/10/30(日) 20:49:57.93 ID:JhK1ASYS.net zipコマンドでググれ
40 :デフォルトの名無しさん :2022/10/31(月) 15:34:40.68 ID:aCuyX04T.net pwsh -c "Get-help -name compress-archive"
41 :デフォルトの名無しさん :2022/10/31(月) 22:51:09.43 ID:HZxZgtz6.net >>38 Explorerと同じ圧縮処理は、ExplorerのCOMオブジェクト(Shell.Application)を操作する事でできる。 確か、正式に提供した機能ではないので動作は保証しない、非推奨、みたいな扱いだった気が。
42 :デフォルトの名無しさん :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 :デフォルトの名無しさん :2022/11/02(水) 16:00:09.07 ID:ZBNaiNsJ.net 44>> スミマセン間違えました。2行目 [誤]例:4文字目から8文字目まで [正]例:5文字目から8文字目まで
44 :デフォルトの名無しさん :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 :デフォルトの名無しさん :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 :デフォルトの名無しさん :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 :デフォルトの名無しさん :2022/11/03(木) 13:10:19.17 ID:P2O5CHdk.net 東京都、富山県、ネバダ州、東京都、東京都、雲南省、ネバダ州、東京都、みたいな数百行のfindの標準出力があって何種類の出力があるのかだけ欲しいんだけど何かスマートな方法ないですか
48 :デフォルトの名無しさん :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 :デフォルトの名無しさん :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 :デフォルトの名無しさん :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 :デフォルトの名無しさん :2022/11/03(木) 15:30:10.92 ID:IcpXc6LC.net powershell -Command "('東京都','富山県','ネバダ州','東京都','東京都','雲南省','ネバダ州','東京都' | Sort-Object | Get-Unique ).Count"
52 :デフォルトの名無しさん :2022/11/03(木) 15:31:53.88 ID:IcpXc6LC.net findの標準出力ってことはこうだな powershell -Command "(find 引数 | Sort-Object | Get-Unique ).Count"
53 :デフォルトの名無しさん :2022/11/03(木) 15:38:59.81 ID:PVTx0HrP.net あ、+= 1には意味なかったな
54 :デフォルトの名無しさん :2022/11/03(木) 16:10:12.19 ID:7S7IyYLz.net >>50 だから for (*) do ren ~ はお勧めしない 同じファイルに複数回処理する可能性がある ren を move にして別のフォルダに送れ !文字がある時は for の内部で遅延展開設定、解除しろ
55 :デフォルトの名無しさん :2022/11/03(木) 16:37:27.42 ID:7S7IyYLz.net for /f "delims=" %%i in ('dir *') do (ren ~ でもいいかな
56 :デフォルトの名無しさん :2022/11/03(木) 16:40:46.92 ID:7S7IyYLz.net すまんdir/bだ
57 :デフォルトの名無しさん :2022/11/03(木) 17:36:43.52 ID:sJbSZrhN.net cmd には split | sort | uniq | wc みたいなコマンドはないの?
58 :デフォルトの名無しさん :2022/11/03(木) 17:41:34.26 ID:7S7IyYLz.net ない
59 :デフォルトの名無しさん :2022/11/03(木) 18:18:22.55 ID:P2O5CHdk.net 皆さんありがとうスマートっていうか単に速度の問題なのでどれが速いか競走させてみます
60 :デフォルトの名無しさん :2022/11/03(木) 18:56:34.58 ID:NbsIPyEs.net >>57 少なくとも標準では無いね まあ使いたいならwslに行くか同等の機能をPowerShellで書くとかかな
61 :デフォルトの名無しさん :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 :デフォルトの名無しさん :2022/11/12(土) 20:19:55.55 ID:/WV4ttu0.net set /p で異体字セレクタ(IVS)を入力できない IMEパッドが作動しない いちいちメモ帳からコピペ入力するしかないのか 表示も化けてるし…
63 :デフォルトの名無しさん :2022/11/12(土) 20:44:49.08 ID:/WV4ttu0.net IMEパッドはダメなので、文字コード+F5 でいけた
64 :デフォルトの名無しさん :2022/11/13(日) 19:33:26.85 ID:sU7z5EJX.net >>62 Windows Terminal IMEパッド可 異体字(IVS)表示可(対応フォントのみ) cmdの標準ターミナルは仕様が古いまま放置されている
65 :デフォルトの名無しさん :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 :デフォルトの名無しさん :2022/11/18(金) 07:02:24.39 ID:LiWOBYzs.net >>64 サンクス 入力時に文字化けするので確認できない echoで表示されるが文字の両側のスペースが気持ち悪い でも標準画面よりはマシかな。おれは使わないけど
67 :デフォルトの名無しさん :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 :デフォルトの名無しさん :2022/11/21(月) 21:55:41.71 ID:o6gng8CJ.net 手段の拘りなければこんなんとかで。 powershell -nop -c "[Console]::CursorTop; [Console]::WindowTop;"
69 :デフォルトの名無しさん :2022/11/22(火) 09:23:33.75 ID:IBEEH7ii.net 過去にも似たような話があったなあ 何かでenterキーの入力を省略したいって 結局、うまい方法が見つからない
70 :69 :2022/11/22(火) 21:44:34.08 ID:CBUeGsgY.net なるほど情報ありがとう PowerShell なら [console]::CursorLeft と [console]::CursorTop で取得できるのを確認しました。 PowerShellを呼ぶか全部PowerShellで書くか悩ましい…
71 :デフォルトの名無しさん :2022/11/25(金) 01:48:24.17 ID:is72b8Mh.net コンソールの座標が必要になるってことはGUIを検討すべき時がきたんじゃないか コンソールの画面でいくらがんばっても大したことできんよ
72 :デフォルトの名無しさん :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 :デフォルトの名無しさん :2022/11/27(日) 05:02:29.30 ID:IKV/PDeN.net powershellなんぞ使わずとも行数ごとき得る方法はあるぞ 昔はpowershell自体無かったんだからな まあ具体的には思い出せないんだがぐぐれば出てくるだろ
74 :デフォルトの名無しさん :2022/11/27(日) 11:26:11.98 ID:nWgXfjD8.net いくらぐぐってもファイルの行数を調べるとか画面の行数を変更するしか見つからない… 行数ごときというならぜひ思い出して教えてください
75 :デフォルトの名無しさん :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 :デフォルトの名無しさん :2022/11/27(日) 17:27:16.98 ID:fMz//05T.net mode か?
77 :デフォルトの名無しさん :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 :デフォルトの名無しさん :2022/11/27(日) 19:34:17.80 ID:fMz//05T.net Consoleにサブキーがいっぱいあるな
79 :デフォルトの名無しさん :2022/11/27(日) 21:48:39.87 ID:nWgXfjD8.net PowerShellを使う方法もmodeを使う方法も >>72 で既出 それ以外の方法があったと >>73 は言ってるようなのだが… なお reg を使う >>77 は今のウインドウのサイズじゃないから失格かなあ
80 :デフォルトの名無しさん :2022/11/28(月) 00:00:04.17 ID:so4XQ+4A.net more で画面毎に止まってくれるが あれはどこから画面行数情報を得ているのだろう
81 :デフォルトの名無しさん :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 :デフォルトの名無しさん :2022/11/29(火) 22:16:00.02 ID:noJ3pHan.net ぐぐって出てこないならもうpowershell使うしかないんじゃね >>81 お前こんな糞コード晒す前にちょっと考えろよ頼むよ白けるわ
83 :デフォルトの名無しさん :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 :デフォルトの名無しさん :2022/11/29(火) 23:27:39.60 ID:F0R68kvV.net エスケープシーケンスはwin10以前だとダメじゃなかったっけ ansi.sysがwin8.1までは組み込まれない
85 :デフォルトの名無しさん :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 :デフォルトの名無しさん :2022/12/01(木) 15:58:56.25 ID:Z3Gzq7Gr.net gotoがある
87 :デフォルトの名無しさん :2022/12/01(木) 19:38:25.34 ID:gTSnhqIH.net 計算すれば出来るんだろうけど面倒くさいのでPowerShell使ってる
88 :デフォルトの名無しさん :2022/12/01(木) 21:59:03.06 ID:CyN7Asjt.net powershell -c "(get-date).adddays(-1).tostring('yyyyMMdd')"
89 :デフォルトの名無しさん :2022/12/01(木) 22:14:49.13 ID:M8gPga1Y.net もうここpowershellスレにしたら
90 :デフォルトの名無しさん :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 :デフォルトの名無しさん :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 :デフォルトの名無しさん :2022/12/02(金) 21:24:55.56 ID:JHo2A9dA.net 日時の操作に関してはもう便利すぎてpowershellへ丸投げしたほうがいいな powershellというか.NETのDateTimeのメソッドではあるが >>91 とか何してるか本当に合ってるのかわからんような事をするよりは
93 :デフォルトの名無しさん :2022/12/02(金) 22:23:50.58 ID:elckNyGo.net 確かにそうだな。計算できん奴はやめとけ
94 :デフォルトの名無しさん :2022/12/04(日) 15:45:51.56 ID:xdG8GXCM.net 変数1の値を変数2にsetするとエラーになります。 値は文字列で不定ですが、記号文字が原因のようです。 遅延展開ではありません。 うまい方法はないですか。
95 :デフォルトの名無しさん :2022/12/04(日) 20:44:29.33 ID:pNrDPWEq.net ダメな質問の見本になってるぞ 書ける範囲でいいから、再現性のある最低限のコードと エラーメッセージとその時の実際の変数値を書いてくれ
96 :デフォルトの名無しさん :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 :デフォルトの名無しさん :2022/12/05(月) 23:44:59.81 ID:Xw9Qnajp.net 「変数1の値を変数2にset」という意味では良い方法だと思う。 でも変数間でコピーだけして終わりって事はまずないから あとは>>94 が自分のコードにどう馴染ませて組み込んだりヒントにできるかだろうなぁ。
98 :デフォルトの名無しさん :2022/12/06(火) 10:31:46.97 ID:VnO+filq.net いやこれだめだろ 試した?
99 :デフォルトの名無しさん :2022/12/06(火) 11:36:48.90 ID:vjJKyhqV.net 続きはpowershellで
100 :デフォルトの名無しさん :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 :デフォルトの名無しさん :2022/12/07(水) 08:08:54.78 ID:6/SG3KPg.net >>98 不具合は無さそう >>100 これシンプルでいいね。エスケープ不要だし
102 :デフォルトの名無しさん :2022/12/07(水) 14:11:06.83 ID:CzrTyJD4.net 何でも答えてくれるChatGPTに質問して教えてもらう時代になるかも
103 :デフォルトの名無しさん :2022/12/17(土) 08:43:39.74 ID:P7hTh7GB.net %*を他の変数に入れる方法あります?
104 :デフォルトの名無しさん :2022/12/17(土) 13:02:14.02 ID:z3eWXHPR.net set
105 :デフォルトの名無しさん :2022/12/17(土) 13:56:37.78 ID:hGrODwcv.net >>95
106 :デフォルトの名無しさん :2022/12/18(日) 11:04:55.68 ID:3jhv+1oP.net batch.cmd を batch.cmd echo ' ^& echo ^" ^& echo ! として実行した場合の %*を他の変数に入れる方法あります?
107 :デフォルトの名無しさん :2022/12/18(日) 14:23:46.88 ID:8FmKOvk1.net 方法は無いよ。たぶん 引数はやめてファイルで渡すか、set /p で入力したら
108 :デフォルトの名無しさん :2022/12/19(月) 21:25:44.08 ID:OdY4312I.net もしかして遅延展開が有効だったら set VAR1=!VAR2! は特殊文字おかまいなしの万能?
109 :デフォルトの名無しさん :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 :デフォルトの名無しさん :2022/12/21(水) 22:08:11.62 ID:DgZmdBnN.net 上のは値の先頭が ; だと消える eol^= にすればいい 下のは値の先頭が = だとその文字が消える
111 :デフォルトの名無しさん :2022/12/21(水) 22:13:22.39 ID:DgZmdBnN.net set var1 の出力は複数かもしれない
112 :デフォルトの名無しさん :2022/12/21(水) 22:54:47.75 ID:DgZmdBnN.net if で確認しているのか。失礼いたしました。
113 :デフォルトの名無しさん :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 :デフォルトの名無しさん :2022/12/22(木) 08:07:54.84 ID:i1WKtawW.net >>113 その本来の処理がおかしいと思われる
115 :デフォルトの名無しさん :2022/12/22(木) 09:17:11.00 ID:GhJnH83b.net echo onで眺めてみよう 環境変数は実行前に展開される 遅延展開という謎機能をしっているか?
116 :デフォルトの名無しさん :2022/12/22(木) 10:18:32.17 ID:DSfJPeBV.net for文とかの中で入れてるとかだろう で変な値とかは実行前の変数に残ってる値
117 :115 :2022/12/22(木) 13:27:25.08 ID:rMNtcPRb.net 「遅延展開」なんて、全く知りませんでした。 ここで質問しなかったら、永遠に解決出来ませんでした。 有り難う御座いました!
118 :デフォルトの名無しさん :2022/12/23(金) 08:34:41.65 ID:FT8V4kp7.net 特殊記号のドキュメントはどこで見られますか
119 :デフォルトの名無しさん :2022/12/24(土) 00:46:30.79 ID:Q5Ixgqn/.net powershellに実装されてない<とか&&とか||を隠ぺいするために抹消された
120 :デフォルトの名無しさん :2022/12/24(土) 00:55:19.42 ID:oMpeQZG3.net サポート対象外になったOSとかの技術情報がMSサイトから消されつつあるな この問題を消すと増える法則が発動しないインターネットから情報消えすぎ問題と呼称したい
121 :デフォルトの名無しさん :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 :デフォルトの名無しさん :2023/01/03(火) 11:08:17.44 ID:2hETcG3j.net 最近職場でbatファイルを知った者です。 住民様にご質問がございます。 自分の仕事の中に「デジカメで撮った今日の現場の写真をPCに移す」という作業があるのですが そちらはbatファイルで対応することは可能なのでしょうか? xcopyでバックアップではフォルダに過去の写真を残していないと毎回膨大な写真を写すことになってしまい 職場の脆弱なPCではすぐに容量オーバーしてしまいます。 今日の写真のみをPCに移す方法がもしあるなら恐れながらご教授していただけると助かります。 何卒宜しくお願いします。
123 :デフォルトの名無しさん :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%
124 :デフォルトの名無しさん :2023/01/03(火) 14:21:42.12 ID:axWhet1W.net IF の中から GOTO で外に飛ぶと、括弧の使い方が間違っている というエラーになるのですが、どうやって回避するのでしょうか?
125 :デフォルトの名無しさん :2023/01/03(火) 15:15:36.56 ID:cXTWG1PB.net >>124 コード出してみ
126 :デフォルトの名無しさん :2023/01/03(火) 15:27:36.49 ID:VP4Ca8Qj.net 勝手な想像だけどgoto関数かラベルの次の行がカッコになってるパターンだと思う goto :AAA ) とか :AAA ) バッチファイルは実行時に1行になって解釈されるからこういう書き方だと例えば else (goto :AAA) となって閉じ括弧までがラベルの一部と解釈される 簡単な回避策としては括弧の前の行にremを挿入する
127 :デフォルトの名無しさん :2023/01/03(火) 16:15:31.69 ID:JXGfY3Iz.net 別のところに原因があるんじゃ コード出して
128 :デフォルトの名無しさん :2023/01/03(火) 16:51:21.56 ID:z3dTsyyT.net gotoは便利かもだけど、使わないにこしたことはない
129 :デフォルトの名無しさん :2023/01/03(火) 16:58:09.34 ID:2hETcG3j.net >>123 正月にもかかわらず手早い返信ありがとうございます!!! 早速組んでみます!! ありがとうございました!!!
130 :デフォルトの名無しさん :2023/01/03(火) 17:01:38.01 ID:axWhet1W.net >>126 > 勝手な想像だけどgoto関数かラベルの次の行がカッコになってるパターンだと思う まさにそれ、でした… これは絶対に気付かないですよ… 有難う御座いました。
131 :デフォルトの名無しさん :2023/01/03(火) 21:56:54.70 ID:krBOweAa.net >>126 横から失礼。よく分からない。再現できない
132 :≠126 :2023/01/04(水) 01:32:14.88 ID:fBnUHAjh.net >>126 それある どうやって回避したのかもう忘れたが 参考になりました
133 :デフォルトの名無しさん :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 これでエラーにならない(閉じ括弧を改行しても) どうやればエラーになるの?
134 :デフォルトの名無しさん :2023/01/04(水) 04:29:15.97 ID:diYqjiE/.net >>133 gotoはエラーにならないね if 1==1 ( if 2==2 goto :skip echo test1 :skip ) こんな感じでカッコの前にラベルおいてるとエラーになる
135 :デフォルトの名無しさん :2023/01/04(水) 06:05:18.72 ID:3FgVyKvV.net https://qiita.com/yz2cm/items/f808e4380faa3bd51a98
136 :デフォルトの名無しさん :2023/01/04(水) 10:17:12.83 ID:k64eH4zi.net >>134 ラベルを括弧の中に設置するなんて考えたことも無かった
137 :デフォルトの名無しさん :2023/01/04(水) 11:17:46.87 ID:lFNs7lW+.net まああり得るとは思うけど俺はそんな複雑なコードをバッチで書かないから知らんかったわ
138 :デフォルトの名無しさん :2023/01/04(水) 22:36:34.28 ID:AhEOb1lW.net カッコの中は全部サブルーチンにすればいいと思うの Callで呼んだ先では何でもし放題
139 :デフォルトの名無しさん :2023/01/09(月) 02:14:07.73 ID:2yNmR2Eh.net 括弧と言えばコメント行に半角括弧があると誤動作するから怖いわバッチはよお
140 :デフォルトの名無しさん :2023/01/12(木) 00:00:34.91 ID:n3PiBbyH.net バッチファイルの中で以下のコマンド cmd /c 子バッチファイル.bat でさらにバッチファイルを実行させたあと 子バッチファイルの実行中にCtrl + Cで処理を中断して バッチ ジョブを終了しますか (Y/N)? をYで終了させたときに、親バッチファイルでもそれを受け継いでるみたいで、また バッチ ジョブを終了しますか (Y/N)? と表示されてしまうのですが、親バッチファイルに戻ったときにはバッチファイルの続きを処理するようにできないものでしょうか? ご存知の方がいらっしゃいましたらお教えください。
141 :デフォルトの名無しさん :2023/01/12(木) 14:55:11.73 ID:M53QXIM6.net 2回目にNを押したらいいだけじゃね
142 :デフォルトの名無しさん :2023/01/12(木) 20:12:55.87 ID:OEk4sgu+.net 子でCtrl+C,Yで中断したら親に戻ったらしれっと続きが動いたのでわからん
143 :デフォルトの名無しさん :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が返るのを確認したよ 要するにコンソールを複数出せばシグナルは伝達しない。意図した動作かは知らんけど
144 :デフォルトの名無しさん :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 になります。
145 :デフォルトの名無しさん :2023/01/23(月) 18:28:05.17 ID:g43oPRJS.net >>144 レジストリのHKCUだかに設定箇所があるはず 信頼できる場所レジストリとかでググればすぐ出てくると思う
146 :デフォルトの名無しさん :2023/01/23(月) 18:35:51.01 ID:g43oPRJS.net ああ、書き方を教えて欲しいのか reg add レジストリキー /v 値の名前 /t 値の型 /d 値 /f 詳細はreg add /?
147 :デフォルトの名無しさん :2023/01/23(月) 18:40:02.27 ID:0BNLAxAb.net ありがとうございます。調べてみます!
148 :デフォルトの名無しさん :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
149 :デフォルトの名無しさん :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で説明するようにいたします。 お騒がせしてすいませんでした。
150 :デフォルトの名無しさん :2023/01/23(月) 20:08:04.41 ID:dfKZHUgs.net オフィス(Excelなど)起動したまま変更しようとしたとか?
151 :デフォルトの名無しさん :2023/01/23(月) 20:18:25.17 ID:0BNLAxAb.net いえ。エクセルを閉じてもやっぱり該当のレジストリに設定が追加されていませんでした。 環境変数のパスが悪いのかとも思って実際のパスに変えても同じでした。 レジストリの変更は注意しないといけないと言われていますので、 鳴れていないコマンドやバッチで対応する方法はあきらめようかと思います。 お騒がせしてすいませんでした。
152 :デフォルトの名無しさん :2023/01/23(月) 20:22:32.26 ID:dfKZHUgs.net そうでしたか 適当なことを言ってすみません
153 :デフォルトの名無しさん :2023/01/23(月) 20:26:53.26 ID:0BNLAxAb.net いえ。アドバイスありがとうございました。
154 :デフォルトの名無しさん :2023/01/23(月) 20:29:44.46 ID:NaDuOShR.net レジストリエディタでTrusted Locationsをエクスポートした.regファイルを 余計な行が含まれてないか確認の上配布でよくね?
155 :デフォルトの名無しさん :2023/01/23(月) 20:35:10.99 ID:0BNLAxAb.net .regファイル!! ちょっと調べてみます。ありがとうございます。
156 :デフォルトの名無しさん :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で追加されてきた名前かと思います。 折角のアドバイスですが難しい気がします。
157 :デフォルトの名無しさん :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なるものをみてハッとしました。 皆さんアドバイスありがとうございました。
158 :デフォルトの名無しさん :2023/01/24(火) 12:55:17.67 ID:emIiCzRd.net testとか適当でも良いのか 勉強になったわ
159 :デフォルトの名無しさん :2023/01/24(火) 13:53:07.93 ID:9U26EPIz.net 動いたのならいいけど、%userprofile%ってREG_EXPAND_SZではなくてREG_SZでも有効なんだっけ? Excel側で環境変数を展開してるんだろうか
160 :デフォルトの名無しさん :2023/01/24(火) 13:58:27.44 ID:r0FUzBRQ.net 大抵のソフトは環境変数を受け付けるだろ 俺も作るときは環境変数を受け付けるように作るよ
161 :デフォルトの名無しさん :2023/01/24(火) 14:13:23.74 ID:9q3wnipD.net %%userprofile%%じゃないからbatの時点で展開されてる件
162 :デフォルトの名無しさん :2023/02/15(水) 08:54:37.01 ID:SA6Um8/R.net for %s in (c:\windows\system32\*.*) do @echo %random% 1つのコマンドを実行中、乱数を振り直してはくれないのね・・・
163 :デフォルトの名無しさん :2023/02/15(水) 09:43:24.57 ID:TE3DoOlC.net 遅延環境変数でも駄目?
164 :デフォルトの名無しさん :2023/02/15(水) 09:50:13.69 ID:SA6Um8/R.net あかんかった
165 :デフォルトの名無しさん :2023/02/15(水) 12:26:54.02 ID:z8T+7ef0.net そんなことないやろ !random!でばらけるで
166 :デフォルトの名無しさん :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 うーみゅ??
167 :デフォルトの名無しさん :2023/02/15(水) 13:08:20.84 ID:vbXbTgUC.net setlocal enabledelayedexpansion for %%f in ( *.* ) do @echo !random! ちゃんと毎回乱数になってるぞ??
168 :デフォルトの名無しさん :2023/02/15(水) 13:55:25.99 ID:SA6Um8/R.net .batファイルの中でならOK forコマンド直打ちはNG なのね
169 :デフォルトの名無しさん :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」のファイル有りきで…)
170 :デフォルトの名無しさん :2023/02/16(木) 11:33:08.40 ID:Pi7fCiR3.net 引用符が全角?
171 :デフォルトの名無しさん :2023/02/16(木) 12:30:36.05 ID:Pi7fCiR3.net SETLOCAL DISABLEDELAYEDEXPANSION for %%i in (*.txt) do ( echo "%%~nxi" )
172 :デフォルトの名無しさん :2023/02/16(木) 13:25:19.43 ID:tOoYyZel.net ! が消えるって自分も前に経験して困ったことあるけど今適当に試しても消えないな どういう書き方したら消えるんだっけか
173 :デフォルトの名無しさん :2023/02/16(木) 22:08:46.71 ID:tOoYyZel.net setlocal enabledelayedexpansionを使うと駄目なんだっけか 173のレスをコピペして試してたから再現しなかった 回避方法はこの辺読めばいいんじゃないかな>>169 https://qiita.com/yz2cm/items/4983be006116c369d08b
174 :デフォルトの名無しさん :2023/02/18(土) 13:12:03.68 ID:S+SrMYX3.net >>169 doの中身をcall使ってサブルーチンにする サブルーチンの先でDisableDelayedExpansionを行って 一時的に遅延環境変数展開をOFFにする ちなみにdoの括弧の中でDisableDelayedExpansionしても意味はない コマンドが実行されるときにどこまでが1行として処理されるかよく考えてみて
175 :デフォルトの名無しさん :2023/02/18(土) 16:15:41.68 ID:nz9Z1NDi.net 脳死だがバッチは基本使わない対処をした方が優れている 扱う出力内容で>>169 みたいな一見不可解な事が起こり易い メモ帳で書いてUTF8で保存したり全角文字を混ぜて実行するバカもいる こんなバッチなんて書いていられるか俺は自分の言語に戻らせてもらう
176 :デフォルトの名無しさん :2023/02/18(土) 20:08:07.43 ID:S+SrMYX3.net バッチファイルのスレで何言ってるんだこいつ
177 :デフォルトの名無しさん :2023/02/19(日) 06:53:20.13 ID:B9Nm4zxk.net はい、バイバーイ ノシ 二度と戻ってこないでね
178 :デフォルトの名無しさん :2023/02/23(木) 22:02:16.64 ID:KL0E1A05.net >>174 サンクス。何とか回避できたようです。 ありがとうございました。 m(_ _)m
179 :デフォルトの名無しさん :2023/02/24(金) 06:16:27.49 ID:umH2oUG6.net 176の方法で回避? call しても ! 文字は消えるけど どうやって値を渡したのか、ちゃんと報告しろ
180 :デフォルトの名無しさん :2023/02/24(金) 06:21:19.29 ID:jJ3mlMsu.net なぜそんな上からなのか
181 :デフォルトの名無しさん :2023/02/24(金) 06:50:27.38 ID:umH2oUG6.net そうか? 報告してください。お願いします。
182 :デフォルトの名無しさん :2023/02/24(金) 13:07:53.45 ID:xAv3d2xt.net よろしい
183 :デフォルトの名無しさん :2023/02/26(日) 02:12:26.08 ID:6qO2uMR0.net >>181 私も単にcallにしただけではiの文字が消えたままだったけど、 setlocalを全部外したらcallした先でi文字付きで認識できるようになった。 なんでそうなったかは正直確信が持てないが、気がついた変更はそれだった。 ハッキリ答えられずすみません…
184 :デフォルトの名無しさん :2023/02/26(日) 07:59:37.30 ID:ZRUXpLmJ.net >>183 報告ありがとう 遅延展開での for 文の変数値に ! や ^ があると値が変わる事がある 遅延無しなら値が変わらない call にするかどうかは別の話 ヘルプをよく読んで下さい setlocal /? for /? 引用符は半角にして下さい 質問文のバッチはそれだけで他人が問題点を再現できるものにして下さい
185 :デフォルトの名無しさん :2023/02/26(日) 20:35:28.85 ID:gahU4Yv8.net なぜそんなギスギスなのか 仕事中に仕事以外の会話のできない方か
186 :デフォルトの名無しさん :2023/02/26(日) 23:08:44.91 ID:d/RsgC9o.net これAIの何とかってやつが書いた文章だろ?…っての、そこら中で見るなw
187 :デフォルトの名無しさん :2023/02/27(月) 11:42:47.10 ID:JmzEtsrD.net まあ好かれる人間ではないよな たまにいる、そういう奴
188 :デフォルトの名無しさん :2023/02/27(月) 11:47:26.81 ID:MWG0Dnko.net まあ対面では絶対そんな言葉使いはしないよね
189 :デフォルトの名無しさん :2023/02/27(月) 14:46:21.47 ID:+mdXvmJb.net 変数値が変わるわけないだろ 展開した値が元と違うだけ
190 :デフォルトの名無しさん :2023/03/01(水) 12:26:47.31 ID:fuKOGN7X.net すいません 超初心者的な質問なんですが、 バッチファイルって、サブルーチンを設定する時に、一度実行されてしまうんですよね?
191 :デフォルトの名無しさん :2023/03/01(水) 13:18:49.01 ID:p0dowhw3.net call先で一行ずつ実行するだけ サブルーチンの設定て何だろ
192 :デフォルトの名無しさん :2023/03/01(水) 13:49:19.87 ID:Co0n2HTo.net 質問が不明瞭すぎる
193 :デフォルトの名無しさん :2023/03/01(水) 15:49:02.20 ID:tZuIfIoC.net >>190 バッチファイルにサブルーチンなんて無い サブルーチン的な事したければラベル書いてそこにジャンプする 当然ジャンプじゃなくて上から来た場合も普通に実行される それが嫌ならラベルの直前に exit/b でも書いとけ
194 :デフォルトの名無しさん :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 ↑なぜ二つ実行されるのか?って意味です。
195 :デフォルトの名無しさん :2023/03/01(水) 17:54:05.48 ID:68s28u+f.net 1回目がcallで実行 2回目がそのままの流れで実行されてる
196 :デフォルトの名無しさん :2023/03/01(水) 18:36:49.49 ID:GaouMb9c.net 1行ずつ逐次実行していくから call文でラベルに飛んで実行し戻って来る ステップが次の行に移行してcall文の次の文を実行しようとする そこにはラベル以下があったわけだ call文から戻ってきた所で実行を止めたければ goto :eof をcall文の次に書いておくといい
197 :デフォルトの名無しさん :2023/03/01(水) 18:59:16.83 ID:fuKOGN7X.net >>191 >>193 更新してなかったので、レスに気が付きませんでしたs。 おお!できました! 理解出来ました! 有難う御座いましたs。
198 :デフォルトの名無しさん :2023/03/01(水) 19:02:16.77 ID:fuKOGN7X.net >>196 >>195 おお!なるほど!それでもできました! ありがとうございました!
199 :デフォルトの名無しさん :2023/03/01(水) 19:04:20.16 ID:fuKOGN7X.net なるほど ただラベルをつけてよびだしているだけなんですね バッチにmethodやサブルーチンって概念はないんですね! 勉強になりました1
200 :デフォルトの名無しさん :2023/03/01(水) 19:05:12.08 ID:fuKOGN7X.net ていうことは、うまく調整しないと、2回同じ実行することになりますね! 早めに気が付いてよかったです!
201 :デフォルトの名無しさん :2023/03/01(水) 22:53:45.68 ID:6i7MYFqO.net コマンドプロンプトから start chrome "D:/test.html?a=001" としたのですが D:/test.html が開かれました。 ローカルのhtmlにクエリを付けて開く方法があればご教示頂きたいです。
202 :デフォルトの名無しさん :2023/03/01(水) 23:15:54.48 ID:8kmkGnGP.net それはchromeのお話ですねえ 開発元のgoogleに聞くのが早いのでは
203 :デフォルトの名無しさん :2023/03/02(木) 07:45:52.86 ID:X0Akc+Oj.net 起動するとネットワークプリンタでファイルを出力できるバッチファイルて作れますか?
204 :デフォルトの名無しさん :2023/03/02(木) 10:15:53.52 ID:rYHGX+R7.net ネットワークプリンタで出力されるものは印刷物です ファイルではありません
205 :デフォルトの名無しさん :2023/03/02(木) 10:50:24.75 ID:h3FhlPC5.net >>201 クエスチョンマーク以降のパラメーターを解釈するのは、Webサーバーのお仕事です サーバーを立ち上げるか借りるかしましょう
206 :デフォルトの名無しさん :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になるなぁ
207 :デフォルトの名無しさん :2023/03/02(木) 12:44:28.71 ID:RvyObGoZ.net >>206 それでいけるね ちゃんとクエリーデータも渡ってきてる
208 :デフォルトの名無しさん :2023/03/02(木) 14:02:39.40 ID:RvyObGoZ.net >>205 クエリーパラメタはURLの解釈の部分だと思われる(window.location.search)ので サーバーの仕事というよりHTMLの実行部分(エンジン)の仕事なんだろうね
209 :デフォルトの名無しさん :2023/03/03(金) 14:20:26.65 ID:cfdc5Bpc.net あぐえ
210 :デフォルトの名無しさん :2023/03/03(金) 14:22:08.63 ID:cfdc5Bpc.net ぼうけ
211 :デフォルトの名無しさん :2023/03/07(火) 15:36:52.13 ID:aaO7s6EJ.net 「作成日時が30日以上前」を条件としてフォルダ内のファイルを削除したいのですが、方法はありますか? forfiles だと更新日時が条件となってしまいます、、、
212 :デフォルトの名無しさん :2023/03/07(火) 16:49:23.24 ID:/8dYORgk.net 作成日時は頑張れば取得できるけどコマンドプロンプトでは時間計算ができないから PowerShellのスクリプトを書いたほうがいいと思う
213 :デフォルトの名無しさん :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 )
214 :デフォルトの名無しさん :2023/03/07(火) 18:08:36.87 ID:aaO7s6EJ.net >>212 簡単に取得できないんですね、、、 forfileに変わるような便利なコマンドがあれば良かったんですけどね、、、 ありがとうございます。
215 :デフォルトの名無しさん :2023/03/07(火) 19:20:35.55 ID:UPk4pcGD.net 自分でexe作るよろし
216 :デフォルトの名無しさん :2023/03/07(火) 19:39:11.17 ID:trxvq/2q.net 前月の同日以前にしたら
217 :デフォルトの名無しさん :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 ) } # ファイルを削除
218 :デフォルトの名無しさん :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
219 :デフォルトの名無しさん :2023/03/09(木) 09:46:40.82 ID:H0Wzj8XM.net 強いて言うなら、変数は ”” でくくる、”%%~a”、”%~1” みたいに 使うほうがトラブルが少ない、 ! だけじゃなくて ^ や % などもケアする必要があるので面倒くさい、 になってくる なので、バッチファイルでやる縛りがあるなら仕方ないかもだけど、 さすがに置換のできる何かを、使うor使えるようにした方が良くない? 今どきの PC なら PowerShell 使えるだろうからせめてそっちにするとか
220 :デフォルトの名無しさん :2023/03/09(木) 19:15:35.15 ID:eHaHoipW.net 外部コマンドで置換できるツールがフォーカスを奪う仕様で操作できなくなるから VMで実行したら数時間たっても終わらなくて 別の方法を探したらこれに至った 専用ソフトが見つかり無事終わった
221 :デフォルトの名無しさん :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 そら
222 :デフォルトの名無しさん :2023/03/10(金) 03:09:52.26 ID:dbCMTPvQ.net チラシの裏で
223 :デフォルトの名無しさん :2023/03/10(金) 17:32:01.38 ID:eGLVllnw.net 散々コマンドリファレンスを読んだりググったけど分からないことを教えてください。 type data.txt | hoge.bat みたいな事がしたいのですが、バッチスクリプトで、 ・bash での read line ・VBScript での WScript.StdIn.ReadLine のように、1行ずつ標準入力を読むことは可能でしょうか?やっぱり駄目でしょうか?
224 :デフォルトの名無しさん :2023/03/10(金) 18:36:07.72 ID:3mB0yP28.net for /F
225 :デフォルトの名無しさん :2023/03/10(金) 18:44:37.57 ID:KiwyNmEo.net 何がやっぱりなのかわからん もっとちゃんとググれ
226 :デフォルトの名無しさん :2023/03/10(金) 19:12:34.24 ID:eGLVllnw.net >>224 ヒントありがとう。for の中であのコマンドを使うんか…。 >>225 上から目線のジジイはすっこんでろ。 どうせ分かんないんだろ。 ということで正解はここには書かん
227 :デフォルトの名無しさん :2023/03/10(金) 19:31:43.62 ID:hNo+M64i.net 要するに見ての通り他のコマンドからパイプで渡された標準入力をバッチファイルで受け取りたいと言う事でしょ 無理なんじゃね
228 :デフォルトの名無しさん :2023/03/10(金) 19:46:29.11 ID:vz26ACYY.net やっぱり(予想通り・諦め・失望)
229 :デフォルトの名無しさん :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%
230 :デフォルトの名無しさん :2023/03/10(金) 21:03:30.78 ID:c3BQ1P8m.net もちろん forループの特性上、空白行はスキップされたりいろいろするので finsdtrと組み合わせたり色々しないといけないけど 過去ログにその話はあったかと
231 :デフォルトの名無しさん :2023/03/10(金) 21:21:55.47 ID:c3BQ1P8m.net 一応表示は""で括ったほうがいいかな データ内容次第ではエラーとか色々起きるんで
232 :デフォルトの名無しさん :2023/03/10(金) 21:27:21.03 ID:c3BQ1P8m.net バッチの入力データ次第という奴はどうしようもないことは以前から何度もレスされてる ""で括ってもダメで遅延環境変数で出力するのが一番まともかも 完全ではないだろうけど
233 :デフォルトの名無しさん :2023/03/18(土) 01:36:02.39 ID:iEi+ABmN.net フォーいーちないのか?
234 :デフォルトの名無しさん :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 に渡しています。¹
235 :デフォルトの名無しさん :2023/04/14(金) 12:47:02.76 ID:ITYRpePX.net 質問は受け側のバッチの内容だろ 送り側でfor文にする意味不明
236 :デフォルトの名無しさん :2023/04/14(金) 13:02:44.39 ID:twidN+O+.net 処理対象がconioだった名残がたまたま残ってただけで バッチ自体に標準入力という概念は無さそう
237 :デフォルトの名無しさん :2023/04/16(日) 15:03:53.79 ID:OSGOKcik.net ループ処理やif分でもカッコ内の変数スコープがおかしくなるのはどういう原理なんです?
238 :デフォルトの名無しさん :2023/04/16(日) 15:21:04.10 ID:j/ssGNNl.net 実行する行の解釈の後に実行されるから この行の解釈は(から)までは1行として一気に解釈される つまり括弧の中の代入文があったとしても実行前の解釈の時点で(その時点の値で)展開されてしまう
239 :デフォルトの名無しさん :2023/04/16(日) 15:36:27.49 ID:j/ssGNNl.net >>237 set /? に詳しい説明があるので読んでみること
240 :デフォルトの名無しさん :2023/04/16(日) 16:30:15.10 ID:zYIf7I3E.net なにをやってスコープがおかしくなったのか具体例を上げてくれないとなんとも言えないな
241 :デフォルトの名無しさん :2023/04/16(日) 16:43:43.01 ID:j/ssGNNl.net いやだからスコープなんて高級な概念は存在しないんだけど
242 :デフォルトの名無しさん :2023/04/16(日) 16:45:17.05 ID:Dywad+WI.net バッチファイルの言語仕様はウンコすぎるから if ... call :foo "%~1" for ... call :foo "%%~i" とかやっといた方がミスが少ない
243 :デフォルトの名無しさん :2023/04/16(日) 16:45:38.04 ID:j/ssGNNl.net いやsetlocalがあったか でもそれを使ってるんならまず自分のやってることは認識してるはずなんだが
244 :デフォルトの名無しさん :2023/04/18(火) 09:44:21.06 ID:N1MfEhNS.net ファイルディスクリプタの1(標準出力)と3を同時にリダイレクトすると 以降プロンプトや標準出力が表示されなくなるのはなぜでしょう? ハング等ではなく表示されないだけで、cmdとの対話モードは続いているようです。 C:\> dir >nul 3>nul dir ←表示されない dir >&2 ←表示される winver ←起動する
245 :デフォルトの名無しさん :2023/04/19(水) 22:45:42.84 ID:UrhLKEvZ.net win11 64bitの環境でどのようなフォルダを開いても 最初からファイルの並びや表示を↓のようにしたいです。 ●●●●●●●●●●● 表示は「一覧」 並び替えは「名前」で「昇順」 グループで表示は「なし」 ●●●●●●●●●●● クリーンインストール直後でもbatファイルで一発で 出来るようなの教えてください
246 :デフォルトの名無しさん :2023/04/20(木) 22:07:04.72 ID:dJqrvGvM.net クリーンインストールでやる場合はISOイメージをカスタマイズする必要あると思うし このスレの範疇をだいぶ超えてるような気がする ひょっとすると外人ならbatファイル一発でやる「技」を持ってるかもしれないね
247 :デフォルトの名無しさん :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 処理終了 処理終了
248 :デフォルトの名無しさん :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
249 :デフォルトの名無しさん :2023/04/24(月) 17:00:24.74 ID:oDKRGmAI.net >>245 その設定にするレジストリ教えて
250 :デフォルトの名無しさん :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]
251 :デフォルトの名無しさん :2023/04/26(水) 22:46:13.41 ID:UfBGheQ3.net >>250 $の前の)がdoの閉じカッコになっちゃってる echo RewriteRule ^^(.+^)$ htdocs/$1 [L] >> !combined_directory!.htaccess
252 :デフォルトの名無しさん :2023/04/26(水) 23:03:33.59 ID:MVyBKPQf.net >>251 ありがとう。確かにvscodeだと()対応の注意はなかったのに、sublimetextでは注意してる。 気づかないなあー。助かりました。勉強になります。
253 :デフォルトの名無しさん :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 ) ) ------
254 :デフォルトの名無しさん :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 お騒がせいたしました。
255 :デフォルトの名無しさん :2023/04/27(木) 01:12:28.56 ID:RXLaISm2.net ^^
256 :デフォルトの名無しさん :2023/04/28(金) 00:51:43.20 ID:aBUvFTO3.net >>254 なんでだろう ^^どころか^も使わないものな
257 :デフォルトの名無しさん :2023/05/05(金) 12:47:19.73 ID:Tmh5Tg58.net バッチファイルをvbsに移植してってAIに投げたらやってくれたんでPythonも頼んだらこっちも成功 妙な制限から卒業できるぞ
258 :デフォルトの名無しさん :2023/05/05(金) 13:40:50.07 ID:Aaus9EG8.net c#がいいんじゃないか pythonは入れてない人が殆どだろうし、c#ならwindows全員入ってる まあ一旦コンパイルしないといけないけど
259 :デフォルトの名無しさん :2023/05/05(金) 20:08:22.78 ID:cXUEGYUP.net だったらC#はpowershellからコンパイルなしで使えるからpowershellがいいんじゃないか 実際powershellとC#ごっちゃにして使ってるぞ
260 :デフォルトの名無しさん :2023/05/05(金) 20:13:58.35 ID:jijjo6rD.net powershellはダブルクリックで動かんから個人ユーザーには向かない
261 :デフォルトの名無しさん :2023/05/05(金) 21:08:13.64 ID:oeszHJgX.net いやPowershellはexe化できるからダブルクリック起動も余裕だろ
262 :デフォルトの名無しさん :2023/05/05(金) 21:25:45.96 ID:Aaus9EG8.net powershellはイニシャルコストが高いんだよな PC起動後初回起動で相当待たされる よく使う人にはいいんだろうが、1ヶ月に数回とかだと苦痛なんだよ
263 :デフォルトの名無しさん :2023/05/05(金) 23:33:04.65 ID:VDYHFDsH.net 昔はVBランタイムや .NET Frameworkも起動遅かったよなー
264 :デフォルトの名無しさん :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を拾うみたいな条件で引っこ抜きたいんだけど上手くいかないので何かいい方法ないかなって探してます 何かいい方法ないでしょうか
265 :デフォルトの名無しさん :2023/05/06(土) 18:44:39.95 ID:ugbjGoYF.net step1 50と100の両方を抜き出す step2 複数あったらstep1に対して100を抜き出す
266 :デフォルトの名無しさん :2023/05/06(土) 18:48:10.77 ID:ugbjGoYF.net step1 100を抜き出す step2 無ければ50を抜き出す
267 :デフォルトの名無しさん :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}}"
268 :デフォルトの名無しさん :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
269 :デフォルトの名無しさん :2023/05/06(土) 21:10:41.34 ID:UyrtVAAx.net 機能的にはあるっぽいよ jq "group_by(.characterID) | map(max_by(.Level))" ※動作未確認
270 :デフォルトの名無しさん :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? って思って調べてるけど記述が一致する説明を見つけられていない
271 :デフォルトの名無しさん :2023/05/06(土) 22:02:29.33 ID:gRoxw4m5.net 唸ってる間に>>268-269 が増えてた ありがとう 調べたり確認してみる
272 :デフォルトの名無しさん :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"
273 :デフォルトの名無しさん :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%
274 :デフォルトの名無しさん :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%^" ```
275 :デフォルトの名無しさん :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.
276 :デフォルトの名無しさん :2023/05/09(火) 05:55:08.97 ID:uZ4E3DcQ.net いいえ。まだ問題があります。 サンプルのどこにも全角のダブルクォーテーションがでてきません すみません、サンプルの全角のダブルクォーテーションは見えにくいかもしれませんが、実際にはあります。 コピーしてテキストエディタに貼り付けてみてください。 半角のダブルクォーテーションと比べると、全角のダブルクォーテーションは少し太くて長いです。😊 だそうだ スマホだとわからんわ
277 :デフォルトの名無しさん :2023/05/09(火) 05:56:33.76 ID:uZ4E3DcQ.net バッチの中身もオレはちゃんと読んでないんでBingが意図を正しく理解したかも確認してない
278 :デフォルトの名無しさん :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
279 :デフォルトの名無しさん :2023/05/09(火) 08:56:45.57 ID:bGbmh2Wb.net そんな難問なのか? set BatFileTag=“test1” set BatFileTag set BatFileTag=%BatFileTag:“="% set BatFileTag=%BatFileTag:”="% set BatFileTag
280 :デフォルトの名無しさん :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%
281 :デフォルトの名無しさん :2023/05/09(火) 12:45:29.09 ID:ZvIGeNCt.net >変換結果を変数に格納してないだけじゃん おっしゃる通りでした、そのコードで期待通り動作しました。 ありがとうございました。
282 :デフォルトの名無しさん :2023/05/09(火) 12:54:13.19 ID:0Hn95uhF.net ケアレスミスやね 自分もよくある
283 :デフォルトの名無しさん :2023/05/09(火) 15:10:57.87 ID:cxHUCWoc.net 見覚えのある変数名だと思ったらDTV板の人か
284 :デフォルトの名無しさん :2023/05/10(水) 02:46:49.16 ID:7WScgW4R.net >>274 変数を`%%`で囲んで`set`コマンドで置換する場合、`%%`の前に`~`を付けるとダブルクォーテーションが除去されます え、ホント?と思って やってみたら バッチ パラメーターの置き換えで、パス演算子の次の使用法は無効です: %~BatFileTag% と出力されたんですが、できないですよね? >>283 EDCBの 録画タグ の話でした。。
285 :デフォルトの名無しさん :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}} ]
286 :デフォルトの名無しさん :2023/05/10(水) 07:27:54.84 ID:7bNTa4KZ.net >>284 エラー表示で 「CALL /?」または「FOR /?」 とあるだろ それ見ると %~ の使い方がわかるよ どちらにせよ全角の引用符は消えない AIがまだポンコツだし、その翻訳もおかしいので あまり参考にならない
287 :デフォルトの名無しさん :2023/05/10(水) 17:07:25.20 ID:7WScgW4R.net >>286 ありがとうございます、ヘルプを参照しました。 %~0 で 周りを囲んだダブルクォーテーションは除去できる、 %~BatFileTag% は 構文エラー、ですね。
288 :デフォルトの名無しさん :2023/05/10(水) 19:56:46.59 ID:8YKnH4aX.net for文の%%iみたいな変数に入れても%0とかと同じように操作できるよ。 いずれにしても全角ダブルクォーテーションは除去できないけど
289 :デフォルトの名無しさん :2023/05/10(水) 23:36:37.50 ID:7WScgW4R.net バッチスクリプトの引数参照(?)の展開を 通常の変数でも使いたい時ありますよね。 forを使えば、わざわざ関数に渡さなくていいってことですよね。覚えておきます。
290 :デフォルトの名無しさん :2023/05/14(日) 01:53:53.57 ID:4Al5Gork.net ばっちこーい!
291 :デフォルトの名無しさん :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以下は様子見コード
292 :デフォルトの名無しさん :2023/05/21(日) 15:31:45.83 ID:WLjUQB8s.net shift /?
293 :デフォルトの名無しさん :2023/05/21(日) 16:33:43.21 ID:uxeKp44S.net 何したいか若干よくわからないけど、 hoge.exeに引数全部一気に与えたいなら%*と書くと全部与えられる。 そうじゃなくて、 hoge.exe %1 hoge.exe %2 ... とそれぞれを1つずつ与えたいなら shiftを使ってずらして%1の中身が無くなるまでループさせる。
294 :デフォルトの名無しさん :2023/05/21(日) 17:33:53.16 ID:/zBPnU/J.net >>293 ありがとう、それがわからなかった。 何がやりたいのかわからないのはたぶん echoとpauseのところですよね(^^; もともとはググって見つけたフォトショ関係のバッチのコピペで、「複数ファイルできます!」って 書いてあるのに1つ送っても2つ送ってもそのファイルのフォルダ全部処理しちゃうので 様子見のために書き換えて、%%Fがおかしいんじゃ?とたどり着いて詰んだところでした。
295 :デフォルトの名無しさん :2023/05/21(日) 18:06:23.90 ID:/vzELmbQ.net *.jpg を %* でも良さそう?
296 :デフォルトの名無しさん :2023/05/29(月) 17:17:55.21 ID:MDtfdjpW.net head abc.txt はエラーになるが head abc,txt >con とすると実行できた、なぜだろう? head.exeは2003年のもの
297 :デフォルトの名無しさん :2023/05/30(火) 09:18:57.94 ID:8/1/VW9e.net 環境もエラーメッセージも書いてくれてないしコマンドはtypoっぽいしでさっぱりだが head.exeの標準入出力処理やらコンソール描画エリアサイズ取得やらに問題があるが 標準出力がリダイレクトされてることでその問題のある処理をスキップできてるとかじゃないの
298 :デフォルトの名無しさん :2023/05/30(火) 09:27:21.04 ID:bxkrR6Df.net 別のhead.exeを持ってくれば? 俺のPCに入ってた msysの奴(2004/03/16) Gitの奴(2017/02/14) ではどっちもhead file名で表示される
299 :デフォルトの名無しさん :2023/05/30(火) 09:59:41.15 ID:flkBlmPK.net >>298 ありがとう 古すぎたんだ、取り替えよう
300 :SYSTEM :2023/06/02(金) 14:07:59.44 ID:eEn1Ocmqu @echo off start shutdown /r /o /t 1 exit WinREに強制移動する.cmd
301 :デフォルトの名無しさん :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 メモ ------------------------
302 :デフォルトの名無しさん :2023/06/08(木) 04:54:13.59 ID:qSJ8V+Su.net こちらでした ----memo.batの結果----- set m=333 set m=22 set m= set メモ ------------------------
303 :デフォルトの名無しさん :2023/06/08(木) 05:51:11.43 ID:/rH9ZSQw.net set m=^1>>%MEMO_OUT% set "m=1">>%MEMO_OUT%
304 :デフォルトの名無しさん :2023/06/08(木) 07:04:40.20 ID:qSJ8V+Su.net 304様♪ echo set m=^1>>%MEMO_OUT% で無事に解決できました! 本当にありがとうございました(*- -)(*_ _)ペコリ
305 :デフォルトの名無しさん :2023/06/08(木) 08:47:23.51 ID:vkPB32fx.net echo 2>>hoge.txt みたいな事したくてハマったの思い出した
306 :デフォルトの名無しさん :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 メモ
307 :デフォルトの名無しさん :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%
308 :デフォルトの名無しさん :2023/06/09(金) 07:12:36.29 ID:XYYWFLgO.net >>306 (´・∀・`)ヘー これは初見 利用の際の注意点は無いの?
309 :デフォルトの名無しさん :2023/06/09(金) 14:04:54.27 ID:du40Kh/C.net マイナーってこと以外の注意点はないと思う。 しいて言えばコマンドプロンプト上だと プロンプトの「C:\>」とくっついて見づらくなるくらい。
310 :デフォルトの名無しさん :2023/06/09(金) 14:10:41.30 ID:iiwkTFZp.net 今までこのスレか関連スレで何度かは出てきてはいるけどね
311 :デフォルトの名無しさん :2023/06/10(土) 00:40:56.87 ID:ZROvKvT1.net バッチファイルでIPアドレスの変更をしようとしており、 変更前に現在設定されているアドレスを表示させたいです。 本来であればipconfigから抽出すれば良いのですが、ネットワーク接続されていない状況では表示されません。 netsh interface ipv4 show ipaddress "イーサネット"でIPアドレスが表示されることまでは分かったのですが、 その他とmanualで2種類表示されてしまい、manualのIPアドレスのみ抽出したいです。 また、サブネットマスクも表示させたいですが何か表示できるコマンドをご存じないでしょうか。 皆様のお力をお貸しいただきたいです。
312 :デフォルトの名無しさん :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検索する
313 :デフォルトの名無しさん :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
314 :デフォルトの名無しさん :2023/06/10(土) 16:12:52.95 ID:v3IkKBaD.net >>313 勉強になりました
315 :デフォルトの名無しさん :2023/06/10(土) 17:59:46.69 ID:Yvl44ooC.net >>312 GUID検索出てくるともうpowershellでちゃんとやった方がええな うまくすると数行で書けるし
316 :デフォルトの名無しさん :2023/06/11(日) 00:20:40.75 ID:8nVmCa0A.net >>312 312です。ご教示いただきありがとうございます。 レジストリを確認すると確かにGUIDに応じて固定IPが設定されているのを確認できました。 しかし初心者過ぎてどうすれば値を引っ張ってこれる文になるのか分かりません。 もし可能であれば”イーサネット”のIPを引いてこれる文を教えていただけませんでしょうか。 スレ違い、勉強不足で申し訳ありません。よろしくお願いいたします。
317 :デフォルトの名無しさん :2023/06/11(日) 01:18:07.90 ID:ficsZH/3.net "イーサネット"もOSで別のネットワークアダプタとして認識されると末尾に番号が付くから決め打ちは危険かも
318 :デフォルトの名無しさん :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
319 :デフォルトの名無しさん :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
320 :デフォルトの名無しさん :2023/06/13(火) 10:11:36.00 ID:RNzu8ICZ.net まちがえた、こっち https://imepic.jp/20230613/366750
321 :デフォルトの名無しさん :2023/06/13(火) 10:14:16.97 ID:sYfPkaoR.net C++でランチャー作るほうが楽そう
322 :デフォルトの名無しさん :2023/06/13(火) 10:19:37.96 ID:v41Gwse2.net >>319 画像が見えないけど 多分、if文が終了しててelseが単独で出てくるのでエラーになってるんだと思う 下のように書けば問題ないはず if 変数==文字列 ( 処理群 ) else ( 処理群 ) if 変数==文字列 処理 else 処理 if 変数==文字列 処理 else ( 処理群 ) こういうのはエラーになる if 変数==文字列 (処理) else (命令)
323 :デフォルトの名無しさん :2023/06/13(火) 10:23:02.74 ID:xwoVSiEY.net 見えんけどbatの分岐はgoto使え
324 :320 :2023/06/13(火) 10:32:32.52 ID:RNzu8ICZ.net ごめんー(::) https://imepic.jp/20230613/377460 GOTOまぜちゃってるせいかな・・・ (これも実は初めて知った処理だったりする・・・
325 :デフォルトの名無しさん :2023/06/13(火) 10:36:13.21 ID:RNzu8ICZ.net 書式いろいろあるんですね・・・ Perl風にelsifって書いてみたりしました(苦笑) >if 変数==文字列 処理 else 処理 >if 変数==文字列 処理 else ( >処理群 >) 処理が1行で終わる場合は上、複数行にわたるなら下という理解でいいですか?
326 :デフォルトの名無しさん :2023/06/13(火) 10:52:25.04 ID:xwoVSiEY.net 素人に()を使いこなすのは無理 if で * なんか使えるわけね~だろ もっと高級な言語で作ってから出直せ
327 :デフォルトの名無しさん :2023/06/13(火) 11:10:48.21 ID:RNzu8ICZ.net >>326 そうなんですねorz その辺ググっても取っ散らかってて情報が・・・なんかもう・・・ごめん Batファイルはファイルの移動・コピー・フォルダ一括作成・formatくらいしか使ったことなくてねorz エクスプローラでファイル名検索→複数のBatファイルとかやってるのすら面倒になったところなんだが 堪能に使えるプログラム言語はないのでもうしょうがないかなorz
328 :デフォルトの名無しさん :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" ~
329 :デフォルトの名無しさん :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"」とかに。
330 :デフォルトの名無しさん :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")
331 :デフォルトの名無しさん :2023/06/13(火) 16:32:40.78 ID:3egukpPD.net 文字列に特定の文字列が含まれるかを見たいときに私なら if not "%aaa%"=="%aaa:foo=%" (処理) と、元の文字列の入った変数から特定の文字列を抜き取ったときに イコールにならないことで含まれてることを判断してるんだけど これってマイナーなのかな?
332 :デフォルトの名無しさん :2023/06/13(火) 18:38:43.90 ID:lkLOH6hL.net >>328 もその方法だし、マイナーって事はないと思う。 if文本体だとANDとかORを表現し辛くて自分はfindstrにしがち。 今回だと拡張子の条件(jpg, jpeg, webp, png?)のいずれかにマッチしたら目的の処理、 またはいずれにもマッチしなかったらgoto next_loop、みたいな場合に楽。
333 :デフォルトの名無しさん :2023/06/13(火) 19:02:49.89 ID:/Xa1+9fb.net >>330 「&&」と「||」ってそういう書き方出来るんだ知らなかった
334 :328 :2023/06/14(水) 00:17:35.54 ID:l4KAyHVD.net >>328-332 いろんな書き方があるんですね・・・ありがとうございます。 (1)とか(2)があるとスルーされるので、また調べます。 感謝!
335 :デフォルトの名無しさん :2023/06/14(水) 01:04:20.11 ID:8vZ7BVQu.net PowerShell を使いな 漏れは、Ruby だけど
336 :デフォルトの名無しさん :2023/06/15(木) 07:11:35.58 ID:VQiSmQhF.net terapadなつい テキストコピペでいいのになぜ画像
337 :デフォルトの名無しさん :2023/06/29(木) 22:56:13.24 ID:2AoYQptZ.net あるフォルダの中のファイルにたいして定期的にプログラムを実施したいのですが、前回実行したあと追加されたファイルに実施というロジックだとどのように実装するのがリーズナブルでしょうか?
338 :デフォルトの名無しさん :2023/06/29(木) 23:31:28.60 ID:xErdDB4N.net ぜんぜんわからん まず質問をリーズナブルに書け
339 :デフォルトの名無しさん :2023/06/29(木) 23:50:20.15 ID:v2Nfxu0l.net >>337 プログラムを実行したファイルを削除する。
340 :デフォルトの名無しさん :2023/06/29(木) 23:59:37.76 ID:2AoYQptZ.net >>339 実行エラーした場合の対応が複雑になりそうで
341 :デフォルトの名無しさん :2023/06/29(木) 23:59:54.09 ID:8Orz0VrB.net >>337 月のはじめに自分で削除
342 :デフォルトの名無しさん :2023/06/30(金) 00:04:29.96 ID:0Iq5JqfB.net >>341 1時間間隔なので
343 :デフォルトの名無しさん :2023/06/30(金) 00:26:27.50 ID:5iDE7+iq.net >>340 なんで?
344 :デフォルトの名無しさん :2023/06/30(金) 00:35:49.00 ID:ow+yGKXV.net ファイルの総数によってもコードが変わってくるからいくつくらいのファイルを触りたいのか教えてくれ
345 :デフォルトの名無しさん :2023/06/30(金) 07:06:37.99 ID:y1MImIiE.net 誰かが勝手にタイムスタンプをいじったりしないって前提だけど 前回の最新タイムスタンプか、そのファイル名自体をどこかに保存しておいて それより新しいファイルだったら処理
346 :デフォルトの名無しさん :2023/06/30(金) 09:08:51.37 ID:pv7EwXK7.net 「追加されたファイル」ってなあに? 余所にあった古いファイルをコピーしたら 更新日時は古いままだけど
347 :デフォルトの名無しさん :2023/06/30(金) 10:28:33.45 ID:u+TfOZmJ.net 実行済のファイルは別フォルダに移動が楽だろ
348 :デフォルトの名無しさん :2023/06/30(金) 12:14:39.24 ID:0Iq5JqfB.net >>347 ですよね。 このフォルダのファイルからデータ取ってる人もいて 調整が必要で
349 :デフォルトの名無しさん :2023/06/30(金) 14:03:26.68 ID:pv7EwXK7.net 処理後にarchive属性をオフにしたら?
350 :デフォルトの名無しさん :2023/06/30(金) 15:56:39.55 ID:YeFfrwhl.net 現れたなら聞かれた質問にくらい答えろよ
351 :デフォルトの名無しさん :2023/07/01(土) 00:26:35.37 ID:xI+Y6sFQ.net >>348 後だし情報
352 :デフォルトの名無しさん :2023/07/01(土) 05:09:14.98 ID:nMEzWNF9.net タイムスタンプを記録しておく 初回は1970年以後で、年月日時分秒_1 以前のファイルを処理する。 次回は年月日時分秒_1 以後で、年月日時分秒_2 以前のファイルを処理する
353 :デフォルトの名無しさん :2023/07/01(土) 09:52:48.59 ID:UDkRE5jB.net 追加ファイルの性質でアトリブートもタイムスタンプも使えるかどうかわからん 質問してる人がいるが回答が無いので
354 :デフォルトの名無しさん :2023/07/04(火) 17:06:41.56 ID:LIey+Zab.net 作ってみました。行数ギリギリです。
355 :デフォルトの名無しさん :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% に更新日時を追記しました )
356 :デフォルトの名無しさん :2023/07/04(火) 17:38:18.81 ID:LIey+Zab.net ファイルのタイムスタンプが前回更新日時より後かどうかのみ見ています。 もしも、分まで同じであれば更新しません。 前回更新日時と現在日時が分まで同じなら、1分進むまで待ちます。 なんとなく、同じ日時が更新記録に残るというのが気持ち悪いからです。
357 :デフォルトの名無しさん :2023/07/04(火) 20:16:07.96 ID:dJR+6uCy.net お疲れ
358 :デフォルトの名無しさん :2023/07/04(火) 21:21:28.53 ID:+24T6cXg.net ファイルの取り扱いにもよるけど タイムスタンプでの管理はあまりよくないと思う 俺は結構ちょこちょこいじっちゃうのでタイムスタンプでは新旧の区別がつかなくなることが多い
359 :デフォルトの名無しさん :2023/07/04(火) 21:30:04.96 ID:+24T6cXg.net あとtmp,temp環境変数の書き換え とくにフォルダとして使ってるものをファイル名にするのは危険 cmdの世界ではtmpがダメだがtempも使わないほうが良い
360 :デフォルトの名無しさん :2023/07/04(火) 21:31:31.54 ID:9emtMuJF.net リーズナブルな実装とは何だったのか
361 :デフォルトの名無しさん :2023/07/04(火) 23:34:33.25 ID:LIey+Zab.net temp の件は setlocal を使っているとはいえ、確かにタブーみたいなので変更しました。 タイムスタンプの件は、後でいじったファイルに対して再度作業を実行するかどうかの問題ですね。 そこら辺は、質問者が条件を書いてないので不明ですが、私はいじったファイルについても再度実行 するんじゃないかなと思ったので(それに簡単なので)そうしました。 1度実行したファイルには2度と実行しないのなら、終わったファイルはリネーム(例えば頭に _ を付加) するとかして除外するか、終わったファイルリストを書き出してそれをチェックするとかですかね。 他のフォルダへ移動するのが最もいいと思うけど、なんだか都合が悪いみたいなので。
362 :デフォルトの名無しさん :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!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 更新ファイルはありません
363 :デフォルトの名無しさん :2023/07/05(水) 06:45:40.73 ID:Ig34wRo0.net time /t だと 06:00 なのに echo %time% だと 6:00:00.00 になる。 なんで、%time% だと頭の 0 がスペースになるんだよ。 おかげで余計なバグができちゃったじゃないか。 というわけで、バグ取りました。って誰も見てないか・・・。
364 :デフォルトの名無しさん :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 更新ファイルはありません
365 :デフォルトの名無しさん :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! 秒お待ちください
366 :デフォルトの名無しさん :2023/07/05(水) 12:59:13.87 ID:jlkBTxWV.net powershellで書いたら1~数行だね ふぅ
367 :デフォルトの名無しさん :2023/07/05(水) 13:43:04.59 ID:hRO8F47X.net 数行なら書いて差し上げたら もう見ていないかも知れないけど
368 :デフォルトの名無しさん :2023/07/05(水) 18:25:05.99 ID:4rZ7+jZr.net >>366 スレ違いとかいわないから後学のために記載して
369 :デフォルトの名無しさん :2023/07/05(水) 23:14:29.51 ID:TBtlNfRd.net バッチファイル不具合あるあるの日付またぎの対処が見当たらないな やり直し
370 :デフォルトの名無しさん :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% はい、アップデート完了!
371 :デフォルトの名無しさん :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%
372 :デフォルトの名無しさん :2023/07/06(木) 00:50:56.85 ID:X7484ET/.net まぁ、実際はその if 以下へたどりつくことは決してないだろうから、間違えていても同じかもな。
373 :デフォルトの名無しさん :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%
374 :デフォルトの名無しさん :2023/07/06(木) 07:56:07.79 ID:kQU1BcI/.net 考慮不要なレアケースではない。 例えば自ホストの時計がジョブスケジューラサーバ等の時計より少し遅れていると発生する。 「サンプルコードだから入れてない」なら分かる。
375 :デフォルトの名無しさん :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%
376 :デフォルトの名無しさん :2023/07/06(木) 11:06:32.28 ID:X7484ET/.net 対策なしの 1行だった時よりも、対策して行を分けたことで、現象の発生率は上がるだろう。 それでも、実際に現象を発生させて動作検証をするのは絶対に無理だな。 まぁ、これでいいんじゃね?ただ、さすがに 10回ビープ音を鳴らすのはやりすぎたかな?
377 :デフォルトの名無しさん :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
378 :デフォルトの名無しさん :2023/07/06(木) 18:41:00.40 ID:X7484ET/.net それだと初回実行時より前のタイムスタンプのファイルは決して処理されないじゃん。 てか、コードページを変えたら戻しとけ。
379 :デフォルトの名無しさん :2023/07/06(木) 18:47:20.96 ID:X7484ET/.net いや、それより、一番の問題はファイルを処理したらそのファイルのタイムスタンプ変わるから、 毎回同じファイルを処理してしまうんじゃね?これはひどい。
380 :デフォルトの名無しさん :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 これ、バッチ処理中に追加ファイルあると不味いな
381 :デフォルトの名無しさん :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 に渡すファイル名関係か何か?
382 :デフォルトの名無しさん :2023/07/06(木) 22:32:33.96 ID:gWNyo9yQ.net 最近はファイル名にユニコード文字を使うことも多いからなあ
383 :デフォルトの名無しさん :2023/07/06(木) 22:54:45.39 ID:T1YQhEvz.net どうもありがとう。 コードページはコマンド出力に影響する。 932だとユニコード特有な文字は変数に正しく入らない。 for %%i in (*) だと問題ないけど日時ソートされないし。 コードページが変わると画面が一旦消えるのが厄介。 65001だとバッチファイルの文字コードに注意。
384 :デフォルトの名無しさん :2023/07/06(木) 23:08:10.36 ID:X7484ET/.net 高度なコードの解説ありがとう。 ファイル名には普通の半角文字しか使わないので知らなかった。 そういう場合については変えなくていいということかな?
385 :デフォルトの名無しさん :2023/07/06(木) 23:12:39.29 ID:T1YQhEvz.net コマンドのリダイレクトで化けない文字なら問題ないはず
386 :デフォルトの名無しさん :2023/07/07(金) 04:34:24.45 ID:KFogdpBJ.net おやじギャグ
387 :デフォルトの名無しさん :2023/07/07(金) 07:40:59.89 ID:T33gGQqj.net こうやって、自分自身と list.txt を除外しておけばよかったわ。 他にも除外したいファイルがあったらファイル名の前後に / つけて list.txt に書き足せばいい。 一応、こんな風に / で区切れば、1行に複数のファイル名が書けるよ。 あ、もちろん、ワイルドカードは使用できませんので念のため。 if not exist %t% echo /%~nx0/%t%/> %t%
388 :デフォルトの名無しさん :2023/07/07(金) 10:20:29.14 ID:tybFBPle.net 誰も使わんから大丈夫だよ
389 :デフォルトの名無しさん :2023/07/07(金) 10:41:17.49 ID:EBn5GntH.net 特殊だよね 普通なら処理済のサブフォルダでも作って移動させとくよ あと個人的に使うならattributeの属性でやるかもしれん
390 :デフォルトの名無しさん :2023/07/07(金) 11:39:17.55 ID:xjbAveHj.net 曖昧な質問にここまで労力をかけるのか
391 :デフォルトの名無しさん :2023/07/07(金) 13:22:29.08 ID:vTnbMP+F.net アホだなーって思いながら見てたが ファイルスタンプや日付関係はpowershellでやったら一瞬で終わるから検討しなよ
392 :デフォルトの名無しさん :2023/07/07(金) 14:01:04.13 ID:tybFBPle.net バッチファイルが糞すぎるだけでその程度なら別にvbs(wsh)でもいいけどな
393 :デフォルトの名無しさん :2023/07/07(金) 14:50:24.72 ID:T33gGQqj.net このスレへ書かれたわけだから、敢えてバッチファイル縛りのマゾプレイしてるけど、 何使ってもいいのなら、一番長く使ってきて慣れている C で書くよ。高速だし。
394 :デフォルトの名無しさん :2023/07/07(金) 18:37:24.24 ID:GxNDHmP5.net 俺はC++
395 :デフォルトの名無しさん :2023/07/07(金) 18:42:51.15 ID:KFogdpBJ.net >>393 確かにマゾにピッタリだよ、バッチ
396 :デフォルトの名無しさん :2023/07/07(金) 20:54:22.80 ID:62nZLiJF.net 昔はまともなコンパイラなんて何万円もしたからな バッチなんて使っているのはその世代だろ
397 :デフォルトの名無しさん :2023/07/08(土) 00:17:19.33 ID:7l9oEDc+.net オプションや設定で1回のバッチでは指定ソフトが1回しか起動しないようにってできないでしょうか
398 :デフォルトの名無しさん :2023/07/08(土) 01:48:11.75 ID:8phSh46w.net >>385 dir > con で ? 文字になるファイル名だろ
399 :デフォルトの名無しさん :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進数になるのを防ぐためだろう。
400 :デフォルトの名無しさん :2023/07/08(土) 10:18:28.62 ID:iRLmrC8y.net いまさら何をいってもcmdは変わらん。署名が変わるだけ ターミナルはwtが追加されたけど
401 :デフォルトの名無しさん :2023/07/08(土) 19:09:21.78 ID:wtJKE3gc.net >>396 Zortech C++ 1.0持ってたけど バッチはバッチ 使い分けてたよ
402 :デフォルトの名無しさん :2023/07/08(土) 19:10:18.13 ID:wtJKE3gc.net mifes起動するのにいちいちspawnとか そういうマゾプレーはしてなかった
403 :デフォルトの名無しさん :2023/07/09(日) 07:40:38.97 ID:oyETgJfu.net 自分が使っていたのは VZ Editor だったな。 バイトやってたところのシステムは CP/M (80) で WordMaster を使ってた。
404 :デフォルトの名無しさん :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% での戻り値はなさそうなので 実行した際に表示される画面等から 文字列検索かけて条件分岐みたいなことをできればいいなと思っています 別にバッチにこだわってることは無いのでもしほかに手っ取り早く実現できる方法等あったらアドバイスいただけると嬉しいです
405 :デフォルトの名無しさん :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 の場合はどうなるか知らない
406 :デフォルトの名無しさん :2023/07/24(月) 14:53:52.19 ID:NSMDQXn9.net もぉえぇよデブコン
407 :デフォルトの名無しさん :2023/07/24(月) 18:12:41.71 ID:BcRhQVe4.net 最初にデバイスマネージャを開くなら そこで指定した方が早いんじゃね なぜバッチ?
408 :デフォルトの名無しさん :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}"
409 :デフォルトの名無しさん :2023/07/24(月) 23:59:01.49 ID:wZUfbAlM.net 「楽」って書いたけど別に楽ではないな。 devcon入ってない場合に入れなくて済むくらいか。
410 :デフォルトの名無しさん :2023/07/25(火) 07:07:55.47 ID:xE3c+p8T.net >>409 pnputilもあるでよー
411 :デフォルトの名無しさん :2023/07/25(火) 14:01:51.30 ID:ES/uzWz0.net vbsで動くっぽいし、それが一番軽いかな バッチ 行解釈が遅い PS 起動が遅い
412 :デフォルトの名無しさん :2023/07/26(水) 01:41:27.08 ID:HHyO4+3x.net >>405 >>408 ありがとうございます
413 :デフォルトの名無しさん :2023/08/24(木) 17:51:23.10 ID:C9P8zR3M.net copyってコピー元ファイルがない時は標準出力にコピー先のフォルダがない場合は標準エラー出力にエラーメッセージ出るのか? 何のため…
414 :デフォルトの名無しさん :2023/08/24(木) 21:56:13.39 ID:W+JHQ2GG.net ここはコマンド七不思議を議論するスレじゃねえんだよハゲ
415 :デフォルトの名無しさん :2023/08/25(金) 00:42:24.04 ID:6hVx8Trp.net シェルスレでは七不思議も話題にできるのに
416 :デフォルトの名無しさん :2023/08/25(金) 01:13:18.62 ID:icN/kxtu.net ハゲじゃない人は何を議論したいのか教えて下さい
417 :デフォルトの名無しさん :2023/08/25(金) 12:27:27.06 ID:8hrP4A7s.net 場合分け出来るので、使う人にとって便利だから
418 :デフォルトの名無しさん :2023/08/25(金) 12:27:29.53 ID:8hrP4A7s.net 場合分け出来るので、使う人にとって便利だから
419 :デフォルトの名無しさん :2023/08/25(金) 13:01:08.75 ID:6hVx8Trp.net エラーはエラーなんだから標準エラー出力に出てくれないと困る
420 :デフォルトの名無しさん :2023/08/25(金) 13:11:39.69 ID:HBsggyAu.net バッチに書く場合は余計な出力はnulへリダイレクトするし エラー検出するならerrorlevelしか見ない 終わり
421 :デフォルトの名無しさん :2023/08/25(金) 14:15:11.86 ID:WAOpDjEy.net でもエラーでもERRORLEVELが0以外にならないコマンドもあるんだよね。 例えば掴まれてるファイルをdelコマンドで削除しようとした場合とか。
422 :デフォルトの名無しさん :2023/08/25(金) 15:30:23.51 ID:vih/yj+S.net 予期していないエラーはトラップ出来ない 当たり前の事
423 :デフォルトの名無しさん :2023/08/26(土) 14:15:52.99 ID:EQIr/PqP.net del してエラー出てなくて でもファイルはまだあるみたいな どうやったら消せるねん
424 :デフォルトの名無しさん :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で戻してるけど、なんか気持ち悪いので、設定で最初からならないようにってできないだろうか
425 :デフォルトの名無しさん :2023/09/01(金) 07:05:11.31 ID:HKoCoDlN.net ヘルプを見ると分かるように call はバッチを呼び出すコマンドなんだよ バッチ以外のコマンドを呼び出すとタイトルにゴミが残るんだよ
426 :デフォルトの名無しさん :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%"
427 :デフォルトの名無しさん :2023/09/01(金) 12:03:20.71 ID:haHsElfO.net 俺からしたら書くまでもないやを超えてる長さに見える
428 :デフォルトの名無しさん :2023/09/01(金) 14:00:21.38 ID:HKoCoDlN.net call を cmd /c にするといいのか
429 :デフォルトの名無しさん :2023/09/01(金) 14:16:49.32 ID:8Q6o7DlX.net cmd /k
430 :デフォルトの名無しさん :2023/09/19(火) 16:40:50.05 ID:w0AoFkn5.net 質問スレからこのスレを誘導してもらいました 誰かわかる方いたらお願いします https://i.imgur.com/rKbomtc.png 画像の様な物を作りたいです フォルダAとその下のa.b.cまではは既に作成されています 後から1.2.3の空フォルダ階層をまとめて追加したい状態です コマンドプロンプトやバッチ?で簡単に作ることはできませんか?
431 :デフォルトの名無しさん :2023/09/19(火) 17:51:31.66 ID:nN7HbMfx.net 単に1.2.3のテンプレフォルダ&ファイルを用意して 対象フォルダにコピーするだけに聞こえるけど コピー先となるフォルダが大量にあるから手動コピーが面倒とかそういう話?
432 :デフォルトの名無しさん :2023/09/19(火) 18:38:51.86 ID:/gzRoJ4w.net >>431 はい 言われた通りに手動でやっていたんですが 仰る通りabc…の量が実際にはzで終わらない数百レベルなのです
433 :デフォルトの名無しさん :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 ) 関係ないフォルダとか色々混ざってるなら 文字列でフィルタするなり事前にテキストで リスト作るなりした方がいいだろうけど。
434 :デフォルトの名無しさん :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 ) 関係ないフォルダとか色々混ざってるなら 文字列でフィルタするなり事前にテキストでリスト作っておくなり。
435 :デフォルトの名無しさん :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
436 :デフォルトの名無しさん :2023/09/19(火) 22:27:32.71 ID:gURMcAfl.net うおおおおおおお!!!! できましたありがとうございます! お二人のおかげです!
437 :デフォルトの名無しさん :2023/09/20(水) 00:13:50.00 ID:YkzHQ7up.net xcopy は知らない。 普通は、robocopy でしょ?
438 :デフォルトの名無しさん :2023/09/20(水) 02:10:11.18 ID:vY1uP1tv.net そんなのMS-DOSで使えないじゃん
439 :デフォルトの名無しさん :2023/09/20(水) 07:45:17.50 ID:2uRYZGK4.net それな
440 :デフォルトの名無しさん :2023/09/21(木) 07:02:31.48 ID:VtU3IO45.net 普通のwin10で utf8のファイルに fc を使うと派手に文字化けします 文字エンコードなどはどこで指定すればよいのでしょうか?
441 :デフォルトの名無しさん :2023/09/21(木) 16:42:57.64 ID:2fMT8T96.net chcp 932
442 :デフォルトの名無しさん :2023/10/03(火) 21:23:54.04 ID:Z09KwkqG.net 神様教えて下さい xcopy /D:[MM]/[DD]/[YY] で指定した日付以降のファイルをコピーできるけど x日前より新しいファイルのみコピーしたい時の方法はない?
443 :デフォルトの名無しさん :2023/10/04(水) 11:25:24.03 ID:Ru3hWGvF.net Robocopy の /MAXAGE
444 :デフォルトの名無しさん :2023/10/04(水) 12:20:07.48 ID:Wr02smam.net 5chなんでこんなに重いん?いつまでこの重いの続くん?
445 :デフォルトの名無しさん :2023/10/04(水) 12:29:43.90 ID:UHUx/6V1.net なんで俺に聞くの?
446 :デフォルトの名無しさん :2023/10/04(水) 13:11:28.12 ID:Wr02smam.net いや、お前には聞いてない
447 :デフォルトの名無しさん :2023/10/06(金) 09:10:25.11 ID:u9U/aciQ.net 5ch攻撃してる人が飽きるまで。
448 :デフォルトの名無しさん :2023/10/09(月) 15:26:51.31 ID:gPLHWilL.net 神様教えて下さい dir のオプションで/b /s 付けた時に フルパス名が辞書順になるオプションってどれ? /on /ogとかあるけど 思うようにならない
449 :デフォルトの名無しさん :2023/10/09(月) 17:55:27.25 ID:416rm9Ab.net /q
450 :デフォルトの名無しさん :2023/10/10(火) 11:13:06.14 ID:GmlcHfbX.net 「VBScript」は非推奨に、将来のWindowsリリースで削除 https://forest.watch.impress.co.jp/docs/news/1537619.html batファイルはどうなる?
451 :デフォルトの名無しさん :2023/10/10(火) 11:26:18.76 ID:cUy975D5.net >>450 糞過ぎる
452 :デフォルトの名無しさん :2023/10/10(火) 11:37:38.54 ID:l0kLdmnh.net JScriptというかWindowsScriptHostは生き残るのか?
453 :デフォルトの名無しさん :2023/10/10(火) 18:15:49.98 ID:dUGfQnTA.net なんで5chこんなに重いん?この重いのいつまで続くん?
454 :デフォルトの名無しさん :2023/10/11(水) 07:20:10.03 ID:x54NWWVS.net >>450 EdgeのIEモードが2029までだからそれまでは使えるという予想があったけど 機能の有効化で使えるならどうでもいいわ
455 :デフォルトの名無しさん :2023/10/11(水) 08:26:32.52 ID:mMAmsq6k.net ネットは心の鏡 お前の心が重いのだ
456 :デフォルトの名無しさん :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コマンドだけでは無理?
457 :デフォルトの名無しさん :2023/10/12(木) 15:02:33.47 ID:DS7FO2PL.net >>456 無理ではないがコマンドプロンプト開いて1行のコマンドで書くのはとても面倒だからバッチファイル書いたほうがいい
458 :デフォルトの名無しさん :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
459 :デフォルトの名無しさん :2023/10/13(金) 11:28:13.45 ID:eHigHg14.net >>458 '-join' 演算子に続けて値の式を指定する必要があります。 って警告が出ます
460 :デフォルトの名無しさん :2023/10/13(金) 17:19:46.92 ID:5yGgcXlN.net 「''」と「"」を見間違えてるのでは
461 :デフォルトの名無しさん :2023/10/29(日) 22:58:43.01 ID:4fxrkRUI.net 環境変数を;区切りで改行して出力したくて for /F "delims=;" %i in ("%PATH%") do echo %i としたのですが最初の一つしか出力されません 何がダメなんでしょうか...
462 :デフォルトの名無しさん :2023/10/30(月) 00:54:06.32 ID:S4fhwBsv.net ダブルクォーテーションで囲まれた"%PATH%"が1つの引数としてForに渡されて1つ目の区切り文字に達するまでを出力してるからそうなる 1つずつ取り出したいならダブルクォーテーションを消せば良いがそれだと半角スペースも区切り文字に判定されるから 簡単にやろうと思ったらまず半角スペースを別の文字に置換してからダブルクォーテーション無しで渡してその後半角スペースを元に戻すとかかな
463 :デフォルトの名無しさん :2023/10/30(月) 01:46:36.18 ID:dhg2pdyL.net "%PATH%"が一行なのでforループも1回しか繰り返さないってだけ
464 :デフォルトの名無しさん :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行の中で複数項目に分ける場合に使う 区切り記号でループさせることは不可能
465 :デフォルトの名無しさん :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
466 :デフォルトの名無しさん :2023/10/30(月) 06:58:07.09 ID:EuHHvGeq.net バッチと関係ないけどpath変数のフォルダ名に ;文字が入ってたらwindowsの動作はどうなるんだろう "で囲めばいいだけなのかな
467 :デフォルトの名無しさん :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!
468 :デフォルトの名無しさん :2023/10/30(月) 23:23:37.40 ID:oqTBGQIx.net 皆さんありがとうございます参考になりました。 気軽に使いたかったのでこんな感じで雑に実現しました @echo off for %%i in ("%PATH:;=";"%") do echo %%i pause 毎回環境変数ウィンドウ開くの面倒だからcliで見やすく確認できないかなーと気軽に始めたのですがbatスクリプト難しいですね 遅延展開とか初めて聞きましたw
469 :デフォルトの名無しさん :2023/10/31(火) 06:54:11.36 ID:9EMrUdB9.net 遅延にしたら!が変わる !があると^も変わる
470 :デフォルトの名無しさん :2023/10/31(火) 07:18:54.11 ID:1/1CCAX6.net バッチは不毛すぎる 使うのは最小限に留めろ
471 :デフォルトの名無しさん :2023/10/31(火) 07:44:42.03 ID:/7M4GG46.net 頑張りすぎると無毛になる
472 :デフォルトの名無しさん :2023/10/31(火) 08:59:44.07 ID:5Lja4y81.net おかえり
473 :デフォルトの名無しさん :2023/11/01(水) 10:36:13.57 ID:QIr7Aj5s.net バッチファイルは縛りプレイが好きな人にしか向かないよ
474 :デフォルトの名無しさん :2023/11/12(日) 10:36:55.29 ID:8jJHTm3/.net batファイルの処理が終わったらスマホに何らかの通知を送りたいんですが何かいい方法は無いですか?
475 :デフォルトの名無しさん :2023/11/12(日) 13:00:47.64 ID:9doZQWI1.net SMS送信するWebAPI実行
476 :デフォルトの名無しさん :2023/11/12(日) 18:58:13.28 ID:aZ7/2ZLa.net NET SEND
477 :デフォルトの名無しさん :2023/11/19(日) 15:27:06.49 ID:tEMsHOKq.net >>475 >>476 どちらも難しそうだったのでPowerShellでGmailを送るやり方にしました
478 :デフォルトの名無しさん :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に固定されてしまい、 判定を上手く行うことが出来ずにいます 稚拙な質問でお恥ずかしいのですがどのように修正すれば良いでしょうか
479 :デフォルトの名無しさん :2023/12/11(月) 21:12:00.54 ID:WKo0W+M9.net >>478 お前がなぜレスを貰えないのかchatgptに聞いてこい
480 :デフォルトの名無しさん :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の指定ないけどそれは問題ない?
481 :デフォルトの名無しさん :2023/12/11(月) 22:30:44.45 ID:TXSKL9RJ.net for文を初めて使ったものでスレ汚し紛いな質問で申し訳ないです setlocal enabledelayedexpansionを利用して手直しし、 希望通りの結果を出力できました。ありがとうございました
482 :デフォルトの名無しさん :2023/12/12(火) 18:16:58.21 ID:e+gu1Rew.net こんな感じでperl起動するとして、このときwindows terminal(設定によってはコマンドプロンプト)の新しいウィンドウが開かれてperlのコードが実行されますが、既に開いているwindows terminal内で新しいタブを開いて実行できないでしょうか? perl "aaa.txt" exit /B
483 :デフォルトの名無しさん :2023/12/12(火) 18:55:34.45 ID:e+gu1Rew.net 書き忘れました バッチファイルの実行はコマンドプロンプト内ではなく、バッチファイルのアイコンをダブルクリック(おそらくエクスプローラーで実行)することを前提にしてます
484 :デフォルトの名無しさん :2023/12/12(火) 20:27:32.49 ID:I4UWTUvH.net >>482 11のターミナルのタブはバグなのか仕様なのか誰も判らんから答えようがないよ どうして11みたいな糞を恥ずかしげもなくリリースしたのかMSに聞いてこいよ
485 :デフォルトの名無しさん :2023/12/17(日) 11:53:39.09 ID:zJzmsCBl.net >>482 batではなくショートカット作って プロパティのリンク先をwt perl "スクリプトのフルパス" 作業フォルダーをスクリプトのあるフォルダ でよくない?
486 :デフォルトの名無しさん :2024/01/18(木) 19:51:19.47 ID:WajCwGEB.net シンプルに指定のフォルダ内へ存在する、特定のフォルダとファイルをバッチで一括削除する場合、そう記述すれば良いでしょうか C:\AAA\BBB\CCCの、CCCの中にある フォルダ1、フォルダ2、ファイル1、ファイル2、ファイル3・・・をまとめて削除したいのです バッチファイルでCCleaner v5.63の対象リストみたいな運用をしたく思っています
487 :デフォルトの名無しさん :2024/01/18(木) 20:05:52.37 ID:lPYOY/79.net >シンプルに シンプルかーよっしゃ! >指定のフォルダ内へ存在する、特定のフォルダとファイルを へはどっちに掛かるの? >バッチで一括削除する バッチスレやしな >場合、 うん… >そう記述すれば良いでしょうか そうやな、 まずChatGPTにその質問内容が人間に判る文章になってるか添削してもらいな
488 :デフォルトの名無しさん :2024/01/18(木) 21:24:27.19 ID:fl7npJfZ.net 消したいファイルやフォルダを列挙するのが一番シンプル フォルダ内を全部消したいのなら rmdir /s /q ただし指定したフォルダも消えるので再度作る必要はある
489 :デフォルトの名無しさん :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 的な箇条書きで良かったりしますか?
490 :デフォルトの名無しさん :2024/01/18(木) 21:54:35.77 ID:WajCwGEB.net これまでよく運用してきたアットリブやサービスなどは、例を挙げると attrib +s +h C:\Users\xxxxxx\ntuser.dat のたった一行で完結していました ファイルディレクトリの削除も、特別な条件を付与しない場合は上記と似たようなものでしたかね
491 :デフォルトの名無しさん :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
492 :デフォルトの名無しさん :2024/01/19(金) 05:19:53.22 ID:bHDC7nyS.net >>491 望むバッチが作れました 有難うございました
493 :デフォルトの名無しさん :2024/01/19(金) 06:08:19.50 ID:xbWxkRsK.net >>491 フォルダ1とフォルダ2を一つの命令で消すことは出来ないのでは?
494 :デフォルトの名無しさん :2024/01/23(火) 21:55:09.85 ID:ke6XWARZ.net バッチファイルから VS Code を起動しようと start で start ”C:\apps\VSCode\Code.exe” のようにすると、Code.exe の終了待ちになってしまいます 実行後は普通の exe のようにプロンプトに戻ってきて欲しいのですが、 バッチファイルでどうにかできるものでしょうか?
495 :デフォルトの名無しさん :2024/01/23(火) 23:07:46.88 ID:fGdUtoWj.net >>494 bin\code.cmdから起動するか set ELECTRON_NO_ATTACH_CONSOLE=true すればすぐ戻る
496 :デフォルトの名無しさん :2024/01/23(火) 23:27:45.51 ID:ke6XWARZ.net >>495 ありがとうございました 期待通りの動作になりました 微妙に訂正 >494 は start ”” ”C:\apps\VSCode\Code.exe” と書くべきでした
497 :デフォルトの名無しさん :2024/02/02(金) 14:12:59.14 ID:/quSrI1G.net バッチでディレクトリの中身のファイルを別のディレクトリにコピーしたい 大量にあるから更新時刻の新しいのだけコピーしたい robocopy以外のコマンドで可能?
498 :デフォルトの名無しさん :2024/02/02(金) 19:39:01.90 ID:wG6y7v1N.net xcopy /d では対応できない案件? 他には forfiles を組み合わせるとかあるけど、そもそも robocopy を避ける理由が 分からないと勧めづらい
499 :デフォルトの名無しさん :2024/02/02(金) 19:55:07.14 ID:SlEtxLWX.net バッチで時刻見ながら1個1個コピーとか…可能
500 :デフォルトの名無しさん :2024/02/02(金) 20:29:32.82 ID:/quSrI1G.net >>498 感謝 robocopyとcopyしか考えてなかった robocopyはオプション間違えると消えるのが恐くて
501 :デフォルトの名無しさん :2024/02/02(金) 23:09:26.35 ID:oSMWA/4/.net こういうの使った方が早いかもよ ttps://schinagl.priv.at/nt/ln/ln.html
502 :デフォルトの名無しさん :2024/02/03(土) 11:35:25.52 ID:OZed/uKu.net NASやファイルサーバの機能の重複除去を有効にすると文字通り重複してるファイルは勝手にファイルシステム内で統合されるから気にする必要事なくなるよ
503 :デフォルトの名無しさん :2024/02/16(金) 14:00:04.95 ID:xcbCRr3h.net >>480 %errorlevel% という環境変数モドキのないdosでも使える if not errorlevel 1 が正解
504 :デフォルトの名無しさん :2024/02/16(金) 15:31:25.08 ID:Pal4p53G.net フォルダがいくつかあって フォルダの名前が年月日で 「あれYYYYMMDD」形式になています 最新の日付フォルダの中身の特定のファイルだけを 別フォルダにコピーする バッチファイル可能ですか?
505 :デフォルトの名無しさん :2024/02/16(金) 16:31:32.99 ID:1D5G9s1W.net >>503 cmd /c exit -1 if not errorlevel 1 echo OK
506 :デフォルトの名無しさん :2024/02/16(金) 16:34:14.65 ID:1D5G9s1W.net 途中で間違って書き込んじゃった。 戻り値が負数の場合に注意が必要。
507 :デフォルトの名無しさん :2024/03/15(金) 00:37:59.57 ID:exMGzLtn.net 住人いるのか?
508 :デフォルトの名無しさん :2024/03/15(金) 21:32:34.28 ID:cEgPx2Y0.net いないよ
509 :デフォルトの名無しさん :2024/03/15(金) 21:48:31.82 ID:8BVQzeBd.net >504 誰か教えて
510 :デフォルトの名無しさん :2024/03/15(金) 21:54:53.76 ID:nVSr20GQ.net >>509 まずフォルダ名からYYYYMMDDの部分を抜き出して フォルダをしらみつぶしに大小比較していく 一番大きい数値のフォルダはこれで特定できる その中身の特定のファイルはどういった特定なのかで実現できるかどうか分かれる
511 :デフォルトの名無しさん :2024/03/15(金) 21:59:21.24 ID:8BVQzeBd.net >>510 特定のファイルとは 特定のファイル名です 全てのフォルダに同じファイル名のファイルが入ってる
512 :デフォルトの名無しさん :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
513 :デフォルトの名無しさん :2024/03/16(土) 08:55:44.79 ID:PUBVa+tA.net FOR /F %%i IN ('dir /b /o-n あれ*') DO ( copy "%%i\特定のファイル" "別フォルダ" & goto :eof)
514 :デフォルトの名無しさん :2024/03/16(土) 09:42:46.12 ID:yhWVSGDf.net for /d %%i in (あれ*) do set フォルダ=%%i copy "%フォルダ%\特定のファイル" "別フォルダ"
515 :デフォルトの名無しさん :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 よろしくお願いいたします
516 :sage :2024/04/09(火) 14:00:57.75 ID:Ugima7Hm.net >>515 /lじゃなくて/quitはどう?
517 :デフォルトの名無しさん :2024/04/09(火) 14:46:09.52 ID:A/PWQBtx.net HELP ATTRIB
518 :デフォルトの名無しさん :2024/04/09(火) 20:18:46.54 ID:ad5KI3J5.net 削除予定なら削除してからコピーを実行したら表示されないんじゃね
519 :デフォルトの名無しさん :2024/04/09(火) 21:46:07.89 ID:yR8KPsJp.net /XF ファイル.txt
520 :デフォルトの名無しさん :2024/04/10(水) 19:52:48.51 ID:sNhBgYIO.net >>516-519 ありがとうございます >>516 さんの /quit で意図する動作ができました! >>517 さんの事前削除もいいですね https://i.imgur.com/iDD0vYw.png ありがとうございました
521 :デフォルトの名無しさん :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の問題?
522 :デフォルトの名無しさん :2024/04/24(水) 12:53:51.62 ID:cg/GbNoZ.net >>521 WMICはパイプを使うと改行がCR CR LFとなって、%%A に正しく設定できていないのでだめっぽい。 SETするとCRが削除されてうまくいくようです。 というわけで、いったんリダイレクトしてファイルにするとよいでしょう。 ^| find "=" ↓ ^>T ^&^& find "=" T
523 :デフォルトの名無しさん :2024/04/24(水) 19:27:30.39 ID:zTq4mcuG.net 前にquery userってコマンドの出力を変数に入れたかったんだけど 出力に文字'>'が入っててうまく取り込めなくてその時は結局vbsだかで取り込んだ バッチだけでやる方法ってあったのかな
524 :デフォルトの名無しさん :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だと情報だけを表示するオプションがあるのに。
525 :デフォルトの名無しさん :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 でよかったんだ。
526 :デフォルトの名無しさん :2024/04/28(日) 21:55:14.93 ID:zlR73q8o.net スレ立てあらしスクリプト対抗age
157 KB
新着レスの表示
掲示板に戻る
全部
前100
次100
最新50
read.cgi ver 2014.07.20.01.SC 2014/07/20 D ★
本文 スレッドタイトル 投稿者