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

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

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

過去スレ
%13 http://mevius.2ch.net/test/read.cgi/tech/1542779527/
%12 http://mevius.2ch.net/test/read.cgi/tech/1489207631/
%11 http://echo.2ch.net/test/read.cgi/tech/1424858999/
%10 http://peace.2ch.net/test/read.cgi/tech/1374205515/
%9 http://toro.2ch.net/test/read.cgi/tech/1335015478/
%8 http://toro.2ch.net/test/read.cgi/tech/1315844420/
%7 http://hibari.2ch.net/test/read.cgi/tech/1298873550/
%6 http://hibari.2ch.net/test/read.cgi/tech/1277465356/
%5 http://pc12.2ch.net/test/read.cgi/tech/1242268171/
%4 http://pc12.2ch.net/test/read.cgi/tech/1229955189/
%3 http://pc11.2ch.net/test/read.cgi/tech/1217860043/
%2 http://pc11.2ch.net/test/read.cgi/tech/1197881068/
【.cmd】 バッチファイルスクリプト %1 【.bat】
http://pc11.2ch.net/test/read.cgi/tech/1178281991/
バッチファイルプログラミング 3.bat
http://pc11.2ch.net/test/read.cgi/tech/1148485555/
バッチファイルプログラミング 2.bat
http://pc8.2ch.net/test/read.cgi/tech/1104911889/
バッチファイルプログラミング質問スレ
http://pc5.2ch.net/test/read.cgi/tech/1040614686/
2021/11/01(月) 06:54:23.99ID:jadZUHdf
引数を取得してからショートカットにまわせばいいんじゃね
start kanri.lnk 引数
2021/11/01(月) 08:07:56.06ID:jadZUHdf
だめやな
引数に"が一個でもあるとこけるわw
2021/11/01(月) 08:27:08.38ID:jadZUHdf
変数もあかんしファイルで渡すしかなさそうやな
2021/11/01(月) 12:50:11.96ID:QjI9xm4a
自分が使うバッチにファイル群なら運用回避で何とでもなるんだけど
会社の共有フォルダとかだとなんて皆使えるように使うしどうしてもな。
まあどうしようも無ければ最後はルール化して
半角全角空白記号周りのファイル名をリネームするツール回すのみだな。
2021/11/02(火) 11:39:54.98ID:cNrRrDlB
>>468
ファイル名じゃなくても&付きのURLってたまに処理対象になるし
2021/11/03(水) 10:25:06.03ID:/m7gndnZ
>>466
1.バッチのショートカットを作成
2.「管理者として実行」に設定
3.リンク先の先頭にcmd /c を追加する
適用したらcmdはフルパスに変換される
これで動作するはず
管理者権限が不要ならcmd /c も不要
というかバッチに直接D&D,sendtoでもOK
2021/11/03(水) 12:58:10.31ID:/m7gndnZ
>>474は一般的な話だが

