拡張子が .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/
【.cmd】 バッチファイルスクリプト %14 【.bat】
■ このスレッドは過去ログ倉庫に格納されています
2020/08/15(土) 07:00:26.64ID:f3kW5kCx
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
ちょっと試したけど使い勝手が良い
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付けても付けなくても同じ。
これが正しいのかよくわからん
/wait付けても付けなくても同じ。
これが正しいのかよくわからん
2020/08/15(土) 23:16:48.97ID:vVgO0BR5
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が成功したら、実行したコマンドの戻り値を返す
(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になって本来のエラーコードがわからないって事です。
そうそうそう。
9020と9059の違いはありますが、
起動か失敗するコマンドは独自に実行するとOSから別のエラーコード(起動失敗の直接の原因となったエラー)が返ってきますが、
それがstartコマンドから実行すると(自分の場合は)9020になって本来のエラーコードがわからないって事です。
2020/08/16(日) 10:40:25.72ID:O0yhKyc9
start /wait
cmd /k
使い方
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
>color 00 & echo %errorlevel%
0
>(color 00) & echo %errorlevel%
1
10デフォルトの名無しさん
2020/08/16(日) 19:20:31.36ID:Nztll5gc2020/08/16(日) 19:28:17.47ID:5bX3HnFK
2020/08/16(日) 19:29:38.18ID:vTgpRfn/
2度目のはerrorlevelを0にして試してないのでは?
&でつなぐと forの中の %変数% と同じで反映されない
試してないけど遅延展開有効にして!errorlevel!とすれば多分大丈夫
()は関係無い
&でつなぐと forの中の %変数% と同じで反映されない
試してないけど遅延展開有効にして!errorlevel!とすれば多分大丈夫
()は関係無い
2020/08/16(日) 19:36:49.54ID:5bX3HnFK
あらかじめ set errorlevel=0 にすると
両方とも 0 になる。
両方とも 0 になる。
2020/08/16(日) 19:42:36.63ID:vTgpRfn/
set errolevel=値 したらsetした環境変数が優先されerrorlevel自動代入の機能は死ぬ
set errolevel=
で消せば元に戻る
set errolevel=
で消せば元に戻る
2020/08/16(日) 19:51:04.53ID:5bX3HnFK
あらかじめ set errorlevel= にすると
>>9 のようになる
>>9 のようになる
2020/08/16(日) 20:09:12.98ID:vTgpRfn/
pushd .
color 00 & echo %errorlevel%
pushd .
(color 00) & echo %errorlevel%
てしてみ?両方0になるから
2回目の1は1回目のエラーが表示されてる
%変数%の展開のタイミングは構文の評価時なのでそうなる
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!
これは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= だと初期化されないのか
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
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です。とはならない
%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
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
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なんだな。これにも躓いた
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
>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]"とかしても関係無い行だらけになりそうだ
陰
echo 陰|findstr /r /c:"A"
陰
"[ア]"は"0x8341" では無く、"0x83","0x41" の文字集合扱いってことみたいだね
"."の扱いもそうだし1byteでしかみてないの確定か。酷い
とするとほぼリテラルでしか使えないな
日本語文章のファイルからアルファベットが含まれる行を抜き出そうとして"[A-z]"とかしても関係無い行だらけになりそうだ
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 中国国営メディア「沖縄は日本ではない」… [BFU★]
- 中国国営メディア「沖縄は日本ではない」… ★2 [BFU★]
- 【こんなの初めて…】民泊には既にキャンセルも 中国の渡航自粛で [ぐれ★]
- 高市政権にパイプ役不在…日中高まる緊張 公明党の連立離脱影響、自民内にも懸念「自分でまいた種は自分で刈り取ってもらわないと」 [ぐれ★]
- 「稼ぐのよ!」高市総理が電話ガチャ切りで伝えたこと 鈴木憲和農林水産大臣が国政報告会に出席 自身が目指す農政の方針語る [煮卵★]
- 俳優 高岡蒼佑「エジプト出身とかナイジェリア出身とかの人が、日本の代表顔して移民の事とか話してるの見るとなんか違う気がする」★2 [Anonymous★]
- 【高市悲報】片山さつき、円安進行を受けコメント「為替の変動を緊張感を持って見極める」 [888298477]
- 【悲報】かつて台湾を統治し中国大陸にまで侵略したジャップ「中国は台湾侵略するのやめろ!」 [616817505]
- 【高市悲報】アメリカ戦争省「あのさ、何回シミュレートしてもわーくに中国に負けちゃうんだよね🤗」 [359965264]
- 自民「高市の一言でこれまで積み上げてきた関係が駄目になる。言葉の重みを分かっていない。自分でまいた種は自分で刈り取ってもらう」 [256556981]
- 中国国営放送「日本は琉球をただちに中国に返還せよ」 キタ━━━━(゚∀゚)━━━━!!!!! [314039747]
- 識者「『フリーパレスチナ』とかイキってる連中が台湾の話になると『中国を怒らせるな!』ってなる。ほんと左翼の正義って薄っぺらい」 [279254606]
