痔になりやすい生活習慣とは?

MS-DOSバッチの実行結果を文字列で取得したいです。

イメージ例としては、下記のようなバッチ2つがあり、
バッチAを起動します。そうすると実行結果の戻り値として
「TEST」という文字列が取得できたら良いです。
 ※下記例では「ERRORLEVEL」に入っているようなイメージです。

しかしながら、ERRORLELVEに格納できるのは数値のみの為、
エラーになってしまいます。
どうすれば、実行結果を戻り値で取得できるでしょうか?

お手数ですが、MS-DOSで不可能な場合、VBScriptやWSHでも
かまいませんので、処理をキックしてその戻り値を文字列で取得する方法を
お教えください。お願いいたします。

--------------------------------


【バッチA】

call バッチB
echo %ERRORLEVEL%

【バッチB】
exit /b "TEST"
--------------------------------

と実行し

このQ&Aに関連する最新のQ&A

A 回答 (1件)

環境変数を使うのはどうでしょうか。




【bat_a.bat】
set RETVAL=
echo RETVAL=%RETVAL%
call bat_b.bat
echo RETVAL=%RETVAL%


【bat_b.bat】
set RETVAL=TEST
    • good
    • 1

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qbatである文字列内に特定の文字列が含まれているか確認したい

batファイルの中である変数「abc」の中に「test」という文字が含まれていたら○○を行なうという分岐を作成したいのですが、どのように行なえばよいのでしょうか?

そのまま、ずばりのお答えお待ちしております。

よろしくお願い致します。

Aベストアンサー

大文字小文字を区別しなくていいなら、

if not "%abc:test=%" == "%abc%" echo 含まれていた

区別するなら、

echo %abc% | find "test" >NUL
if not ERRORLEVEL 1 echo 含まれていた

Qバッチファイル 戻り値

いつも大変御世話になっております。

WindowsVISTA環境で以下バッチ【ABC.bat】が稼動します。

"ABC.bat"-------------------------------------------------
@ECHO ON

set bat_name="ABC.bat"

call DEF.bat

echo %bat_name% は戻り値 %ERRORLEVEL% を受け取りました。
"ABC.bat"-------------------------------------------------

上記バッチの構文では以下バッチDEF.batを起動させ、ERRORLEVELを取得させます。

"DEF.bat"-------------------------------------------------
@ECHO ON

set bat_name="DEF.bat"

exit /b 10
"DEF.bat"-------------------------------------------------

実行結果は予想していたものと違っていました。
予想していた実行結果 : "ABC.bat" は戻り値 10 を受け取りました。
実際の実行結果     : "DEF.bat" は戻り値 10 を受け取りました。】

%ERRORLEVEL%のみを取得したかったのですが
DEF.bat の set bat_name="DEF.bat" までも取得してしまいました。

bat_name はどうしても "ABC.bat"とCALLする側の変数を使用したいのですが
制御は難しいでしょうか?

echo %bat_name% は戻り値 %ERRORLEVEL% を受け取りました。 の直前に
再度 set bat_name="ABC.bat" と記述しなければダメでしょうか?

尚、都合上、ECHO文と変数名は変えたくありません。

もしご存知の方がいらっしゃるようでしたら、お手数ですが
実現可能かどうかをご回答願いますでしょうか?

以上、何卒宜しくお願い致します。

いつも大変御世話になっております。

WindowsVISTA環境で以下バッチ【ABC.bat】が稼動します。

"ABC.bat"-------------------------------------------------
@ECHO ON

set bat_name="ABC.bat"

call DEF.bat

echo %bat_name% は戻り値 %ERRORLEVEL% を受け取りました。
"ABC.bat"-------------------------------------------------

上記バッチの構文では以下バッチDEF.batを起動させ、ERRORLEVELを取得させます。

"DEF.bat"-------------------------------------------------
@ECHO ON

set bat_name="DE...続きを読む

Aベストアンサー

以下で大丈夫かと。
"DEF.bat"-------------------------------------------------
@ECHO ON

setlocal

set bat_name="DEF.bat"

endlocal

exit /b 10
"DEF.bat"-------------------------------------------------

Qバッチ処理でファイルの中身を変数に入れるやり方

あるファイルの中には1行の文字列があります。
このファイルをバッチで読み取り、変数に設定したいです。

