今だけ人気マンガ100円レンタル特集♪

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

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

たとえば…

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

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

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

A 回答 (3件)

Win2000やXPなど NT系のコマンドプロンプトなら


usebackqを使って バッチの変数に代入してやればいいと思いますよ

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

> ECHO %%s


forを既に抜けてるんだから %%s はもうないでしょう。
set hogeしてるんだから表示するべきなのは%hoge%のほうでは?

あと、ANo.1が動かないのは @ の位置がおかしいだけじゃないかな?
    • good
    • 1

ちなみに usebackq オプションを使わないときには


for /F "delims=" %%s in ('hogehoge.exe あいうえお') do @set hoge=%%s
とシングルクォートでくくれば OK.

この回答への補足

前の方の方法だと強制終了してしまいましたが、こちらだとそうはなりませんでした。
ですが、代入されていないようでした。
そもそも、実行している外部ファイルがよくないのかもしれません…。

ちなみにnkfで、外部ファイルに記載されている文字列をURLエンコードしていくというのをやりたかったので

for /F "delims=" %%s in ('NKF.EXE --url-input %%X') do @set hoge=%%s
ECHO %%s
このように記載しましたが、ECHOはsとかOFFというように表示されました。
(echoの使い方に自信がないので %s%等も試してみましたが同じでした)

補足日時:2008/08/27 00:37
    • good
    • 0

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

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

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

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

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

Qコマンド実行結果を環境変数に代入する方法ありますか

下記のとおりfindコマンドを実行すると結果が表示されます。
findコマンドの実行結果を直接環境変数に代入したいのですが、
できますでしょうか。
できれば「5」だけを環境変数に代入したいです。
よろしくお願いします。

C:\tmp>find /C "OPEN" aaa.txt

---------- AAA.TXT: 5

Aベストアンサー

バッチファイルとして書くならこんな感じですね。

@echo off

for /f "tokens=3 delims= " %%a in ('find /C "OPEN" aaa.txt') do set RESULT=%%a

echo [%RESULT%]

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

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

例:
test.txt
abcacbacbacbacbacbacbacbacb

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

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

Aベストアンサー

これですね。

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

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

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

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

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

Aベストアンサー

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

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

区別するなら、

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

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コマンドの結果を変数に入れたい

現在のホスト名をhostnameコマンドで表示させられますが、この結果を変数に格納することはできますか?

set PCName=hostname
set PCName=%hostname%

と実行しても、上手くいきませんでした。

理由は、ホストネームはよく利用するので、変数に格納したいからです。

毎回、hostnameコマンドを実行し、マウスで範囲を選択し、コピー&ペーストでやって来ましたが、もう少し効率よく出来ればよいなと思い質問させていただきました。

分かる方いらっしゃいましたら、お願いいたします。

Aベストアンサー

環境変数のCOMPUTERNAMEではダメでしょうか?
(大抵同じものが入っていると思いますが)

echo %COMPUTERNAME%
hostname

あくまでもhostnameの結果が必要、と言う場合、WindowsのバッチだとFOR文を使う必要があります。

FOR /F "usebackq tokens=*" %i IN (`hostname`) DO @set hostname=%i
echo %hostname%

※バッチファイルに記述する時は %i ではなく %%i にしてください

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[バッチファイル]レジストリ値を取得し、それを条件としてif文動作分岐をする

インターネットオプションのプロキシ設定をバッチファイルでトグルさせようと思ったのですが、思うように動かないのでどなたか助けて頂けないでしょうか。
こちらを参考にさせて頂きました。
http://www.tkssoft.com/cmd/cmd013.html

@echo off
cls
set bool='reg query "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable'

if '%bool%'=='0' goto Set_1
if '%bool%'=='1' goto Set_0

:Set_1
reg add "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings" /f /v ProxyEnable /t reg_dword /d 1
goto :eof

:Set_0
reg add "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings" /f /v ProxyEnable /t reg_dword /d 0
goto :eof


明らかにset部分が間違っていると思うのですが、どのように直したらいいのかいろいろ試してみたのですがどうにも解決しませんでした。

インターネットオプションのプロキシ設定をバッチファイルでトグルさせようと思ったのですが、思うように動かないのでどなたか助けて頂けないでしょうか。
こちらを参考にさせて頂きました。
http://www.tkssoft.com/cmd/cmd013.html

@echo off
cls
set bool='reg query "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable'

if '%bool%'=='0' goto Set_1
if '%bool%'=='1' goto Set_0

:Set_1
reg add "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windo...続きを読む

Aベストアンサー

『コマンドプロンプト』を起動して、

set bool='reg query "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable'

と入力後、

set bool    (←または、echo %bool%)

と入力してみてください。単純に、

bool='reg query "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable'

と表示されるだけだと思いますョ。

"reg"コマンドの実行結果で分岐させるのでしたら、

reg query "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable

を実行すると("Windows XP"の実行結果では)、

! REG.EXE VERSION 3.0

HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings
ProxyEnable REG_DWORD 0x0

と画面に表示されますから、これをパイプ(半角の"|")を通して"find"コマンドに送り、"0x0"があるかどうかで、"ERRORLEVEL"を判定すると良いと思います。("find"コマンドは、指定した文字列が見つかれば、"ERRORLEVEL"に0を、見つからなければ1を返します。)

具体的には、

@echo off
cls
reg query "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable | find "0x0"