>>465の場合の管理者権限ショートカットは
リンク先はバッチファイル名を引用符で囲む必要あり
cmd /c c:"\hoge.bat"
最初の引用符の位置に注意
バッチの中で t" を参照してるので消えないようにするため
2021/11/03(水) 20:10:42.41ID:/m7gndnZ
>>474-475
こんな面倒なことする必要ないわ
バッチのフルパスに半角スペースがあればいいのか
管理者権限にするだけだな
2021/11/03(水) 20:29:31.22ID:/m7gndnZ
フルパスじゃないな
バッチファイル名に半角スペースか
よくわからん
2021/11/06(土) 21:15:51.20ID:INMdaaG1
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つ格納って出来ます?
2021/11/07(日) 00:37:39.03ID:U3IH/L/8
>>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
2021/11/07(日) 01:01:53.46ID:U3IH/L/8
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
)
2021/11/07(日) 01:58:35.64ID:DID0sM5T
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
)
2021/11/08(月) 16:25:54.29ID:Px/K8tF9
moveで移動するときに
指定したフォルダがないときに自動で作るとかできんの?
2021/11/08(月) 17:08:44.21ID:Wv1BXJs6
存在しないとリネーム
存在するとその下に移動
結果が全く違う
エラーも出ない
確認もない
たちの悪い仕様
2021/11/08(月) 21:36:39.36ID:Ev0WzRyD
>>479-481
ううーむ、どっちもダメだった
うまい方法は無いかー
2021/11/08(月) 22:36:27.76ID:z+jTzavH
>>484
どういうふうにダメなの
カンマが文字列に入ってたのなら区切り文字列を別の使われてないものにすればいけると思うけど
また3)でもいけるはずだが
2021/11/08(月) 22:40:00.92ID:z+jTzavH
ただ、常にダブルクォーテションで括ってやって、外さないように制御したほうがいいよ
urlによく付いてくるクエリーとかだとパラメータを&で区切って書くので
""を外すと何かとやりにくいはず
2021/11/08(月) 22:55:02.48ID:hhTd8ytG
うまいも何も恐らくjqコマンドの書き方の問題でしょ
2021/11/08(月) 22:59:09.33ID:Ev0WzRyD
すまぬ、「またまたー」と思いながらやり直したら普通に動きましたw
一応、>>479-480の例1と5で試したらしっかり動きましたw
2021/11/09(火) 00:35:07.87ID:QL8KoTXD
>>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"
)
2021/11/09(火) 19:41:28.06ID:5mYjFh+F
バッチファイルでコマンドプロンプトを起動して
C:\>hoge
というふうに「hoge」が入力された状態にしたいんですけどどうすればいいでしょうか

cmd /k の後がわかりません・・
2021/11/09(火) 20:43:47.12ID:pDzmJqw9
@cmd.exe /k "prompt C:\$Ghoge"

「入力された状態」はahkとか使わないと無理じゃないかな
2021/11/10(水) 01:27:11.48ID:faifycsG
定型入力を省略したいってだけなら別の方法があるけど
rem hogeの後に続く文字列を入力させる
set /p REMAIN_STR="hoge"
rem hogeと結合する
set COMPLETE_STR=hoge%REMAIN_STR%
rem 完全な文字列を表示する
echo %COMPLETE_STR%
2021/11/10(水) 02:45:03.95ID:lbp+J88v
hoge はコマンドで、途中まで入力された状態にしたいとく汲み取れるんだが
2021/11/10(水) 02:56:31.36ID:eLi1lwzp
コマンドの入力が面倒ってだけなら
doskeyで適当なエイリアスを設定するだけでも十分な気が
2021/11/10(水) 07:20:19.97ID:v4FfRZjw
あるデバイスが抜いてさし直さないと読み込めません
コマンドプロンプトで刺してある状態を解除して読み込め直すことは出来ないですか?
2021/11/10(水) 07:40:32.85ID:ZzX9Joeo
devconでできない?
497デフォルトの名無しさん
垢版 |
2021/11/20(土) 17:53:21.19ID:KiGzNUkt
質問です。
やりたいことは
「エクスプローラーで選択したフォルダをショートカットキーを使って指定したフォルダに移動」
です。
BATファイルがショートカットキーで使えるようなので
これをなんとか使えないか調べたのですがわかりませんでした。
私のやりたいことは可能でしょうか?
498デフォルトの名無しさん
垢版 |
2021/11/20(土) 21:04:55.50ID:mzO+cRkE
>>497
>BATファイルがショートカットキーで使えるようなので

そこの情報源に当たればいいじゃん
2021/11/20(土) 23:01:39.27ID:785tmrzC
バッチ(コマンド)だけでは無理
VBか何かで「エクスプローラーで選択」のアイテムのパスを取得出来れば可能
この辺で聞いてみたら?
VB.NET質問スレ(Part44)
http://mevius.2ch.net/test/read.cgi/tech/1527325729/
【VBScript】WSHについて話し合うスレ【JScript】
http://mevius.2ch.net/test/read.cgi/tech/1578522041/

素直に選択して右クリで「送る」するならバッチでも出来る、がCtrl+X,Ctrl+Vと手間は大して変わらん
どうしてもショートカットキーワンアクションでってならエクスプローラー諦めてそれが出来そうなファイラー探す方が早い
2021/11/21(日) 14:03:31.46ID:/SaMuAE1
OSに現在誰がログインしてるかSYSTEM権限のタスクのバッチから取得したいと考えてます。
ログイン中のユーザー自体はquery userコマンドで拾えることが判ったのですが、
他にもっと適当なコマンドがあったら教えてください。
2021/11/21(日) 14:26:02.18ID:/CZTlOFO
ナメすぎやろおまえ
知恵袋にでも逝けks
2021/11/21(日) 16:35:41.72ID:/hna8FyN
%USERNAME% ではだめなのか
2021/11/21(日) 16:48:36.14ID:h4R7LYQM
usernameってローカルログオンしてるユーザーだけじゃななかったっけな?
system権限のbatっていうのが何なのか曖昧だけど
アカウントユーザー名のSYSTEMのことだったらダメなんじゃないか?
2021/11/21(日) 16:54:31.46ID:h4R7LYQM
あと結果をecho表示させようとしてもSYSTEMからユーザーの画面に表示はされないので注意(ウィンドウが表示されない)
2021/11/21(日) 16:57:22.70ID:h4R7LYQM
念のためechoだけじゃなくNotepad等アプリ起動してもユーザー画面には現れないということ
2021/11/21(日) 17:20:15.98ID:h4R7LYQM
スタンドアローンPC(普通の人の環境)で試してみた
%username% → PC名$
query user → 誰かがログインしてれば、ログインしてるローカルユーザー1人のみ
サーバーだとおそらくユーザー全員のリストが出るのかな?
2021/11/21(日) 20:59:58.20ID:q48e3mil
query userの何が気に入らないのかを教えてくれないと
2021/11/22(月) 11:48:10.21ID:HBTqNirT
>>506
普通の人の環境ではそもそも query コマンド自体が無かったりするが…
2021/11/22(月) 19:01:18.96ID:YF/SUs6n
whoamiコマンドの結果では、systemが表示される
ダメってことだが一応報告まで
2021/11/22(月) 19:11:59.58ID:YF/SUs6n
さらにset userだとコンピュータ名になる
2021/11/23(火) 08:52:09.04ID:v39GCTAR
net session >nul 2>nul && goto super_user
2021/11/23(火) 18:33:43.80ID:tf0m1Q47
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
2021/11/23(火) 19:09:58.73ID:/gWgBLyu
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
2021/11/23(火) 19:15:36.21ID:/gWgBLyu
> ) else ( echo File Not found.
) else ( echo File Not found.)
閉じ括弧忘れ訂正
2021/11/23(火) 19:37:34.23ID:tf0m1Q47
できました! 大感謝です!
2021/11/23(火) 22:15:56.97ID:QElBq1+g
for /r "C:\Program Files (x86)\IObit\Driver Booster" %%a in (DriverBooster.exe*) do start "" /b "%%~a"
2021/11/23(火) 23:38:49.10ID:7Kq301Hb
そういや
音って鳴らせないの?
特定の処理を終了したら
終了音ならしたいんだけど
2021/11/24(水) 00:22:26.48ID:GYI09rKg
@echo off
for /f "delims=N" %%i in ('cmd/u/c echo 万') do set bel=%%i
echo %bel%
pause
2021/11/24(水) 02:02:20.45ID:L2nveBoL
powershell -c (New-Object Media.SoundPlayer 'C:\WINDOWS\Media\Windows Logon.wav').playSync();
2021/11/24(水) 04:56:50.03ID:GYI09rKg
prompt $g^G
^G はIMEオンで 0007 + F5キー
2021/11/24(水) 09:12:16.85ID:rRXxy3T6
beep
2021/11/24(水) 13:17:12.74ID:xQvD3wWY
"C::\Windows\Media\tada.wav"
2021/11/24(水) 13:18:06.25ID:xQvD3wWY
typo
"C:\Windows\Media\tada.wav"
524デフォルトの名無しさん
垢版 |
2021/11/24(水) 15:01:27.44ID:uH6oNI9g
すみません、質問です。

call :hoge hogehoge.py

:hoge
python -B %1
robocopy foge
del piyo
exit /b

は、
hogehoge.pyに:hoge を追加したものを実行しているという意味合いで合っていますでしょうか。

お手数おかけして恐縮ですが、教えていただければ幸いです。
2021/11/24(水) 15:29:52.68ID:L2nveBoL
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 と書き換えて実行すれば
コマンド類がどういう順、変数展開されて実行されているか見えるようになる
526デフォルトの名無しさん
垢版 |
2021/11/24(水) 15:51:35.42ID:uH6oNI9g
>>525
ご教授いただきありがとうございます。
とてもわかりやすく、助かりました!
2021/11/24(水) 16:06:45.19ID:xEc1Gd+0
call hoge
 hoge.batを呼び出す
 call hoge.batと書いたほうが間違いが少ない
call :hoge
 現在のbatファイル中のラベル:hogeを呼び出す
 (サブルーチンのような感じであり、呼び出すbatファイルを別に用意しなくても済む)
2021/11/28(日) 21:32:31.71ID:/OsOh/FW
explorerから.batをクリックした時
Windows Terminalで開く設定ってどうやるの?
ショートカット作ってプロパティ設定すると
非レガシーコンソールの設定もあるけどウィンドウが透明になって^vできるだけという
2021/11/29(月) 14:11:09.39ID:lBCR2YeY
ショートカットを以下みたいにして出来ない?
wt new-tab --title "CMD" cmd.exe /k \"フルパス\hoge.bat\"
530デフォルトの名無しさん
垢版 |
2021/12/01(水) 12:20:54.06ID:+U/ofie/
日付の計算ってvbsやパワーシェル呼び出すしかないの?

