1 名前:デフォルトの名無しさん mailto:sage [2020/08/15(土) 07:00:26 ID:f3kW5kCx.net] 拡張子が .cmd または .bat のバッチファイルのスクリプティング(プログラミング)に関わる 質問,テクニック(JScript,Perl等の埋め込みなど含む),関連情報のためのスレです ※何でも無理矢理バッチでやろうとせず、WSH等の使用も検討しましょう 過去スレ %13 mevius.2ch.net/test/read.cgi/tech/1542779527/ %12 mevius.2ch.net/test/read.cgi/tech/1489207631/ %11 echo.2ch.net/test/read.cgi/tech/1424858999/ %10 peace.2ch.net/test/read.cgi/tech/1374205515/ %9 toro.2ch.net/test/read.cgi/tech/1335015478/ %8 toro.2ch.net/test/read.cgi/tech/1315844420/ %7 hibari.2ch.net/test/read.cgi/tech/1298873550/ %6 hibari.2ch.net/test/read.cgi/tech/1277465356/ %5 pc12.2ch.net/test/read.cgi/tech/1242268171/ %4 pc12.2ch.net/test/read.cgi/tech/1229955189/ %3 pc11.2ch.net/test/read.cgi/tech/1217860043/ %2 pc11.2ch.net/test/read.cgi/tech/1197881068/ 【.cmd】 バッチファイルスクリプト %1 【.bat】 pc11.2ch.net/test/read.cgi/tech/1178281991/ バッチファイルプログラミング 3.bat pc11.2ch.net/test/read.cgi/tech/1148485555/ バッチファイルプログラミング 2.bat pc8.2ch.net/test/read.cgi/tech/1104911889/ バッチファイルプログラミング質問スレ pc5.2ch.net/test/read.cgi/tech/1040614686/
474 名前:デフォルトの名無しさん mailto:sage [2021/10/31(日) 16:59:09.50 ID:VJFi2hrE.net] >>466 管理者権限ではダメだね 起動しないのでバッチを弄っても意味がない べつに & が無くても半角空白だけでもダメ pauseだけのバッチでも起動しない
475 名前:デフォルトの名無しさん mailto:sage [2021/11/01(月) 06:54:23.99 ID:jadZUHdf.net] 引数を取得してからショートカットにまわせばいいんじゃね start kanri.lnk 引数
476 名前:デフォルトの名無しさん mailto:sage [2021/11/01(月) 08:07:56.06 ID:jadZUHdf.net] だめやな 引数に"が一個でもあるとこけるわw
477 名前:デフォルトの名無しさん mailto:sage [2021/11/01(月) 08:27:08.38 ID:jadZUHdf.net] 変数もあかんしファイルで渡すしかなさそうやな
478 名前:デフォルトの名無しさん mailto:sage [2021/11/01(月) 12:50:11.96 ID:QjI9xm4a.net] 自分が使うバッチにファイル群なら運用回避で何とでもなるんだけど 会社の共有フォルダとかだとなんて皆使えるように使うしどうしてもな。 まあどうしようも無ければ最後はルール化して 半角全角空白記号周りのファイル名をリネームするツール回すのみだな。
479 名前:デフォルトの名無しさん mailto:sage [2021/11/02(火) 11:39:54.98 ID:cNrRrDlB.net] >>468 ファイル名じゃなくても&付きのURLってたまに処理対象になるし
480 名前:デフォルトの名無しさん mailto:sage [2021/11/03(水) 10:25:06.03 ID:/m7gndnZ.net] >>466 1.バッチのショートカットを作成 2.「管理者として実行」に設定 3.リンク先の先頭にcmd /c を追加する 適用したらcmdはフルパスに変換される これで動作するはず 管理者権限が不要ならcmd /c も不要 というかバッチに直接D&D,sendtoでもOK
481 名前:デフォルトの名無しさん mailto:sage [2021/11/03(水) 12:58:10.31 ID:/m7gndnZ.net] >>474 は一般的な話だが >>465 の場合の管理者権限ショートカットは リンク先はバッチファイル名を引用符で囲む必要あり cmd /c c:"\hoge.bat" 最初の引用符の位置に注意 バッチの中で t" を参照してるので消えないようにするため
482 名前:デフォルトの名無しさん mailto:sage [2021/11/03(水) 20:10:42.41 ID:/m7gndnZ.net] >>474-475 こんな面倒なことする必要ないわ バッチのフルパスに半角スペースがあればいいのか 管理者権限にするだけだな
483 名前:デフォルトの名無しさん mailto:sage [2021/11/03(水) 20:29:31.22 ID:/m7gndnZ.net] フルパスじゃないな バッチファイル名に半角スペースか よくわからん
484 名前:デフォルトの名無しさん mailto:sage [2021/11/06(土) 21:15:51.20 ID:INMdaaG1.net] set j=.body.playback for /f "usebackq" %%a in (`curl %h%^|jq -r %j%.video_link[-1].url`)do set m=%%a for /f "usebackq" %%a in (`curl %h%^|jq -r %j%.title`)do set t=%%a 2回もJSONに参照するのが嫌だから、1回で格納したいんだけどforを1回で回して2つ格納って出来ます?
485 名前:デフォルトの名無しさん mailto:sage [2021/11/07(日) 00:37:39.03 ID:U3IH/L/8.net] >>478 ちょっとjqを調べてみたら、いくつか使える候補が見つかった batで使いやすいのは結果が1行で出力されるもの \(),join(""),@csv for文で、\()とjoinは任意の区切り記号、csvは区切り記号として[,]の3つを指定する また複数行の出力場合は擬似配列変数に代入するとかでできる 【例】 長いので、入力が{"a":{"b":"foo","c":"bar","d":"baz"}}とした場合 (※.a.bは.a|.bでも良い) 1) \() for /f "usebackq tokens=1-2 delims=," %%i in (`curl 〜^|jq -r ".a|""\(.b),\(.d)"""`) do ( set m=%%i set t=%%j ) 2) join("") for /f "usebackq tokens=1-2 delims=," %%i in (`curl 〜^|jq -r "[.a.b,.a.d]|join("""","""")"`) do ( 3) ,での出力 setlocal EnableDelayedExpansion set n=0 for /f "usebackq tokens=*" %%i in (`curl〜^|jq -r ".a.b,.a.d"`) do ( set d!n!=%%i set /a n+=1 ) echo;%d0% echo;%d1% endlocal
486 名前:デフォルトの名無しさん mailto:sage [2021/11/07(日) 01:01:53.46 ID:U3IH/L/8.net] 4) @csv for /f "usebackq tokens=1-2 delims=," %%i in (`type test.json^|jq -r ".a|[.b,.d]|@csv"`) do ( set m=%%~i set t=%%~j ) あ、-cというのも見つけた 5) -cで配列を出力 for /f "usebackq tokens=1-2 delims=[,]" %%i in (`type test.json^|jq -c ".a|[.b,.d]"`) do ( set m=%%~i set t=%%~j )
487 名前:デフォルトの名無しさん mailto:sage [2021/11/07(日) 01:58:35.64 ID:DID0sM5T.net] for /f "tokens=1-2 delims=," %%a in ('curl %h%^|jq %j%.video_link[-1].url,%j%.title') do set "m=%%~a"&set t=%%~b みたいな感じで jqの方よく分かって無いけど、カンマ区切りで両方の要素フィルタリングしてforでトークンとカンマをデリミタ指定してやれば行けそう だけど要素にカンマが含まれてたら失敗するかも 次案 for /f "delims=" %%a in ('curl %h%') do ( for /f "usebackq" %%b in (`echo %%a^|jq -r %j%.video_link[-1].url`)do set m=%%b for /f "usebackq" %%c in (`echo %%a^|jq -r %j%.title`)do set t=%%c )
488 名前:デフォルトの名無しさん mailto:sage [2021/11/08(月) 16:25:54.29 ID:Px/K8tF9.net] moveで移動するときに 指定したフォルダがないときに自動で作るとかできんの?
489 名前:デフォルトの名無しさん mailto:sage [2021/11/08(月) 17:08:44.21 ID:Wv1BXJs6.net] 存在しないとリネーム 存在するとその下に移動 結果が全く違う エラーも出ない 確認もない たちの悪い仕様
490 名前:デフォルトの名無しさん mailto:sage [2021/11/08(月) 21:36:39.36 ID:Ev0WzRyD.net] >>479-481 ううーむ、どっちもダメだった うまい方法は無いかー
491 名前:デフォルトの名無しさん mailto:sage [2021/11/08(月) 22:36:27.76 ID:z+jTzavH.net] >>484 どういうふうにダメなの カンマが文字列に入ってたのなら区切り文字列を別の使われてないものにすればいけると思うけど また3)でもいけるはずだが
492 名前:デフォルトの名無しさん mailto:sage [2021/11/08(月) 22:40:00.92 ID:z+jTzavH.net] ただ、常にダブルクォーテションで括ってやって、外さないように制御したほうがいいよ urlによく付いてくるクエリーとかだとパラメータを&で区切って書くので ""を外すと何かとやりにくいはず
493 名前:デフォルトの名無しさん mailto:sage [2021/11/08(月) 22:55:02.48 ID:hhTd8ytG.net] うまいも何も恐らくjqコマンドの書き方の問題でしょ
494 名前:デフォルトの名無しさん mailto:sage [2021/11/08(月) 22:59:09.33 ID:Ev0WzRyD.net] すまぬ、「またまたー」と思いながらやり直したら普通に動きましたw 一応、>>479-480 の例1と5で試したらしっかり動きましたw
495 名前:デフォルトの名無しさん mailto:sage [2021/11/09(火) 00:35:07.87 ID:QL8KoTXD.net] >>488 5)は区切り文字が3つもあって、どれかがurlのクエリーに使われるかもしれない またtokens=1-2はtokens=1*にすれば2つ目(.title)にはカンマがあっても大丈夫になる で、一番いいと思うものが区切り文字としてTABを使うもの (まず、urlやtitleにTABコードは使わないだろう) 6) @tsv for /f "delims=N" %%I in ('cmd /u /c echo 三') do set TAB=%%I for /f "usebackq tokens=1* delims=%TAB%" %%i in (`type test.json^|jq -r ".a|[.b,.d]|@tsv"`) do ( set x="%%i" set y="%%j" )
496 名前:デフォルトの名無しさん mailto:sage [2021/11/09(火) 19:41:28.06 ID:5mYjFh+F.net] バッチファイルでコマンドプロンプトを起動して C:\>hoge というふうに「hoge」が入力された状態にしたいんですけどどうすればいいでしょうか cmd /k の後がわかりません・・
497 名前:デフォルトの名無しさん mailto:sage [2021/11/09(火) 20:43:47.12 ID:pDzmJqw9.net] @cmd.exe /k "prompt C:\$Ghoge" 「入力された状態」はahkとか使わないと無理じゃないかな
498 名前:デフォルトの名無しさん mailto:sage [2021/11/10(水) 01:27:11.48 ID:f
] [ここ壊れてます]
499 名前:aifycsG.net mailto: 定型入力を省略したいってだけなら別の方法があるけど rem hogeの後に続く文字列を入力させる set /p REMAIN_STR="hoge" rem hogeと結合する set COMPLETE_STR=hoge%REMAIN_STR% rem 完全な文字列を表示する echo %COMPLETE_STR% [] [ここ壊れてます]
500 名前:デフォルトの名無しさん mailto:sage [2021/11/10(水) 02:45:03.95 ID:lbp+J88v.net] hoge はコマンドで、途中まで入力された状態にしたいとく汲み取れるんだが
501 名前:デフォルトの名無しさん mailto:sage [2021/11/10(水) 02:56:31.36 ID:eLi1lwzp.net] コマンドの入力が面倒ってだけなら doskeyで適当なエイリアスを設定するだけでも十分な気が
502 名前:デフォルトの名無しさん mailto:sage [2021/11/10(水) 07:20:19.97 ID:v4FfRZjw.net] あるデバイスが抜いてさし直さないと読み込めません コマンドプロンプトで刺してある状態を解除して読み込め直すことは出来ないですか?
503 名前:デフォルトの名無しさん mailto:sage [2021/11/10(水) 07:40:32.85 ID:ZzX9Joeo.net] devconでできない?
504 名前:デフォルトの名無しさん [2021/11/20(土) 17:53:21.19 ID:KiGzNUkt.net] 質問です。 やりたいことは 「エクスプローラーで選択したフォルダをショートカットキーを使って指定したフォルダに移動」 です。 BATファイルがショートカットキーで使えるようなので これをなんとか使えないか調べたのですがわかりませんでした。 私のやりたいことは可能でしょうか?
505 名前:デフォルトの名無しさん [2021/11/20(土) 21:04:55.50 ID:mzO+cRkE.net] >>497 >BATファイルがショートカットキーで使えるようなので そこの情報源に当たればいいじゃん
506 名前:デフォルトの名無しさん mailto:sage [2021/11/20(土) 23:01:39.27 ID:785tmrzC.net] バッチ(コマンド)だけでは無理 VBか何かで「エクスプローラーで選択」のアイテムのパスを取得出来れば可能 この辺で聞いてみたら? VB.NET質問スレ(Part44) mevius.2ch.net/test/read.cgi/tech/1527325729/ 【VBScript】WSHについて話し合うスレ【JScript】 mevius.2ch.net/test/read.cgi/tech/1578522041/ 素直に選択して右クリで「送る」するならバッチでも出来る、がCtrl+X,Ctrl+Vと手間は大して変わらん どうしてもショートカットキーワンアクションでってならエクスプローラー諦めてそれが出来そうなファイラー探す方が早い
507 名前:デフォルトの名無しさん mailto:sage [2021/11/21(日) 14:03:31.46 ID:/SaMuAE1.net] OSに現在誰がログインしてるかSYSTEM権限のタスクのバッチから取得したいと考えてます。 ログイン中のユーザー自体はquery userコマンドで拾えることが判ったのですが、 他にもっと適当なコマンドがあったら教えてください。
508 名前:デフォルトの名無しさん mailto:sage [2021/11/21(日) 14:26:02.18 ID:/CZTlOFO.net] ナメすぎやろおまえ 知恵袋にでも逝けks
509 名前:デフォルトの名無しさん mailto:sage [2021/11/21(日) 16:35:41.72 ID:/hna8FyN.net] %USERNAME% ではだめなのか
510 名前:デフォルトの名無しさん mailto:sage [2021/11/21(日) 16:48:36.14 ID:h4R7LYQM.net] usernameってローカルログオンしてるユーザーだけじゃななかったっけな? system権限のbatっていうのが何なのか曖昧だけど アカウントユーザー名のSYSTEMのことだったらダメなんじゃないか?
511 名前:デフォルトの名無しさん mailto:sage [2021/11/21(日) 16:54:31.46 ID:h4R7LYQM.net] あと結果をecho表示させようとしてもSYSTEMからユーザーの画面に表示はされないので注意(ウィンドウが表示されない)
512 名前:デフォルトの名無しさん mailto:sage [2021/11/21(日) 16:57:22.70 ID:h4R7LYQM.net] 念のためechoだけじゃなくNotepad等アプリ起動してもユーザー画面には現れないということ
513 名前:デフォルトの名無しさん mailto:sage [2021/11/21(日) 17:20:15.98 ID:h4R7LYQM.net] スタンドアローンPC(普通の人の環境)で試してみた %username% → PC名$ query user → 誰かがログインしてれば、ログインしてるローカルユーザー1人のみ サーバーだとおそらくユーザー全員のリストが出るのかな?
514 名前:デフォルトの名無しさん mailto:sage [2021/11/21(日) 20:59:58.20 ID:q48e3mil.net] query userの何が気に入らないのかを教えてくれないと
515 名前:デフォルトの名無しさん mailto:sage [2021/11/22(月) 11:48:10.21 ID:HBTqNirT.net] >>506 普通の人の環境ではそもそも query コマンド自体が無かったりするが…
516 名前:デフォルトの名無しさん mailto:sage [2021/11/22(月) 19:01:18.96 ID:YF/SUs6n.net] whoamiコマンドの結果では、systemが表示される ダメってことだが一応報告まで
517 名前:デフォルトの名無しさん mailto:sage [2021/11/22(月) 19:11:59.58 ID:YF/SUs6n.net] さらにset userだとコンピュータ名になる
518 名前:デフォルトの名無しさん mailto:sage [2021/11/23(火) 08:52:09.04 ID:v39GCTAR.net] net session >nul 2>nul && goto super_user
519 名前:デフォルトの名無しさん mailto:sage [2021/11/23(火) 18:33:43.80 ID:tf0m1Q47.net] Driver Booster というアプリがあります。これを (バージョンに関わらず) バッチファイルから起動したいと思います。 このアプリは C:\Program Files (x86)\IObit\Driver Booster\(バージョン番号)\DriverBooster.exe が実行ファイルです。 この (バージョン番号) 部分によらず起動するために、実行ファイル DriverBooster.exe を検索して起動しようと 以下バッチファイルを書いてみましたが、肝心のファイル検索がうまく行きません。どうしたらよいでしょうか cd /d "C:\Program Files (x86)\IObit\Driver Booster" for /f "delims=: tokens=1" %%i in ('where /r "C:\Program Files (x86)\IObit\Driver Booster" DriverBooster.exe') do set p=%%i echo %p% <-- いずれ start "" /b "%p%" にする予定 pause
520 名前:デフォルトの名無しさん mailto:sage [2021/11/23(火) 19:09:58.73 ID:/gWgBLyu.net] pushd "C:\Program Files (x86)\IObit\Driver Booster" set p= for /f "delims=" %%a in ('dir /b /s DriverBooster.exe 2^>nul') do set "p=%%~a" if defined p (echo start "" /b "%p%" ) else ( echo File Not found. pause
521 名前:デフォルトの名無しさん mailto:sage [2021/11/23(火) 19:15:36.21 ID:/gWgBLyu.net] > ) else ( echo File Not found. ) else ( echo File Not found.) 閉じ括弧忘れ訂正
522 名前:デフォルトの名無しさん mailto:sage [2021/11/23(火) 19:37:34.23 ID:tf0m1Q47.net] できました! 大感謝です!
523 名前:デフォルトの名無しさん mailto:sage [2021/11/23(火) 22:15:56.97 ID:QElBq1+g.net] for /r "C:\Program Files (x86)\IObit\Driver Booster" %%a in (DriverBooster.exe*) do start "" /b "%%~a"
524 名前:デフォルトの名無しさん mailto:sage [2021/11/23(火) 23:38:49.10 ID:7Kq301Hb.net] そういや 音って鳴らせないの? 特定の処理を終了したら 終了音ならしたいんだけど
525 名前:デフォルトの名無しさん mailto:sage [2021/11/24(水) 00:22:26.48 ID:GYI09rKg.net] @echo off for /f "delims=N" %%i in ('cmd/u/c echo 万') do set bel=%%i echo %bel% pause
526 名前:デフォルトの名無しさん mailto:sage [2021/11/24(水) 02:02:20.45 ID:L2nveBoL.net] powershell -c (New-Object Media.SoundPlayer 'C:\WINDOWS\Media\Windows Logon.wav').playSync();
527 名前:デフォルトの名無しさん mailto:sage [2021/11/24(水) 04:56:50.03 ID:GYI09rKg.net] prompt $g^G ^G はIMEオンで 0007 + F5キー
528 名前:デフォルトの名無しさん mailto:sage [2021/11/24(水) 09:12:16.85 ID:rRXxy3T6.net] beep
529 名前:デフォルトの名無しさん mailto:sage [2021/11/24(水) 13:17:12.74 ID:xQvD3wWY.net] "C::\Windows\Media\tada.wav"
530 名前:デフォルトの名無しさん mailto:sage [2021/11/24(水) 13:18:06.25 ID:xQvD3wWY.net] typo "C:\Windows\Media\tada.wav"
531 名前:デフォルトの名無しさん [2021/11/24(水) 15:01:27.44 ID:uH6oNI9g.net] すみません、質問です。 call :hoge hogehoge.py :hoge python -B %1 robocopy foge del piyo exit /b は、 hogehoge.pyに:hoge を追加したものを実行しているという意味合いで合っていますでしょうか。 お手数おかけして恐縮ですが、教えていただければ幸いです。
532 名前:デフォルトの名無しさん mailto:sage [2021/11/24(水) 15:29:52.68 ID:L2nveBoL.net] call は ":hoge" というサブルーチンを "hogehoge.py" を引数として呼んでいる サブルーチン":hoge "は :hoge から exit /b まで 「python -B %1」の%1は :hoge の第1引数、つまり "hogehoge.py" ":hoge"サブルーチン内で 「 python -B hogehoge.py 」と実行している バッチ内に @echo off とあるのなら、@echo on と書き換えて実行すれば コマンド類がどういう順、変数展開されて実行されているか見えるようになる
533 名前:デフォルトの名無しさん [2021/11/24(水) 15:51:35.42 ID:uH6oNI9g.net] >>525 ご教授いただきありがとうございます。 とてもわかりやすく、助かりました!
534 名前:デフォルトの名無しさん mailto:sage [2021/11/24(水) 16:06:45.19 ID:xEc1Gd+0.net] call hoge hoge.batを呼び出す call hoge.batと書いたほうが間違いが少ない call :hoge 現在のbatファイル中のラベル:hogeを呼び出す (サブルーチンのような感じであり、呼び出すbatファイルを別に用意しなくても済む)
535 名前:デフォルトの名無しさん mailto:sage [2021/11/28(日) 21:32:31.71 ID:/OsOh/FW.net] explorerから.batをクリックした時 Windows Terminalで開く設定ってどうやるの? ショートカット作ってプロパティ設定すると 非レガシーコンソールの設定もあるけどウィンドウが透明になって^vできるだけという
536 名前:デフォルトの名無しさん mailto:sage [2021/11/29(月) 14:11:09.39 ID:lBCR2YeY.net] ショートカットを以下みたいにして出来ない? wt new-tab --title "CMD" cmd.exe /k \"フルパス\hoge.bat\"
537 名前:デフォルトの名無しさん [2021/12/01(水) 12:20:54.06 ID:+U/ofie/.net] 日付の計算ってvbsやパワーシェル呼び出すしかないの? ファイル名yyyymmの今月分がなかったら先月分をリネームコピーしたいだけなんだが
538 名前:デフォルトの名無しさん mailto:sage [2021/12/01(水) 12:52:49.40 ID:jrr/ct9i.net] SETLOCAL ENABLEDELAYEDEXPANSION SET TODAY=%DATE% SET YY=%TODAY:~0,4% SET MM=%TODAY:~5,2% IF "%MM%"=="01" ( SET /A YY=%YY%-1 SET LASTMM=!YY!12 ) ELSE ( SET /A MM=%MM%-1 SET MM=0!MM! SET LASTMM=%YY%!MM:~-2! ) ECHO %LASTMM%
539 名前:デフォルトの名無しさん mailto:sage [2021/12/01(水) 13:11:55.23 ID:eX2WGo0j.net] > 今月分がなかったら先月分をリネームコピーしたいだけ これにどう日付計算が必要なの?そもそも日付計算くらい自前で計算出来るでしょ 今月が1月の時だけ前年の12月にするくらいだね。ifで判別すればいいだけだから計算は1月の時に"年-1"するだけ 今月の取得 set Y=%date:~0,4% set M=%date:~5,2% Mは頭ゼロになる 12パターンしか無いんだから if "%M%"=="01" から "%M%"=="12" までずらっと並べちまえばいい バッチなんて頭悪い書き方(の方が|で)いいんだよ タスクスケジューラで定期実行させるのか都度月1でダブルクリックか 先月のファイルが無い場合は?遡って順次処理?ファイル名形式に合う最後のファイルを今月に? 日付計算が必要で数値としての今月はこんな感じで取得出来る for /f "tokens=1-3 delims=/" %%a in ("%date:~0,10%") do set /a "y=%%a, m=1%%b-100, d=1%%c-100" UNIXTIMEもワンライナーで行ける for /f "tokens=1-7 delims=/:. " %%a in ("%date:~0,10% %time: =0%") do set /a "y=%%a, m=1%%b-100, d=1%%c-100, h=1%%d-100, n=1%%e-100, s=1%%f-100, cs=1%%g, f=!(m/3), g=y-f, k=f*12+m-3, uTime=86400*(365*g+g/4-g/100+g/400+(306*k+4)/10+d-719469)+3600*h+60*n+s"
540 名前:デフォルトの名無しさん [2021/12/01(水) 13:16:52.77 ID:+U/ofie/.net] >>531 >>532 ありがとう 確かにバッチに時間かけるのもあれだな
541 名前:デフォルトの名無しさん mailto:sage [2021/12/01(水) 13:53:25.27 ID:eX2WGo0j.net] 先月 for /f "tokens=1-2 delims=/" %%a in ("%date:~0,7%") do set /a "m=1%%b-101, f=!m, y=%%a-f, m=m*!f+12*f" set m=0%m% set m=%m:~-2% echo %y%%m%
542 名前:デフォルトの名無しさん mailto:sage [2021/12/01(水) 14:32:14.49 ID:eX2WGo0j.net] set /a "m=101-101, f=!m, y=2022-f, m=m+12*f" でいい *!fはあっても問題無いけど余計だった
543 名前:デフォルトの名無しさん [2021/12/01(水) 14:33:15.12 ID:+U/ofie/.net] かなりシンプルになるな
544 名前:デフォルトの名無しさん mailto:sage [2021/12/01(水) 14:33:29.91 ID:eX2WGo0j.net] 訂正 set /a "m=1%%b-101, f=!m, y=%%a-f, m=m+12*f"
545 名前:デフォルトの名無しさん mailto:sage [2021/12/01(水) 19:30:16.15 ID:qmJDO3Rn.net] for /f "tokens=1-7 delims=/:." %%1 in ("%date%.%time: =0%") do set DateTime=%%1%%2%%3%%4%%5%%6%%7
546 名前:デフォルトの名無しさん mailto:sage [2021/12/02(木) 12:24:38.70 ID:xcTRUvQf.net] for /f "tokens=1-2 delims=/" %%a in ("%DATE:~0,7%") do set /a "m=1%%b-101, f=!m, m+=12*f, y=%%a-f" for /f "tokens=1-2 delims=/" %%a in ("%DATE:~0,7%") do set /a "m=1%%b-101, m+=12*(f=!m), y=%%a-f" for /f "tokens=1-2 delims=/" %%a in ("%DATE:~0,7%") do set /a "m+=12*(f=!(m=1%%b-101)), y=%%a-f" 少し直したけど綺麗だなこれ >>532 unixtimeも面白い 3月を頭にしてるんだな
547 名前:デフォルトの名無しさん mailto:sage [2021/12/02(木) 21:10:02.03 ID:NUCi8UEu.net] 0:00前後に実行するとおかしなことになるから%date%と%time%はかならず一時変数に入れるべき もっと言えば日付と時刻を同時に取れる手段を使うべき
548 名前:デフォルトの名無しさん mailto:sage [2021/12/02(木) 22:16:15.49 ID:sGas3Vn9.net] メモ フェアフィールドの公式
549 名前:デフォルトの名無しさん mailto:sage [2021/12/02(木) 22:37:42.24 ID:s/MRATw/.net] 割とクソゴミな式な 式の意味が分かり難くなるような式変形しちゃダメだわ 敢えてやってんだろうけどさ Wikipediaの解説とかも良く分かってないバカが書いたんだろうなと思う まあ導出のアプローチの仕方が悪いってだけだが
550 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 22:30:00.94 ID:Nf0n5MKs.net] 日付の質問です。 CSVの日付部分のセルのデータが壊れていて、5桁の整数になっています。 ググって調べてみたら、どうも1899/12/30が0のシリアル値のようです。 これをYYYY/MM/DDの文字列に変換したいんですが計算式がわかりません。 よろしくお願いします。
551 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 23:24:36.10 ID:vRpkCUu9.net] >>543 CDate( )
552 名前:デフォルトの名無しさん mailto:sage [2021/12/05(日) 00:20:38.02 ID:KxbO9WQf.net] >>543 エクセルあればセルの表示設定を変える
553 名前:デフォルトの名無しさん mailto:sage [2021/12/05(日) 06:43:24.27 ID:KxbO9WQf.net] >>543 変数 n を変換 set /a n+=693899,a=365,b=1461,c=36524,e=146097 set /a f=n/e,g=(n+1)/e-f,n-=f,n+=(n-g)/c,f=n/b,g=(n+1)/b-f,n-=f set /a n+=(n-g)/a*3+(n-61)/a+(n-122)/a+(n-214)/a+(n-275)/a-306 set /a y=n/372+1,m=n/31%%12+101,d=n%%31+101 set n=%y%/%m:~1%/%d:~1% 各定数は順に、 0/3/1〜1899/12/29の日数(全てグレゴリオ暦) 西暦1年から1,4,100,400年の日数 3〜4,3〜6,3〜9,3〜11,3〜12月の日数 31*12の日数
554 名前:デフォルトの名無しさん mailto:sage [2021/12/05(日) 09:15:29.34 ID:/JnG12pN.net] > 1899/12/30が0のシリアル値 まあ実質的にはそれでも間違いでは無いけど エクセルは一応 1900/01/01 が 1 でも 1900/02/29 が存在するバグ仕様のせいで 1900/03/01 以降 +1 になってしまい 1899/12/31 が 1 のような値になってしまう 1900/03/01 以降の値しか無いなら一律で構わないけれど全てに対応させるには以下の3種必要 ・1900/01/01 〜 1900/02/28 ・1900/02/29 ・1900/03/01 〜 2/29だけ例外で扱って残りは03/01〜の時、通日をフラグで-1する感じかな 0/3/1 を 0 とした値に直して %1 に与えたら以下の式で年月日を出せる set /a "R=(R4=(R1oo=(R4oo=%~1%%146097)%%36524)%%1461)%%365, Y4oo=%~1/146097, Y1oo=R4oo/36524, Y4=R1oo/1461, Y1=R4/365, L=(Y1oo|Y1)/4, R+=L*365, k=(R*5+2)/153, d=R+1-(306*k+4)/10, f=k/10, m=k+3-f*12, y=400*Y4oo+100*Y1oo+4*Y4+Y1-L+f" echo %y% / %m% / %d%
555 名前:デフォルトの名無しさん mailto:sage [2021/12/05(日) 09:29:31.66 ID:KxbO9WQf.net] シリアル値が60以下がどうとかいう話だよね 質問が5桁の整数とあるので無視したよ
556 名前:デフォルトの名無しさん mailto:sage [2021/12/05(日) 10:57:38.65 ID:rW6bYpGZ.net] もしかしてみずほの案件やってた人?
557 名前:デフォルトの名無しさん mailto:sage [2021/12/05(日) 11:31:10.50 ID:KxbO9WQf.net] そもそも60以下になるとソフトにより挙動が違う Excelとは限らない 出どころ確認が先決 スレチの話だけどね
558 名前:デフォルトの名無しさん mailto:sage [2021/12/05(日) 11:31:33.19 ID:4iCsIwjm.net] ワロwww
559 名前:デフォルトの名無しさん mailto:sage [2021/12/05(日) 11:39:17.80 ID:4iCsIwjm.net] わざわざ対応する必要なんて無いとは思うけど 定数の説明なんかよりも60以下で不正な値になるという注意書きの方が重要だわな みずほも言われたことしかやらない企業体質がどうの言われてるね こんな感じで小さなバグが内包しまくってるのかもなw
560 名前:デフォルトの名無しさん mailto:sage [2021/12/06(月) 16:06:42.92 ID:yBc7foB1.net] >>546 一旦閏日全部引いて、月が一律31日になるよう加算してるんだね 面白い (n-61)/a+(n-122)/a+(n-214)/a+(n-275)/a この式が4-11月の不足分を足してるんだろうけど なんでこの式で行けるのかイメージ出来ない
561 名前:デフォルトの名無しさん mailto:sage [2021/12/06(月) 19:19:45.42 ID:+EfoGYZX.net] >>546 バッチありがとうございます。動作確認しました。助かりました。 >>550 ソフトはLibreOfficeです。後出しですみません。 シリアル値は全て連続です。質問は5桁設定でしたが60以下でもOKです。 >>547 詳細な情報ありがとうございます。Excelの場合は注意します。
562 名前:デフォルトの名無しさん [2021/12/07(火) 18:18:33.97 ID:gm0ARZfd.net] すみません、質問です。 SET hoge=hogehoge robocopy c:\piyo \\server1\foge %hoge% /r:3 & if errorlevel 8 ( echoコマンド exit /b 1 ) 上記、 robocopy c:\piyo \\server1\foge %hoge%の「%hoge%」はどのような意味合いになりますでしょうか。 また、/r:3 & if errorlevel 8 ( の意味合いも教えていただけないでしょうか。 恐縮ですが、よろしくお願いいたします。
563 名前:デフォルトの名無しさん mailto:sage [2021/12/07(火) 18:50:14.46 ID:eGbAaLSQ.net] robocopy /? でヘルプが出るのでそれを読め
564 名前:デフォルトの名無しさん mailto:sage [2021/12/07(火) 18:52:54.40 ID:eGbAaLSQ.net] なお&は命令の区切りだけど、別に手前の命令の結果を待っての動作じゃなくて 一行前までの結果で動作するんじゃなかったかな
565 名前:デフォルトの名無しさん mailto:sage [2021/12/07(火) 19:03:57.81 ID:8LJtCh3/.net] &はコマンドを繋げているだけ その例だと robocopy opt if errorlevel 8 echoコマンド&exit /b 1 と同じ c:\piyo \\server1\foge %hoge% /r:3 がrobocopyのコマンドラインオプション %hoge%はhogehoge set a=xyz echo %a% はecho xyzと解釈されxyzと出力される 各コマンドについてはコマンドプロンプトで以下 set /? robocopy /? if /?
566 名前:デフォルトの名無しさん mailto:sage [2021/12/07(火) 19:21:14.44 ID:eGbAaLSQ.net] >>558 >>557 でも言ったけど、&は命令を並列に記述できるだけで 前の命令の結果を反映したものじゃないので robocopy opt if errorlevel 8 echoコマンド&exit /b 1 と robocopy opt&if errorlevel 8 echoコマンド&exit /b 1 の結果は違ってくる っていうかこれは意味の無い間違った使い方だね 例 set data=abc set data=def&echo %data% echo %data% 実行結果 abc def
567 名前:デフォルトの名無しさん mailto:sage [2021/12/07(火) 19:26:26.54 ID:eGbAaLSQ.net] あれ違うのか コマンドの場合は結果を見るんだな 環境変数が遅延するのか
568 名前:デフォルトの名無しさん mailto:sage [2021/12/07(火) 19:34:45.64 ID:8LJtCh3/.net] >>559 pushd . if errorlevel 1 echo fail1 pushd a if errorlevel 1 echo fail2 pushd .&if errorlevel 1 echo fail3 pushd a&if errorlevel 1 echo fail4 pause 試してから発言しなよ
569 名前:デフォルトの名無しさん mailto:sage [2021/12/07(火) 19:38:07.87 ID:eGbAaLSQ.net] 実行時の行の展開の式評価に環境変数は展開されるってことだな 式評価に影響されないものはちゃんと実行される &による命令の結合は if errorlevel 1 は問題ないが if %errorlevel% geq 1は問題がでてくる
570 名前:デフォルトの名無しさん [2021/12/07(火) 20:35:38.31 ID:FGGdMnHs.net] 皆さまありがとうございます cmdにて コマンド /? で見られること知りませんでした
571 名前:デフォルトの名無しさん mailto:sage [2021/12/08(水) 06:22:16.06 ID:GPDURn2W.net] 変数・条件判断など、ややこしいのは、PowerShell で作った方がよい
572 名前:デフォルトの名無しさん mailto:sage [2021/12/08(水) 20:11:32.12 ID:g8C6QNB9.net] 普通に「勘違いしてました。ごめんなさい。」と言えんのか
573 名前:デフォルトの名無しさん mailto:sage [2021/12/08(水) 20:18:14.77 ID:CqDUxZrm.net] if errorlevel とか if defined って & で繋ぐ為にあるんじゃね?
574 名前:デフォルトの名無しさん mailto:sage [2021/12/08(水) 21:48:59.30 ID:QG3j0cZG.net] バッチは罠が多すぎて&なんて横着しないからどうでもいい