ブログトップ 記事一覧 ログイン 無料ブログ開設

それはそれ。これはこれ。 このページをアンテナに追加 RSSフィード

2003 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2004 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2005 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2006 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 03 | 04 | 05 | 06 | 07 | 09 | 10 | 11 | 12 |
2012 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 11 | 12 |
2013 | 01 | 02 | 04 | 05 | 07 | 08 | 10 | 11 | 12 |
2014 | 02 | 03 | 07 | 08 | 09 | 10 | 11 | 12 |
2015 | 01 | 02 | 03 | 05 | 06 | 07 | 11 |
2016 | 07 |
2017 | 01 | 03 | 06 | 07 | 11 |
2018 | 05 | 07 | 08 | 09 |

2005-02-14(月)

[]パイプ前段のERRORLEVEL パイプ前段のERRORLEVELを含むブックマーク パイプ前段のERRORLEVELのブックマークコメント

ちょっとよくわからないこと。

setlocal enabledelayedexpansion
set A=123
echo !A!             → 当然 123 と表示
(echo !A!)           → これも 123 と表示
echo !A! | more      → これも 123 と表示
(echo !A!) | more    → なぜか !A! と表示

パイプの要素でカッコで囲んだ場合だけ、setlocal の影響が及ばないようである。

ということで、パイプ前段の ERRORLEVEL を知りたい場合、

setlocal enabledelayedexpansion
( prog1 & echo exit /b !ERRORLEVEL! > tmp.bat ) | prog2
call tmp.bat
echo %ERRORLEVEL%

では駄目で、

cmd /v:on /c "prog1 & echo exit /b !ERRORLEVEL! > tmp.bat" | prog2
call tmp.bat
echo %ERRORLEVEL%

とする必要がある。

かとうゆかとうゆ 2006/04/04 12:03 おお。私はまさにその問題でずっと苦労していました。
問題が解決し、非常に助かりました。
遅延環境変数の展開の罠に該当していることに気づかず(というか全然知らず)、

(PGM.exe 2>&1 & echo %ERRORLEVEL% >%TEMP%¥res.txt) | tee -a %TEMP%¥log.txt
set /p ST=<%TEMP%¥res.txt & set /a ST=ST+0

として、環境変数 ST に、実行前の ERRORLEVEL 値が得られてしまい困っていたのでした。
もうバッチでは無理と考えて、非CygwinのWin32版の zsh や tcsh などに手を出して

(PGM.exe; echo $status >$TEMP/res.txt) |& tee -a $TEMP/log.txt
set st=`cat $TEMP/res.txt`

(tcshの場合の例)などと書いていたのですが、開発中に zsh も tcsh もよく
固まったり異常終了したりで、とても他人に使ってもらえる物ではなかったのです。
(シェル実行途中に Ctrl+C で止めることを繰り返すと固まる可能性が高まったような…)

ちなみに tee, cat, zsh は http://unxutils.sourceforge.net/ のものを、
tcsh は http://www2.wbs.ne.jp/~znc/tcsh/ のものを使っています。
おっと、バッチとは関係ない話になってしまいましたね。

とおりすがりとおりすがり 2013/02/25 15:01 パイプ前のERRORLEVEL取得で苦労してまして、こちらを拝見させていただきました。
cmd /v:on /c "prog1 & echo exit /b !ERRORLEVEL! > tmp.bat" | prog2
なんですが
パイプは"prog1"にはかからないですよね?
今苦戦してるのが
cmd /v:on /c "prog1 & echo exit /b !ERRORLEVEL! >tmp.bat | FINDSTR /b /v /r 'aa'"
ですが、実行すると
tmp.batは”exit /b 255”とか入るのですが、prog1に対してFINDSTRが効きません
また
cmd /v:on /c "(prog1 & echo exit /b !ERRORLEVEL! >tmp.bat) | FINDSTR /b /v /r 'aa'"
としても
prog1に対してFINDSTRが効くのですが、tmp.batは”exit /b !ERRORLEVEL!”となってしまい変換されてません

どうすればFINDSTRパイプ付きでprog1.exeのERRORLEVELを取得できるでしょうか?

otnotn 2013/02/25 20:19 cmd /v:on /c "prog1 & echo exit /b !ERRORLEVEL! >tmp.bat" | FINDSTR /b /v /r aa
では?
記事内容を読んでないのですか?

トラックバック - http://d.hatena.ne.jp/otn/20050214