例:
test.txt
abcacbacbacbacbacbacbacbacb

test,bat
set DATA=[test.txtを読み込んだ値]

よろしくお願い致します。

Aベストアンサー

これですね。

参考URL:http://www.upken.jp/kb/dqvgHNRUxwFDkmtoqEwfXHUjDrevNv.html

Qbatファイルからsql文実行

クライアントOS:WIN2000
Oracle:9i(サーバ(UNIX)上にあります)

現在、クライアントからbatを起動し、SQL文を投げ、結果を取得したいと思っております。
(SQL文は単純にTBLをカウントしているだけです)

・batの中身
sqlplus %UID%/%PASS%@%SID% @test.sql > output

結果は取得出来るのですが、余分な情報も結果に出力されてしまいます。結果のみを出力させるにはどうすればよろしいでしょうか?

・余分な情報
Oracle9i Enterprise Edition Release 9.2.0.4.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.4.0 - Production
に接続されました。

Aベストアンサー

sqlplus に -S オプションを追加してみればどうでしょうか。

参考URL:http://biz.rivus.jp/sqlplus_overview.html

Qバッチファイル 文字列にスペースがある場合

for /f %%A in ('dir /b /s c:\a aa*.pdf') do copy "%%A" D:\

これはcドライブのa aaというフォルダ名の中を検索するコードですが、
フォルダ名にスペースがあるため、うまく動きません。

"a aa"のように""で囲ってみましたが、駄目でした。

どうすれば良いのか、教えていただきたいので、お願いします。

Aベストアンサー

for /f %%A in ('dir /b /s c:\"a aa"\*.pdf') do echo copy "%%A" D:\
のようにecho でどのようなコマンドが実行されているか確認しましょう。

この記述ではdirコマンドで表示されるパスの中に空白があるため %%A には空白までの文字列しか代入されません。
以下のように修正して試してみてください。

for /f "delims=" %%A in ('dir /b /s c:\"a aa"\*.pdf') do copy "%%A" D:\

QコマンドプロンプトのERRORLEVELについて!

コマンドプロンプトの記述で、ERRORLEVELというのがありますが
そのERRORLEVELが、0の場合は正常終了と考えていいのでしょうか?

Aベストアンサー

>if not ERRORLEVEL 1 goto aaa
>教えていただいた上記記述なんですが、
>1じゃないということは、2~255も含まれるのではないのでしょうか?
>素朴な疑問ですいません。

if文の文法については、if /? で調べてください。

if ERRORLEVEL 1 goto aaa は、ERRORLEVEL が1以上の時にgoto aaaするという意味です。ということを#4の人が書いてるのですが・・・
従って、その否定である、
if not ERRORLEVEL 1 goto aaa は、ERRORLEVEL が1未満つまり0のときにgoto aaaします(負になることはないので)。

QVBscriptからバッチに変数を渡すには?

VBscriptからバッチに文字列を渡したいのですが、どう書いたらいいでしょうか?

VBscriptにWscript.Quit 1と数字を入れた場合、バッチ側は%errorlevel%で取得できると思うのですが、文字列は出来ませんでした。

よろしくお願いします。

Aベストアンサー

こんな感じでできると思います。

[VBS側]
'環境変数に格納したい値をEchoして終了
WScript.Echo kekka

[バッチ側]
for /f "usebackq tokens=*" %%i IN (`call cscript //nologo <vbsフルパス>\hoge.vbs`) DO @set vbskekka=%%i

※INの中のクォートはバッククォートである点に注意

私はこんな感じでよく使っていて、もちろん文字列もOK
ですが、日本語が扱えるかどうかは未検証です。
(半角英数以外はつかった事がない)

Qbatファイルの結果をテキストに吐き出すには?

以下のようなWindowsユーザーのパスワード変更batの結果(正常に出来たかどうか?)をCドライブに吐き出したいのですが、どうbatファイルを書き換えればよいでしょうか?
(とりあえず以下の内容でbatをたたいたのですが、うまく結果が出ません。。。)

henkou.bat
--------------------------------------
net user "test user1" ps123456 /domain
net user "test user2" ps456789 /domain
henkou.bat > c:\henkou結果.txt
pause
--------------------------------------

吐き出されたhenkou結果.txt
--------------------------------------
C:\>net user "test user1" ps123456 /domain
--------------------------------------

