• 締切済み

変数の受け渡しについて

MS-DOSのBATファイル内に「VBで作成したEXEファイルをCALLする」記述を 追記しようと思っています。 全体の流れは、BATファイルの処理中に使用している変数をEXEファイルに引き渡し、 EXEファイルは受け取った変数の条件分岐処理をし、その結果を再びBATファイルに 返すことです。 教えていただきたい内容は、変数を受け取る際および引き渡す際の記述の仕方についてです。 ちなみにEXEファイルの処理内容は、受け取った変数(日付:YYMMDD書式)のMMの箇所が 「01~03」の場合はAを、「04~09」の場合はB、「10~12」の場合はCを 新しい変数としてBATファイルに返すことです。 どうかよろしくお願い致します。

  • p---
  • お礼率0% (0/2)

みんなの回答

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.2

BATからVBは、Command関数を使うしかないので、VBからBATへのほうを。 結論からいうと、VBからは値を返すことはできません。 プログラムから返すことができる値は終了コード、つまり、ERRORLEVELだけです。 で、次の3つの案を考えましたので参考にしてください。 1.条件によって、VBで3種類の名前のファイルを作成し、BAT側ではEXISTでファイルの存在チェックをして処理を分岐させる。 2.VBを起動した後の部分を別のBATにして、Shell関数でパラメータをつけてBATを起動する。 3.3種類のBATファイルを準備して、それぞれの条件のときに別々のBATファイルをShell関数で起動する。 ちなみに、個人的なお勧めは2ですけどね。

  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.1

こんにちは。maruru01です。 VBのEXEファイルに値を引き渡すには、 VBのEXEファイル名.exe 値 とします。 プログラムの中では、Command関数で取得します。 temp = Command という風です。 引渡しは、外部ファイルとかに書出して、それを読み込むのが早いのかな。 ところで、BAT処理の部分もVBに書いてしまうわけにはいかないのでしょうか。 その方がずっと簡単だし。 では。

p---
質問者

補足

回答ありがとうございます。 さっそく試してみようと思います。 全処理をVBでやらないのは、 ・メインの処理はDOSコマンドのXCOPYであること。  (20階層ちかくあるディレクトリのコピー処理) ・私自身VBには全然詳しくなく、大改造するには時間がかかってしまう。 この2つのためです。 VB上で「ディレクトリ情報を読みこんで作成する」処理を繰り返すことで XCOPYと同様の処理ができるらしいことは見たのですが、 実現する技量がないためにBAT+EXEという方法に決めました。 他に何か良い方法がありましたら教えていただけると助かります。 よろしくお願いいたします。