if %ErrorLevel%==1 goto Set_0
if %ErrorLevel%==0 goto Set_1

:Set_1
reg add "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings" /f /v ProxyEnable /t reg_dword /d 1
goto :eof

:Set_0
reg add "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings" /f /v ProxyEnable /t reg_dword /d 0
goto :eof

『コマンドプロンプト』を起動して、

set bool='reg query "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable'

と入力後、

set bool    (←または、echo %bool%)

と入力してみてください。単純に、

bool='reg query "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable'

と表示されるだけだと思いますョ。

"reg"コマンドの実行結果で分岐させるのでしたら、

reg query "HKEY_CURRENT_...続きを読む

Qバッチファイルで2つ以上の変数を連結し、1つの変数にしたい。

Windows2000でバッチファイルを作っています。
バッチファイルが受け取る2つのパラメータを %1 %2とすると、
それを連結して、新たな変数 A を作りたいのですが、どのようにすれば良いのでしょうか。

Aベストアンサー

SETで変数にパラメータをセットすればOKだと思います。

例)
SET A=%1%2
echo %A%

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します(負になることはないので)。

QDOSのバッチで、テキストファイル中の文字を置換したい

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

WindwsXPでDOSバッチを使ってテキストファイル中にある文字列1を文字列2に置換したいのです。
ネットをさまよっていて、こんな例を見つけました。
(参考にしたのはここです。http://www.fpcu.jp/dosvcmd/bbs/log/cat3/cat54/2-0391.html)

======================
@echo off
if "%1"=="" goto end
set fname=%1
copy %fname% org >nul
type nul >%fname%
for /f "tokens=1* delims=" %%a in ( org ) do (set line=%%a&& call :sub)

del org
goto end

:sub
:この1行下の acb=xyz に置換前と置換後の文字列を指定する。
set l=%line:abc=xyz%
echo %l%>>%fname%
goto :EOF

:end
======================

これをsample.batという名前で保存し、DOSのウィンドウでsample < a.txt と打つと、a.txtファイル中の"abc"が"xyz"に置き換わります。

これに手を入れて置換前と置換後の文字列を可変にしたく思い、sub中に

set mae=abc
set ato=xyz

の2行を加え、変数に値を設定するようにしました。

ところが、次の1行の書き変え方がわかりません。

set l=%line:abc=xyz%



set l=%line:%abc%=%xyz%%

のように変えてみましたが、うまく動きません。

どなたかご教授いただけませんか。DOSだけでファイル中の文字列の置換ができればset文を使う使わないにはこだわりません。

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

WindwsXPでDOSバッチを使ってテキストファイル中にある文字列1を文字列2に置換したいのです。
ネットをさまよっていて、こんな例を見つけました。
(参考にしたのはここです。http://www.fpcu.jp/dosvcmd/bbs/log/cat3/cat54/2-0391.html)

======================
@echo off
if "%1"=="" goto end
set fname=%1
copy %fname% org >nul
type nul >%fname%
for /f "tokens=1* delims=" %%a in ( org ) do (set line=%%a&& call :sub)

del org
goto end

:sub
...続きを読む

Aベストアンサー

No.5 です。

>勝手に引用してしまってすみません。
皆さんに参考にしてもらうために回答しているので気になさらずに引用してください。

さてご質問の件ですが、

◆予備知識
まず、環境変数を%で囲むと、バッチがその行を実行するときに環境変数の中身に置き換えられることを理解してください。
例)
set mae=abc
set ato=xyz

echo %mae% %ato% ←※

※の行が実行されるとき、実際は
echo abc xyz
と置き換えられてecho文が実行されます。

また、バッチ内では %% と%が2つ並んだ記述は1つの%に置き換えられます。

例)echo 10割は100%%
10割は100%


◆今回の場合

call set l=%%line:%mae%=%ato%%%
↓実行されるときに以下のように置き換えられます。
call set l=%line:abc=xyz%

置き換え後に call 文が実行されます。このcall文の記述だと set l=%line:abc=xyz% という1行のバッチを呼び出しているのと同等の動作になります。従って環境変数lineに入っている文字列のabcがxyzに置き換えられた結果が環境変数lに代入されます。
call文でワンクッション置いて、先に環境変数の mae と ato (と%%)だけ評価(環境変数の中身に置き換え)するようにしています。

◆単純に set l=%line:%mae%=%ato%% とした場合なぜうまくいかないか

set文の右辺の各要素を分けて書くと

%line:%(line: という環境変数の中身)→そんな変数は定義していないので空に置き換え

mae

%=%(= という環境変数の中身)→そんな変数は定義できないので空に置き換え

ato

%% → % に置き換え

と解釈されて
環境変数lには maeato% という文字列が代入されてしまいます。


余談ですがバッチ実行時にどのように置き換えられるか見たい場合は、
バッチ先頭のecho offの行を取って実行するとよく分かります。

No.5 です。

>勝手に引用してしまってすみません。
皆さんに参考にしてもらうために回答しているので気になさらずに引用してください。

さてご質問の件ですが、

◆予備知識
まず、環境変数を%で囲むと、バッチがその行を実行するときに環境変数の中身に置き換えられることを理解してください。
例)
set mae=abc
set ato=xyz

echo %mae% %ato% ←※

※の行が実行されるとき、実際は
echo abc xyz
と置き換えられてecho文が実行されます。

また、バッチ内では %% と%が2つ並んだ記述は1つ...続きを読む


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

人気Q&Aランキング