[過去ログ] 【.cmd】 バッチファイルスクリプト %12 【.bat】©2ch.net (1002レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
702: 2018/08/11(土)19:21 ID:vbsvSkjm(1) AAS
何が罠なのかわからん
703(2): 2018/08/11(土)20:56 ID:WNr/dTgn(1) AAS
つづりを覚えられない奴には罠なんだろ w
704(2): 2018/08/11(土)21:47 ID:HlmNsX8I(1) AAS
こういうことじゃないかな?
set ERRORLEVEL=0
hogecommand
if %ERRORLEVEL% gtr 0 goto :ERROR
これが絶対真にならず、ジャンプしないとか
705: 2018/08/12(日)03:12 ID:lJZ67VC6(1/3) AAS
エラーは1以上とはかぎらないんだよな、コマンドによっては。
706(3): 2018/08/12(日)09:09 ID:pT5cyKVs(1/6) AAS
>>703
echo hoge > test.txt
て書くと「hoge」の後の半角空白までがtest.txtに出力されるんだよ。
>>704
代入しなくても、errorlevel を環境変数として判定に使うと正常に動かない場合がある。
具体的には
echo n | comp A.exe B.exe >NUL 2>&1
if not "%ERRORLEVEL%"="0" (
:
このとき、何故か%ERRORLEVEL% は常に「0」。バイナリ不一致でも「0」。
省4
707: 2018/08/12(日)09:13 ID:pT5cyKVs(2/6) AAS
>>706 にちょっと間違い。
〇 if "%ERRORLEVEL%"="0" (
× if not "%ERRORLEVEL%"="0" (
708(1): 2018/08/12(日)09:20 ID:yoDY/qSn(1) AAS
if の比較は = じゃなくて == だろ
709: 2018/08/12(日)09:40 ID:pT5cyKVs(3/6) AAS
>>708
悪い。typo。
〇 if "%ERRORLEVEL%"=="0" (
710(2): 2018/08/12(日)11:52 ID:eNrGPpfD(1) AAS
何故か以前にいろいろ間違いすぎなんだよ
ゼロから書き直せ
711: 2018/08/12(日)14:40 ID:IZr1Emsm(1) AAS
>>710
> ゼロから書き直せ
こんな感じっすかー?
0" ([HOME]if "%ERRORLEVEL%"=="
712: 2018/08/12(日)16:49 ID:dh6WaJfS(1) AAS
>>704>>706
ERRORLEVELは代入すると返却値として使えなくなるんじゃ
なかったっけ?
だからやるならば
set ERRORLEVEL=
だけにしないとだめなのでは
ただ、これをやってバッチ内でERRORLEVEL環境変数の
初期化みたいなことしてもうまく動かないこともあったような
気がするけど何か勘違いしてるんだろうな
713(2): 2018/08/12(日)18:02 ID:aLWFoJnR(1/3) AAS
>>706
パイプの動作が原因だろう
パイプの右側は子タスクでの実行となる(おそらくは)
メインタスクに環境を引き継がないんだと思う
echo "a"|for /f %%i in ('find "a"') do set x=OK
echo.%x%
これで%x%には値が入らない
echo "a"|find "a"&set x=OK
なら%x%にはOKが入るが
echo "a"|(find "a"&set x=OK)
省1
714: 2018/08/12(日)18:09 ID:aLWFoJnR(2/3) AAS
>>713
下2つ&は&&の間違いだが、別に&だろうが&&だろうが(この場合の)結果は変わらない
715: 2018/08/12(日)18:16 ID:lJZ67VC6(2/3) AAS
パイプはcallと一緒だなやはり
716: 2018/08/12(日)18:36 ID:lJZ67VC6(3/3) AAS
setコマンドの長いヘルプの下の方に
「ユーザーがこれらの名前の変数を明示的に定義する場合、
その定義は下記の動的な定義を無効にします。」
と書かれてる。errorlevelをsetするのは回避した方がいいだろう
717: 2018/08/12(日)18:40 ID:aLWFoJnR(3/3) AAS
ついでに言っとくと
パイプはデータの受け手が子タスクになったけど
for /fの'コマンド'は送り手が子タスクになる
従って、'コマンド'の中で環境変数に値を入れても、メインタスクには引き継がれない
718: 2018/08/12(日)21:23 ID:pT5cyKVs(4/6) AAS
>>710
難癖付けてばかりで話題提供もできない人はゼロから人生をやり直した方が(ry
719(1): 2018/08/12(日)21:38 ID:pT5cyKVs(5/6) AAS
>>713
んー、俺はもうそこまで調べる気もなくてね…ほぼ諦めてる。
子タスクとかどこの文献見ればあるんだろう?
あってもなくても、んなテクニック、引継ぎできる代物でもあるまい…。
例えば、
type data.txt | cscript //nologo hoge.vbs
if not errorlevel 1 (
:
これも実は…駄目なのだ!!
VBScript側で Call WScript.Quit(1)
省11
720: 2018/08/12(日)21:45 ID:pT5cyKVs(6/6) AAS
あ、ごめん。
if not errorlevel 1 (
正常終了処理
) else (
異常終了処理
)
て書くべきだった
721(1): 2018/08/13(月)00:05 ID:MtAcIApx(1) AAS
勉強になる話題だけど、バッチファイルは言語仕様の規模に比して闇が深すぎると思う
722: 2018/08/13(月)00:46 ID:bTGAGeMt(1) AAS
>>721
そだね
だんだんとwslの利用者が増えていくのだろうな
723: 2018/08/13(月)03:10 ID:EnLsbSTB(1) AAS
>>719
子タスクと言ったのは俺の推測(想像)でしかないから
データの受け渡しを行うのには、送り手と受け手の両者が存在しないと変だろうってことからね
あと、タスクというのも、適当な概念だから
親の環境を引き継いで生成された子環境のことね
実体はスレッドだろうと想像するけど
724: 2018/08/13(月)10:15 ID:aFOAPcea(1) AAS
>>703
綴りといえばenabledelayedexpantionも罠レベルだよ・・・誰だこれ考えたの('A`)
725: 2018/08/13(月)10:38 ID:WsZfoIsu(1) AAS
なるほど引っかかってる
726: 2018/08/15(水)02:41 ID:xax+OHuY(1/3) AAS
元の英語がわかれば
enable delayed expansion
を繋げただけなんだよ
727: 2018/08/15(水)13:28 ID:j7d0pce0(1/7) AAS
質問させてください。
Linuxでいうところの、/dev/nullで標準入力待ちを終了させるのはどうすればいいのでしょうか。
具体的には、Windows向けのopensslコマンドを実行しています。
openssl s_client -connect 〜とやると標準出力が一通り出たところで入力待ちになる仕様で、
コマンドプロンプト上だとCtrl+Cで止めてあげる必要があります。
Linuxだと、末尾に< /dev/nullで終わらせられるのですが、Windowsバッチで同じように終了させる方法は無いでしょうか。
728(2): 2018/08/15(水)13:50 ID:o8lgioa7(1/2) AAS
< nul
じゃダメなの?
729: 2018/08/15(水)13:54 ID:j7d0pce0(2/7) AAS
>>728
書いてなくてすみません。それだとダメでした。
730(1): 2018/08/15(水)14:06 ID:o8lgioa7(2/2) AAS
できるはずなんだけど…
外部リンク:qiita.com
731: 2018/08/15(水)14:36 ID:j7d0pce0(3/7) AAS
>>730
参考サイトありがとうございます。
先ほど教えていただいたのと同じ< nulですよね。
サンプルコマンドの通り打ってみても入力待ちで止まります…。
念のためOpenSSLを入れ直しても変わりませんでした。
サンプルでパイプで渡してる直前まで( < nul 2> nul)で試すと、
実行結果がダーっと出て、入力待ちで止まるんですよね…。
上下前次1-新書関写板覧索設栞歴
あと 271 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.033s