関連するQ&A

  • ページ間での変数の受け渡し

    6つのhtmlファイルと6つのperlファイルからなるアンケートページを作成しています。 ページを遷移するごとに、perlファイルを実行し、未入力があれば、エラー表示、条件を満たせば、ファイルを作成し、内容を書き込み処理させています。 ただ集計に関しては、最後のhtmlファイルのsubmitボタンを押したときにすべて集計をさせたいと考えています。(各設問ごとの集計ファイルは作成済み) 最後のページの処理に対応するperlファイルに最初のページからの変数を宣言していますが、うまく集計されません。どのようにすれば、最後のページのsubmitボタンを押せば集計されるようになるのでしょうか? うまく伝わっているかわかりませんが、宜しくお願いいたします。

  • コマンドプロンプトのバッチについて

    test01.bat >> YYMMDD結果.txt コマンドプロンプトのバッチ処理を実行結果をテキストで保存したいのですが、ファイル名を、 「YYMMDD結果.txt」と"YYMMDD"に本日の日にちを入れたいのですが、どのようにすればよいのでしょうか?

  • bashで変数に追記

    bashで、変数に改行も含めて追記したいです。 具体的には echo $Var AA のとき、何か処理を行うことで echo $Var > /tmp/file less /tmp/file AA BB ・ ・ ・ としたいです。 わからなポイントとして以下の2点です。 1.bashでの変数への追記 2.リダイレクトしたものをlessで見るときに、 less /tmp/file AA BB ・・・・ となってしまわないこと です。 ご教授願えたらと思います。

  • バッチ処理でファイル名に日付を指定したい

    こんにちは。 使用OS:WindowsNT4.0 Server バッチファイルで、 c:\>dir >yymmdd.dat というコマンドを実行させたいのですが、ファイル名としてyymmddのところを実行した日付にしたいのです。 で、yymmddの値が正しくなるようにバッチ処理中に日付を取得して、その値を変数に代入しなければならないと考えるのですが、変数に日付を代入するコマンドがわかりません。 そもそも無理なことなのかもしれませんが、バッチ処理でシンプルに行えたらなと考えております。 方法はありますでしょうか? その後に予想される問題なのですが、仮に変数に日付が代入されたとしても、その変数の内容をファイル名の一部として指定できるかどうかも分かりません。 重ねて質問ですがこれが無理な場合、何か代替案はないでしょうか? 何がしたいかと言うと、ドライブの空き容量を定期的に自動で吐き出させたいのです。 ソフト(フリーも含めて)に頼る方法が有るのでしょうが、基本的にソフトの導入は敬遠したいと考えております。 宜しくお願い致します。

  • Shell関数内で変数を使うことについて

    お世話になります。 MicrosoftのサイトやAccessVBAのヘルプ、各種掲示板を拝見してもぴったりくるものが見つからなかったので教えていただきたく思います。 AccessVBAからExcelファイルを開きたいと思っています。 コマンドボタンウィザードを参考にして、 Call Shell("Excel.exe フルパス"vbMaximizedFocus)としました。 フルパスは変数を使用しております。 変数は2つの変数と&で結んだ文字列で構成されています。内容は以下の通りです。 MyCurrent & "\" & MyFile & ".xls" (MyFile = InputBox("保存したいファイル名を入力できます。", "ファイル名)、MyCurrent = Application.GetOption("Default Database Directory")を意味します。InputBoxでユーザーにファイル名を決定してもらい、既定のデータベースフォルダにそれを保存させます。) MyCurrentの中身は私のPCの場合はC:\Documents and Settings\●\デスクトップです(●=私の名前。スペースなし)。 ここで問題なのですが、Micorsoftのサイトによると、Shell関数内で半角スペースを含むフルパスやファイル名を記述すると、うまくいかないので"(ダブルコーテーション)を入力する必要があるとありました。 変数ではなく、普通にフルパスを入力する際には"を記述してファイルを開くことができたのですが、変数の場合それをどのようにしたら良いのかわからないのです。 変数そのものには半角スペースがなくても、変数の中身に半角スペースが存在する場合はその半角スペースをどのように回避したらよいのでしょうか? もしかして、変数の中身にあった場合は駄目なのでしょうか? 長文で申し訳ありませんが、よろしくお願いいたします。

  • バッチファイルの環境変数を別のファイルにまとめたい

    コマンドプロンプトの勉強を始めましたが、分からない事があります。 a.ini------------ HENSU01=20081231 HENSU02=20090101 HENSU03=D:\temp ----------------- 例えば上記のような必要な環境変数をひとまとめしたa.iniがあるとします。 これをx.batとy.batを実行する時に参照して同じ環境変数として共用したいのですが、何か良い方法はありませんか? 別のバッチファイルからa.iniの内容で環境変数を設定後に'call x.bat'とすれば、上手く行きそうな気はするのですが、肝心の環境変数の設定の仕方が分かりません。 なお、a.iniにはsetコマンドは記述しないで、上記の形式のままで使用したいです。 どなたか具体的ご教授お願いします。 よろしくお願いします。

  • バッチファイル 時間変数 短縮化

    バッチファイル 時間変数 短縮化 お世話になっております。 WindowsXP環境にて下記のバッチファイルがあります。 コード-------------------------------------------------------------------------------- set BAT_FILE=TIME.bat set LOG_DIR=D:\test set LOG_FILE=LOG.txt set LOG_FILENAME=%LOG_DIR%\%LOG_FILE% set yyyy=%date:~-10,2% set yy=%date:~-8,2% set mm=%date:~-5,2% set dd=%date:~-2,2% set HH=%TIME:~0,2% set MM2=%TIME:~3,2% set SS=%TIME:~6,2% echo %BAT_FILE% 処理日 = %yyyy%%yy%/%mm%/%dd% 第一処理開始時間= %HH%:%MM2%:%SS%>> %LOG_FILENAME% echo. >> %LOG_FILENAME% 処理A(プログラムは省略) set yyyy=%date:~-10,2% set yy=%date:~-8,2% set mm=%date:~-5,2% set dd=%date:~-2,2% set HH=%TIME:~0,2% set MM2=%TIME:~3,2% set SS=%TIME:~6,2% echo %BAT_FILE% 処理日 = %yyyy%%yy%/%mm%/%dd% 第一処理終了時間= %HH%:%MM2%:%SS%>> %LOG_FILENAME% echo. >> %LOG_FILENAME% set yyyy=%date:~-10,2% set yy=%date:~-8,2% set mm=%date:~-5,2% set dd=%date:~-2,2% set HH=%TIME:~0,2% set MM2=%TIME:~3,2% set SS=%TIME:~6,2% echo %BAT_FILE% 処理日 = %yyyy%%yy%/%mm%/%dd% 第二処理開始時間= %HH%:%MM2%:%SS%>> %LOG_FILENAME% echo. >> %LOG_FILENAME% 処理B(プログラムは省略) set yyyy=%date:~-10,2% set yy=%date:~-8,2% set mm=%date:~-5,2% set dd=%date:~-2,2% set HH=%TIME:~0,2% set MM2=%TIME:~3,2% set SS=%TIME:~6,2% echo %BAT_FILE% 処理日 = %yyyy%%yy%/%mm%/%dd% 第二処理終了時間= %HH%:%MM2%:%SS%>> %LOG_FILENAME% echo. >> %LOG_FILENAME% コード-------------------------------------------------------------------------------- 上記プログラム内の処理A及び、処理Bは比較的長い処理である為、その前後の処理時間帯を上記のように時間変数で取ってログに出力されています。 しかし、上記のように最新の処理時間帯をわざわざ何行もある各時間変数を宣言して取得するのはプログラム的に長くなってしまい、かつ醜いです。 上記方法以外に時間変数のスッキリとした取得方法は無いのでしょうか? ご存知の方がいれば、ご教授願いますでしょうか? 何卒宜しくお願い致します。

  • DOSバッチファイルへの引き渡し方法

    次のような操作をしたいのですが。 御教示下さい。 操作の流れ テキストファイルに一文字出力する CMD1 > a.txt テキストファイルa.txtには、一文字しかはいらない 1やa など そのa.txt の内容を判断して バッチファイルb.bat内で分岐処理したい   b.bat 内  if 'a.txtの内容' により分岐処理

  • autoexec.batをウインドウズXPで変更するには?

    ウィンドウズXPのPROで、AUTOEXEC.BATを実行する場合、どうしたらいのでしょうか?MS-DOSコマンドプロンプトでルートディレクトリに変更後、TYPE C:AUTOEXEC.BATを入力してもファイルが見つかりませんと表示されます。起動時に簡単なファイルのコピィーをする記述を加えたいのですが、XPでは出来ないのでしょうか?MS-DOS時代の人間でさっぱり分かりません。よろしくお願いします。]

  • Javaの環境変数の設定について。

    独習Javaで環境変数の設定でつまずいて先に進めない状態です。Autoexec.batというファイルにC:\Program Files\Java\jdk1.5.0\BINというパスを追加しても再起動をかけると「パラメーターが多すぎます」というエラーが出てsafe modeでパスを消去しないといけなかったり、MS-DOSで実際にコンパイルをしようとしても「コマンドまたはファイル名が違います」というエラーが出ます。 OS:Windows98 Autoexec.batの内容は SET DOS4G=QUIET C:\PROGRA~1\NETWOR~1\MCAFEE~1\SCAN.EXE C:\ /NOBREAK /SILENT @IF ERRORLEVEL 1 PAUSE @ECHO OFF loadhigh c:\windows\COMMAND\nlsfunc.exe c:\windows\country.sys SET PATH=C:\FJUTY; REM Environment Settings For McAfee VirusScan SET PATH=%PATH%;C:\PROGRA~1\NETWOR~1\MCAFEE~1;C:\Program Files\Java\jdk1.5.0\BIN です。 どのようにしたらコンパイル、実行出来るように なるでしょうか? 最初でつまずいて先に進めないので どなたか教えて下さい。よろしくお願いします。

専門家に質問してみよう