【.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/
2020/08/15(土) 07:38:40.18ID:sYOUYcTP
Swiss File Knife
https://www.freewarefiles.com/Swiss-File-Knife_program_39649.html
http://stahlworks.com/dev/swiss-file-knife.html

ちょっと試したけど使い勝手が良い
2020/08/15(土) 16:03:49.79ID:YDp7CJXQ
startコマンドでコマンドを実行がエラーになった時にerrorlevelで戻り値確認すると9020になっている。
/wait付けても付けなくても同じ。
これが正しいのかよくわからん
2020/08/15(土) 23:16:48.97ID:vVgO0BR5
>>3
普通の動作
実行したアプリが即時終了して9020を返しているだけ
2020/08/16(日) 07:47:08.35ID:A8ymKSpp
そういう結果にはならんなー
(verify offはerrorlevelを0にセット、verify xxxはerrorlevelを1にセットする)

C:\>verify off
C:\>start xxx
ファイル xxx が見つかりません。
C:\>echo %errorlevel%
9059

C:\>verify off
C:\>start /wait xxx
ファイル xxx が見つかりません。
C:\>echo %errorlevel%
9059

C:\>verify off
C:\>start cmd /c verify xxx
C:\>echo %errorlevel%
0

C:\>verify off
C:\>start /wait cmd /c verify xxx
C:\>echo %errorlevel%
1

startやstart /wait自体が失敗したら9059
startが成功したら0
start /waitが成功したら、実行したコマンドの戻り値を返す
63
垢版 |
2020/08/16(日) 09:57:56.96ID:+xZknRBW
>>5
そうそうそう。
9020と9059の違いはありますが、
起動か失敗するコマンドは独自に実行するとOSから別のエラーコード(起動失敗の直接の原因となったエラー)が返ってきますが、
それがstartコマンドから実行すると(自分の場合は)9020になって本来のエラーコードがわからないって事です。
2020/08/16(日) 10:40:25.72ID:O0yhKyc9
start /wait
cmd /k
使い方
2020/08/16(日) 10:54:36.31ID:7Iew54RL
コマンドは何よ?
2020/08/16(日) 18:45:13.11ID:5bX3HnFK
話変わるけど、括弧で結果が変わるのはなんで?

>color 00 & echo %errorlevel%
0

>(color 00) & echo %errorlevel%
1
10デフォルトの名無しさん
垢版 |
2020/08/16(日) 19:20:31.36ID:Nztll5gc
ぬ?
https://light.dotup.org/uploda/light.dotup.org668399.png
2020/08/16(日) 19:28:17.47ID:5bX3HnFK
>>10 ありがとう
おれの環境だとあらかじめ
set errorlevel=1
にしてるとそうなるけど
2020/08/16(日) 19:29:38.18ID:vTgpRfn/
2度目のはerrorlevelを0にして試してないのでは?
&でつなぐと forの中の %変数% と同じで反映されない
試してないけど遅延展開有効にして!errorlevel!とすれば多分大丈夫
()は関係無い
2020/08/16(日) 19:36:49.54ID:5bX3HnFK
あらかじめ set errorlevel=0 にすると
両方とも 0 になる。
2020/08/16(日) 19:42:36.63ID:vTgpRfn/
set errolevel=値 したらsetした環境変数が優先されerrorlevel自動代入の機能は死ぬ
set errolevel=
で消せば元に戻る
2020/08/16(日) 19:51:04.53ID:5bX3HnFK
あらかじめ set errorlevel= にすると
>>9 のようになる
2020/08/16(日) 20:09:12.98ID:vTgpRfn/
pushd .
color 00 & echo %errorlevel%
pushd .
(color 00) & echo %errorlevel%

てしてみ?両方0になるから
2回目の1は1回目のエラーが表示されてる
%変数%の展開のタイミングは構文の評価時なのでそうなる
2020/08/16(日) 20:17:16.41ID:A8ymKSpp
>color 00 & echo %errorlevel%

これはcolor 00 & echo %errorlevel%を実行する直前のerrorlevelが表示される。
color 00の実行結果を知りたければ&でつながずに2回に分けて実行しなければならない。

>color 00
>echo %errorlevel%

あるいはcmd /v:onで遅延展開を有効にしてから
>color 00 & echo !errorlevel!
2020/08/16(日) 20:29:56.33ID:5bX3HnFK
>>16 ありがとう。括弧は無関係ですね
set errorlevel= だと初期化されないのか
2020/08/16(日) 20:39:32.90ID:vTgpRfn/
この「構文評価時に展開される」というロジックを使って環境変数を配列のように使えたりする

for /l %%i in (1,1,5) do set A%%i=%%i
for /l %%i in (1,1,5) do echo %%A%%i%%
for /l %%i in (1,1,5) do call echo %%A%%i%%
pause
2020/08/16(日) 21:37:34.66ID:vTgpRfn/
set errorlevel=値 とsetした時とそうでない時の %errorlevel% は別物
%time% %date% も同じく
ビルトイン特殊環境変数 みたいな感じ
参照出来るけど環境変数としては存在しない
だから set e とか set d とかしても表示されない。環境変数ではないから
set t は tmp temp が表示されるはず
これらは set で同名の環境変数名を設定するとそちらが優先されビルトインの方は参照出来なくなる
環境変数に設定した場合は環境変数を消去するとビルトインの方を参照する
set time=0
echo %time%
set time=
echo %time%
echo はONです。とはならない
2020/08/17(月) 07:53:31.79ID:hOPUdkb9
%cd% も
他に何かあったっけ?
2020/08/17(月) 08:21:28.65ID:hOPUdkb9
cd
cmdcmdline
cmdextversion
date
errorlevel
highestnumanodenumber
random
time
23デフォルトの名無しさん
垢版 |
2020/08/17(月) 11:49:09.93ID:0uhm6UU6
if errorlevel 0 goto err
2020/08/17(月) 12:25:18.44ID:Md0hBahZ
後藤は極力使わない
2020/08/17(月) 18:56:48.99ID:hmt9CL+F
>>18
ERRORLEVEL が初期化できない場合は

>cmd /c exit 7

>set ""|findstr "=E"
=ExitCode=00000007
2020/08/17(月) 19:02:26.61ID:hmt9CL+F
echo %=ExitCode%
2020/08/17(月) 19:16:51.03ID:hmt9CL+F
ダメだな exit にしか使えんな
2020/08/22(土) 16:25:23.98ID:WW0Ct525
for %a in (a bb あ 冬 円 止 梅 十 申) do echo [%a]| findstr /r /c:"\[[^×][^×]*\]" && echo %a ok || echo %a ng
5cは大丈夫なのに7eがダメ
for %a in (a bb あ 冬 円 止 梅 十 申) do echo [%a]| findstr /r /c:"\[.\]" && echo %a ok || echo %a ng
findstrの正規表現の"."て1文字では無く1byteなんだな。これにも躓いた
2020/08/22(土) 20:54:30.27ID:ZT5qbO53
以前から findstr は全角が絡むと挙動不審になる
>echo A | findstr /r /c:"[ア]"
A
2020/08/23(日) 00:55:18.89ID:W2kjoCYK
echo 陰|findstr /r /c:"[ア]"

echo 陰|findstr /r /c:"A"

"[ア]"は"0x8341" では無く、"0x83","0x41" の文字集合扱いってことみたいだね
"."の扱いもそうだし1byteでしかみてないの確定か。酷い
とするとほぼリテラルでしか使えないな
日本語文章のファイルからアルファベットが含まれる行を抜き出そうとして"[A-z]"とかしても関係無い行だらけになりそうだ
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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