ファイル名yyyymmの今月分がなかったら先月分をリネームコピーしたいだけなんだが
2021/12/01(水) 12:52:49.40ID:jrr/ct9i
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%
2021/12/01(水) 13:11:55.23ID:eX2WGo0j
> 今月分がなかったら先月分をリネームコピーしたいだけ
これにどう日付計算が必要なの?そもそも日付計算くらい自前で計算出来るでしょ
今月が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"
533デフォルトの名無しさん
垢版 |
2021/12/01(水) 13:16:52.77ID:+U/ofie/
>>531
>>532
ありがとう
確かにバッチに時間かけるのもあれだな
2021/12/01(水) 13:53:25.27ID:eX2WGo0j
先月
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%
2021/12/01(水) 14:32:14.49ID:eX2WGo0j
set /a "m=101-101, f=!m, y=2022-f, m=m+12*f"
でいい
*!fはあっても問題無いけど余計だった
536デフォルトの名無しさん
垢版 |
2021/12/01(水) 14:33:15.12ID:+U/ofie/
かなりシンプルになるな
2021/12/01(水) 14:33:29.91ID:eX2WGo0j
訂正
set /a "m=1%%b-101, f=!m, y=%%a-f, m=m+12*f"
2021/12/01(水) 19:30:16.15ID:qmJDO3Rn
for /f "tokens=1-7 delims=/:." %%1 in ("%date%.%time: =0%") do set DateTime=%%1%%2%%3%%4%%5%%6%%7
2021/12/02(木) 12:24:38.70ID:xcTRUvQf
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月を頭にしてるんだな
2021/12/02(木) 21:10:02.03ID:NUCi8UEu
0:00前後に実行するとおかしなことになるから%date%と%time%はかならず一時変数に入れるべき
もっと言えば日付と時刻を同時に取れる手段を使うべき
2021/12/02(木) 22:16:15.49ID:sGas3Vn9
メモ
フェアフィールドの公式
2021/12/02(木) 22:37:42.24ID:s/MRATw/
割とクソゴミな式な
式の意味が分かり難くなるような式変形しちゃダメだわ
敢えてやってんだろうけどさ
Wikipediaの解説とかも良く分かってないバカが書いたんだろうなと思う
まあ導出のアプローチの仕方が悪いってだけだが
2021/12/04(土) 22:30:00.94ID:Nf0n5MKs
日付の質問です。
CSVの日付部分のセルのデータが壊れていて、5桁の整数になっています。
ググって調べてみたら、どうも1899/12/30が0のシリアル値のようです。
これをYYYY/MM/DDの文字列に変換したいんですが計算式がわかりません。
よろしくお願いします。
2021/12/04(土) 23:24:36.10ID:vRpkCUu9
>>543
CDate( )
2021/12/05(日) 00:20:38.02ID:KxbO9WQf
>>543
エクセルあればセルの表示設定を変える
2021/12/05(日) 06:43:24.27ID:KxbO9WQf
>>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の日数
2021/12/05(日) 09:15:29.34ID:/JnG12pN
> 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%
2021/12/05(日) 09:29:31.66ID:KxbO9WQf
シリアル値が60以下がどうとかいう話だよね
質問が5桁の整数とあるので無視したよ
2021/12/05(日) 10:57:38.65ID:rW6bYpGZ
もしかしてみずほの案件やってた人?
2021/12/05(日) 11:31:10.50ID:KxbO9WQf
そもそも60以下になるとソフトにより挙動が違う
Excelとは限らない
出どころ確認が先決
スレチの話だけどね
2021/12/05(日) 11:31:33.19ID:4iCsIwjm
ワロwww
2021/12/05(日) 11:39:17.80ID:4iCsIwjm
わざわざ対応する必要なんて無いとは思うけど
定数の説明なんかよりも60以下で不正な値になるという注意書きの方が重要だわな
みずほも言われたことしかやらない企業体質がどうの言われてるね
こんな感じで小さなバグが内包しまくってるのかもなw
2021/12/06(月) 16:06:42.92ID:yBc7foB1
>>546
一旦閏日全部引いて、月が一律31日になるよう加算してるんだね
面白い
(n-61)/a+(n-122)/a+(n-214)/a+(n-275)/a
この式が4-11月の不足分を足してるんだろうけど
なんでこの式で行けるのかイメージ出来ない
2021/12/06(月) 19:19:45.42ID:+EfoGYZX
>>546
バッチありがとうございます。動作確認しました。助かりました。
>>550
ソフトはLibreOfficeです。後出しですみません。
シリアル値は全て連続です。質問は5桁設定でしたが60以下でもOKです。
>>547
詳細な情報ありがとうございます。Excelの場合は注意します。
555デフォルトの名無しさん
垢版 |
2021/12/07(火) 18:18:33.97ID:gm0ARZfd
すみません、質問です。

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 ( の意味合いも教えていただけないでしょうか。

恐縮ですが、よろしくお願いいたします。
2021/12/07(火) 18:50:14.46ID:eGbAaLSQ
robocopy /?
でヘルプが出るのでそれを読め
2021/12/07(火) 18:52:54.40ID:eGbAaLSQ
なお&は命令の区切りだけど、別に手前の命令の結果を待っての動作じゃなくて
一行前までの結果で動作するんじゃなかったかな
2021/12/07(火) 19:03:57.81ID:8LJtCh3/
&はコマンドを繋げているだけ
その例だと
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 /?
2021/12/07(火) 19:21:14.44ID:eGbAaLSQ
>>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
2021/12/07(火) 19:26:26.54ID:eGbAaLSQ
あれ違うのか
コマンドの場合は結果を見るんだな
環境変数が遅延するのか
2021/12/07(火) 19:34:45.64ID:8LJtCh3/
>>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
試してから発言しなよ
2021/12/07(火) 19:38:07.87ID:eGbAaLSQ
実行時の行の展開の式評価に環境変数は展開されるってことだな
式評価に影響されないものはちゃんと実行される
&による命令の結合は
if errorlevel 1 は問題ないが
if %errorlevel% geq 1は問題がでてくる
563デフォルトの名無しさん
垢版 |
2021/12/07(火) 20:35:38.31ID:FGGdMnHs
皆さまありがとうございます

cmdにて コマンド /? で見られること知りませんでした
2021/12/08(水) 06:22:16.06ID:GPDURn2W
変数・条件判断など、ややこしいのは、PowerShell で作った方がよい
2021/12/08(水) 20:11:32.12ID:g8C6QNB9
普通に「勘違いしてました。ごめんなさい。」と言えんのか
2021/12/08(水) 20:18:14.77ID:CqDUxZrm
if errorlevel とか if defined って
& で繋ぐ為にあるんじゃね?
2021/12/08(水) 21:48:59.30ID:QG3j0cZG
バッチは罠が多すぎて&なんて横着しないからどうでもいい
2021/12/08(水) 22:49:45.89ID:CqDUxZrm
他にもifやdoの括弧のなかとか
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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