DOS画面(吐き出したいもの)
--------------------------------------
C:\>net user "test user1" ps123456 /domain
コマンドは正常に終了しました。

C:\>net user "test user2" ps456789 /domain
コマンドは正常に終了しました。

C:\>henkou.bat 1>c:\henkou結果.txt
--------------------------------------

以下のようなWindowsユーザーのパスワード変更batの結果(正常に出来たかどうか?)をCドライブに吐き出したいのですが、どうbatファイルを書き換えればよいでしょうか?
(とりあえず以下の内容でbatをたたいたのですが、うまく結果が出ません。。。)

henkou.bat
--------------------------------------
net user "test user1" ps123456 /domain
net user "test user2" ps456789 /domain
henkou.bat > c:\henkou結果.txt
pause
--------------------------------------

吐き出されたhenkou結果.t...続きを読む

Aベストアンサー

henkou.bat
--------------------------------------
@ECHO OFF

IF NOT EXIST %temp%\Redirect.txt GOTO REDIREXEC

@ECHO ON

net user "test user1" ps123456 /domain
net user "test user2" ps456789 /domain

@ECHO OFF

GOTO END

:REDIREXEC

ECHO REDIRECT > %temp%\Redirect.txt

CALL TEST.BAT > c:\henkou結果.txt

DEL %temp%\Redirect.txt

PAUSE

:END
--------------------------------------

こんな感じでどうでしょうか。

Qバッチでテキストファイルから任意の行のみ取得したい

batファイルを作成していて、
txtから特定の行のみをとりだし、変数に入れたいです。
どうもよくわからないので質問したいと思います。
まず以下の様なテキストファイルがあります。
-------------------
111
222
333
-------------------
実際の値、行数は違いますが、こんな感じに文字列が複数行並んでいます。

行いたい動作は、
-----------------------------------------
1.テキストファイルの1行目を変数Textに入れる(set Text=111)
2.変数Textを使用し色々処理をする
3.テキストファイルの2行目を変数Textに入れる(set Text=222)
4.変数Textを使用し色々処理をする
-----------------------------------------
コレを繰り返します。
2と4は同じ動作ですので、行数のカウンタを設定しループさせる予定です。
n行目を全て取り出す方法がわかれば行けると思うのですが、
どうも見つかりません。ご存知の方がいればお教え願いたいと思います。

batファイルを作成していて、
txtから特定の行のみをとりだし、変数に入れたいです。
どうもよくわからないので質問したいと思います。
まず以下の様なテキストファイルがあります。
-------------------
111
222
333
-------------------
実際の値、行数は違いますが、こんな感じに文字列が複数行並んでいます。

行いたい動作は、
-----------------------------------------
1.テキストファイルの1行目を変数Textに入れる(set Text=111)
2.変数Textを使用し色々処理をする
3.テキストファイルの2行目を変数T...続きを読む

Aベストアンサー

No3ですが、たぶん提示したスクリプトを見ると、ある事に気がつくはず?

findstr /n /r "." a.txt | findstr /r "^3:"

で3行目を表示してくれます。え!? それだけ。そうなんです

ただ、あと、先頭の”3:” をどうやって切り離すか? と言う問題にぶつかる。さらにファイルに先頭に”3:”があった場合、どうするのか? さらに、findstr の正規表現の動作が??? 表示すれるのはいいが、変数にどうやってセットするのか?

となる。結局 for 文を使いまわす事になります。

まあ、適当に改変して、上記の問題を解決してください。

Qコマンドプロンプト バッチ|結果を変数に代入する方法

バッチで、外部のEXEを実行した結果を変数に代入する方法を教えてください。

外部のEXEは
hogehoge.exe あいうえお
と実施した場合
おえういあ
という結果を返します。

たとえば…

SET HOGE=hogehoge.exe あいうえお
ECHO %HOGE%

の結果として おえういあ を表示する
という風にしたいです。

Aベストアンサー

Win2000やXPなど NT系のコマンドプロンプトなら
usebackqを使って バッチの変数に代入してやればいいと思いますよ

for /F "usebackq" %%s in (`hogehoge.exe あいうえお`) DO@ SET HOGE=%%s
といった具合で in句の『hogehoge.exe あいうえお』の実行結果が バッチ変数 %%sに代入されます


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング