batファイルで呼び出す際に戻ってこない問題について

このQ&Aのポイント
  • batファイルで他のbatファイルを実行する際、戻ってこない問題が発生しています。問題の原因と解決方法を教えてください。
  • 呼び出したbatファイルが戻ってこない問題について、具体的なコードを示しつつ原因と解決策を教えてください。
  • batファイルで呼び出すと戻ってこない問題について、原因と対処法を詳しく教えてください。コードも示してくださると助かります。
回答を見る
  • ベストアンサー

batファイルで、call使っても戻ってこない

こんにちは 教えてほしいことがあります。 batファイルで他のbatファイルを実行するためにcallで呼び出すと、処理がまた戻ってくる事を知り、 以下のようにやってみたのですが、戻ってきている様子がありません。 どこが間違っているのか教えていただければと思います。 以下file-backup.bat echo 処理開始 >> %LOG% date /t >> %LOG% time /t >> %LOG% C:\****\Backup\FastCopy198\fastcopy.exe /cmd=force_copy /auto_close /open_window /error_stop=TRUE /log /from_date="-2D" "D:\file2" "/to=\\********\file2" @echo off call "Z:\file-backup2.bat" echo 処理終了 >> %LOG% ←---これ以下がログファイルに表示されない time /t >> %LOG% echo. >> %LOG% ログに「処理終了」が入ってきませんので、callで戻ってきていないと判断しました。 環境はwinserver2008です。 ご教授お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • davidfox
  • ベストアンサー率58% (21/36)
回答No.5

>どこが間違っているのか教えていただければと思います。 --> call で戻っている可能性があるのに断定している処。 > ログに「処理終了」が入ってきませんので、callで戻ってきていないと判断しました。 --> それは考えがおかしい。そう思うなら   echo 処理終了   とでも変えればいいです。表示されたら戻っている訳ですから。   そもそも %LOG% には絶対パスでファイル名をセットしていますか?   多分、カレントが変わってしまっていると予想します。

その他の回答 (5)

  • 0909union
  • ベストアンサー率39% (325/818)
回答No.6

CALLについての推察は、他の方の指摘であたっているのだろう。 私は、他のコマンドの呼び出しについて。 私もCALLを最初に思いつきましたが(15年前)、実は START コマンドの方が向いているし、32bit Winアプリにも合うことがわかりそれを多用しています。 逆にBATファイルや、DOSコマンドなど意外な機能もあったので、今はStartで呼び出しています。 利点 1. 擬似的なバックグランド処理ができる。MS-DOSや以前のDOS(IBM-DOS)の6.0ぐらいまではUNIX系のシェルのバックグランド処理指定ができませんでした。UNIX系だとコマンドの直後に”&”を付けるだけでバックグランドとなり、コマンドプロンプトなのに、並列処理ができました。しかも優先順位がつけられます。 これと同じごとができます start /b 2. 待ち状態が指定可能。 並列処理したりWin32アプリだと、実行と共に処理が次の行に移るために、結果を待つ場合、不都合が生じます。その時 start /wait でいいわけです 他の処理は start /? で見てください。そして、試してみてください。 今回の場合も処理が終了してから実行するなら、 start /wait **.bat ちなみにコマンドプロンプトでは、Win32アプリは処理を待たないのをしっていますか? start /b /wait notepad & echo back start /b notepad & echo back この違いわかりますか さらに他の方も指摘していますが・ >ログに「処理終了」が入ってきませんので、callで戻ってきていないと これは、大いに間違えています。何が間違っているのか、気がつかないと、今回の問題は解決しません。まあ、解決したとしても、たぶん次回も同じまちがいをしてつくってしまって、手に負えなくなり、他人にきくことになるのでしょう。

alp2010
質問者

お礼

皆様からのアドバイスありがとうございました。 コマンドとカレントディレクトリについてまだまだ知識が浅かったと反省しております。 無事処理ができました。 ありがとうございました。

  • 8ive22ty
  • ベストアンサー率52% (770/1479)
回答No.4

No.2の続きです。 file-backup2.batがあやしいですね。 file-backup2.batについて次のことはありませんか。 ・正常に終了していない。 ・他のバッチファイルをcall無しで実行していてそこで処理が終了してしまっている。

  • SaKaKashi
  • ベストアンサー率24% (755/3136)
回答No.3

Z:\file-backup2.bat の中に exit っと書いてませんか?

  • 8ive22ty
  • ベストアンサー率52% (770/1479)
回答No.2

任意の引数を与えてcallしてみてはどうですか。

  • SaKaKashi
  • ベストアンサー率24% (755/3136)
回答No.1

call "Z:\file-backup2.bat" これが動いたかどうかは?

alp2010
質問者

補足

これは動きました。

関連するQ&A

  • BATファイル内で、他のネットワークドライブにある

    BATファイル内で、他のネットワークドライブにあるBATファイルを実行させたいのですが、うまくいきません。 どなたかご教授お願いします。 【詳細内容】 環境 サーバA  winserver2008 サーバB  winserver2003 ネットワークはworkgroupです Aにあるfile-backup.batを実行するのですが、その時にBにあるfile-backup2.batという別の BATファイルを実行させたく、以下のようにしました。 file-backup.bat ~他の処理~ @echo off call \\サーバB\bat\file-backup2.bat するとcall先も実行しませんし、処理も戻ってきません。 ネットワーク間のBATファイル実行には何か別の方法があるのでしょうか?。 よろしくお願いします。

  • 複数の自作バッチプロラムの共有ログを採取する方法

    複数の自作バッチプロラムの共有ログを採取する方法 os:windows xp バッチプログラムの開始前後にログ出力をします。 普通にバッティングせずに動くと、後述のサンプル・ログ(1)のように綺麗にとれます。 しかし、 バッティングした際に正しく取れません。 dos batファイルでやったところ、掴んでいるときに後から行った方の出力がされません。  → サンプル・ログ(1) それならと、 vbsで同じ事を作ってみました。 すると、掴んでいるときに後から行った方がエラーでコケました。 ファイルの定義やオープンの時に「掴んでいたら無制限に待つ」とか「タイムアウトまで待つ」とか、そういう事はできるでしょうか? 複数のアプリから同じファイルにIOするには仕組みとして何かが足りないのでしょうか? 以上、よろしくお願いします。 ■サンプル・ログ (1) ===== FILE_TIME.log ===== 2010/03/05- 9:00:00.00,処理1,開始 2010/03/05- 9:00:00.00,処理2,開始 2010/03/05- 9:30:00.00,処理1,終了 2010/03/05- 9:40:00.00,処理2,終了 ===== FILE_TIME.log ===== (2) ===== FILE_TIME.log ===== 2010/03/05- 9:00:00.00,処理1,開始 2010/03/05- 9:30:00.00,処理1,終了 2010/03/05- 9:40:00.00,処理2,終了 ===== FILE_TIME.log ===== ■サンプル・バッチファイル ===== Shori1.bat ===== @echo off echo %date%-%time%,処理1,開始 >> FILE_TIME.log rem 処理1呼び出し echo %date%-%time%,処理1,終了 >> FILE_TIME.log ===== Shori1.bat ===== ===== Shori2.bat ===== @echo off echo %date%-%time%,処理2,開始 >> FILE_TIME.log rem 処理2呼び出し echo %date%-%time%,処理2,終了 >> FILE_TIME.log ===== Shori2.bat ===== ■サンプル・vbs ===== Shori1.vbs ===== Set ObjSFS = WScript.CreateObject("Scripting.FileSystemObject") Set ObjLogFile = ObjSFS.OpenTextFile("FILE_TIME.log", 8, True) ObjLogFile.WriteLine Now() & ",処理1,開始" ObjLogFile.Close rem 処理1呼び出し Set ObjLogFile = ObjSFS.OpenTextFile("FILE_TIME.log", 8, True) ObjLogFile.WriteLine Now() & ",処理1,終了" ObjLogFile.Close ===== Shori1.vbs ===== ===== Shori2.vbs ===== Set ObjSFS = WScript.CreateObject("Scripting.FileSystemObject") Set ObjLogFile = ObjSFS.OpenTextFile("FILE_TIME.log", 8, True) ObjLogFile.WriteLine Now() & ",処理2,開始" ObjLogFile.Close rem 処理2呼び出し Set ObjLogFile = ObjSFS.OpenTextFile("FILE_TIME.log", 8, True) ObjLogFile.WriteLine Now() & ",処理2,終了" ObjLogFile.Close ===== Shori2.vbs =====

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

    バッチファイル 時間変数 短縮化 お世話になっております。 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は比較的長い処理である為、その前後の処理時間帯を上記のように時間変数で取ってログに出力されています。 しかし、上記のように最新の処理時間帯をわざわざ何行もある各時間変数を宣言して取得するのはプログラム的に長くなってしまい、かつ醜いです。 上記方法以外に時間変数のスッキリとした取得方法は無いのでしょうか? ご存知の方がいれば、ご教授願いますでしょうか? 何卒宜しくお願い致します。

  • fastcopyとタスクスケジューラ使用時の挙動

    こんにちは。 社内でサーバAの特定データをサーバBに上書きコピーしたいのですが、下記の現象に困っています。 ◎環境:windows2008server update済み ◎fastcopy2.08 ◎対象batファイル(サーバA内) echo 処理開始 C:\@Fujixerox\Backup\FastCopy208\fastcopy.exe /cmd=force_copy /auto_close /open_window /error_stop=TRUE /log /from_date="- 4D" "D:\data_ele" "/to=\\サーバB\data_ele" @echo off call "Z:\file-backup2.bat" echo 処理終了 このバッチファイルは単独では正常に起動しますし、タスクスケジュールでも全般タブ 内のセキュリティオプションで「ユーザーがログインしている時のみ実行する」を選ぶと、タスク実行完了します。 ところがセキュリティオプションの「ユーザーがログインしているかどうかにかかわらず実行する」を選ぶと タスクは実行するのですがBATファイルのfastcopyコマンドラインのところで止まって、タスクが完了しません。 (ログ開始の部分はログに記載されていました) そこで試しに以下のことを実験しました。 1.新たにBATを作り、転送先を別サーバではなくサーバA内の別ドライブに設定し実行すると、fatcopyも正常に動きました。 2.そのBATファイルで、転送先をサーバBにすると、上記と同様の現象で、タクスが完了しませんでした。 常にログイン状態はマズイので、なにか対策がわかる方がおいでれば教えてください。 fastcopyというよりもタスクの問題のような気がしますが、よろしくお願いします。 管理者権限からみかなと思いますが。

  • batによるiniの読み込み。

    宜しくお願いします。 表題の通りなのですが、batファイルでiniを読み込み、それを基にログの出力やデータのバックアップをするには、どのようにすれば良いのでしょうか? バックアップ方法は、"robocopy"です。 以下に、現状の"bat"と"ini"を記載します。(bat内で処理させたい流れです) #####【backup.bat】##### REM iniファイルの読み込み。 REM 確認できなかったら、異常終了する。 IF NOT EXIST backup.ini ( (echo !date! !time! iniファイル[backup.ini]がありません) exit /b 16 ) REM ログの出力先フォルダチェック。 REM 指定のパスに存在しない場合は、作成する。 IF NOT EXIST %LOG%. ( mkdir %LOG% ) REM バックアップ元/バックアップ先フォルダが存在するか確認する。 REM 確認できなかったら、異常終了する。 REM 異常終了の場合、失敗ログを変数"%LOG%"に出力する。 IF NOT EXIST %FOLDER% %BK_FOLDER% ( (echo !date! !time! 対象フォルダ[%FOLDER% %BK_FOLDER%]がありません。) >> %LOG% SET RTN_CD=16 SET GOTO RTN_END ) ) REM robocopy実行 FOR /F "tokens=1,2" %%A in ('type %INI%') do ( set %FOLDER%=%%A set %BK_FOLDER%=%%B ) robocopy %FOLDER% %BK_FOLDER% /IS /MIR /COPYALL REM robocopyによるバックアップが正常終了したか確認する。 REM 正常終了した場合は、成功ログを変数"%LOG%"に出力する。 "ここはまだ分かりませんので、無視しても構いません。 もし大丈夫でしたら、ご教授お願いします。" #####【backup.ini】##### '#ログの出力先 LOG=D:\log '#バックアップ元フォルダ FORDER="M:\testfolder" '#バックアップ先フォルダ BK_FORDER="Z:\bkupfolder" です。 最近、batファイル等について独学で学び始めたばかりのため困っています。 各サイト等を参照しているのですが、どうしても上手く出来ません。 コマンド操作の理解を少しずつでも深めたいので、お手数をかけますが、ご教授を宜しくお願いします。

  • batファイル callを連続実行したい

    batファイルを作っています。 batファイルの中で、2つのファイルを実行したいのですが、1つ目は実行しますが、2つ目に自動で行きません。 どうすればよいでしょうか? 実行したいファイル 1つ目:batファイル 2つ目:mdbファイル(の起動) 現在の状況 ---------------- @echo off call D:\aaa.bat call D:\ccc.MDB ---------------- と記述しています。

  • batファイルの記号

    batファイルでechoコマンドがあると思いますが、 下記の文章のように記号を二つ並べているのはなぜでしょうか? ※>>の部分 echo [%DATE% %TIME%] >> "%~dp0%\test.txt"

  • バッチファイル 2つのログに出力 短縮版

    お世話になっております。 WindowsXP環境にて下記のバッチファイルがあります。 コード-------------------------------------------------------------------------------- rem === 変数設定 =============================================================== rem --- 時間変数 --- 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% rem --- フォルダ変数 --- set LOG_DIR1=D:\test rem --- ファイル変数 --- set LOG_FILE1=LOG.txt set LOG_FILE2=LOG_ALL.txt set LOG_FILENAME1=%LOG_DIR1%\%LOG_FILE1% set LOG_FILENAME2=%LOG_DIR1%\%LOG_FILE2% set BAT_FILE1=test.bat rem コマンド拡張機能有効化 setlocal ENABLEEXTENSIONS rem === 変数設定 =============================================================== REM <開始処理>=============== call :TIME echo %BAT_FILE1% 処理日 = %yyyy%%yy%/%mm%/%dd% 処理開始時間= %HH%:%MM2%:%SS%>> %LOG_FILENAME1% echo. >> %LOG_FILENAME1% echo %BAT_FILE1% 処理日 = %yyyy%%yy%/%mm%/%dd% 処理開始時間= %HH%:%MM2%:%SS%>> %LOG_FILENAME2% echo. >> %LOG_FILENAME2% rem 現在の日付/時間を取得 :TIME 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% exit /b コード-------------------------------------------------------------------------------- 上記プログラムは日付を2つのログに出力していますが、 echo %BAT_FILE1% 処理日 = %yyyy%%yy%/%mm%/%dd% 処理開始時間= %HH%:%MM2%:%SS%>> %LOG_FILENAME1% echo. >> %LOG_FILENAME1% echo %BAT_FILE1% 処理日 = %yyyy%%yy%/%mm%/%dd% 処理開始時間= %HH%:%MM2%:%SS%>> %LOG_FILENAME2% echo. >> %LOG_FILENAME2% と二重になっている無駄なコードとなり、見栄えが良くないです。 これを1つのコードで2つのログファイルに出力可能な短縮プログラムは可能でしょうか? ご存知の方がいましたら、ご教授願いますでしょうか? 何卒宜しくお願い致します。

  • Date Timeを1行に出力(xxx.bat)

    バッチを用いて、ログファイルにDateとTimeを 同じ行に書き出したいと考えます。 現状、xxx.bat--------------- echo %date% >> mylog.txt echo %time% >> mylog.txt mylog.txtは、下記のようになっています。 2012/05/01 22:56:08.61 これを、 2012/05/01  22:56:08.61 のように出力させたいのです。 どのようにすれば、可能でしょうか? 宜しくお願いいたします。

  • バッチファイル 複数条件判定方法

    いつも大変御世話になっております。 WindowsXP SP2に【D:\test\bat】フォルダに【test.bat】があります。 上記バッチファイルは以下のようになっています。 コード------------------------------------------------ rem --- フラグ変数 --- set OK=0 set NG=1 rem --- 初期化 --- set FLAG_A=%OK% set FLAG_B=%OK% rem --- 時間変数 --- set yyyy=%date:~-10,4% set yy=%date:~-8,2% set mm=%date:~-5,2% set dd=%date:~-2,2% set YMD=%date:~-8,10% set HHMMSS=%time:~0,8% set FILE_DATE=%date:~-10,4%%date:~-5,2%%date:~-2,2%%TIME:~0,2%%TIME:~3,2% set FILE_DATE=%FILE_DATE: =0% rem --- 存在ファイル格納フォルダ変数 --- set SERCH_DIR1=D:\sample1\ set SERCH_DIR2=D:\sample2\ rem --- ログフォルダ変数 --- set LOG_DIR1=D:\sampleLOG rem --- ログファイル変数 --- set LOG_FILE1=LOG.txt rem --- 検索対象ファイル変数 --- set SERCH_FILE1=sample1.txt set SERCH_FILE2=sample2.txt REM <STEP1> REM %SERCH_FILE1%存在チェック開始=============================================== echo %yyyy%%mm%/%dd% %HHMMSS% >> %LOG_DIR1%\%LOG_FILE1% IF EXIST %SERCH_DIR1%\%SERCH_FILE1% goto YES1 ECHO ON echo %SERCH_FILE1%が存在していません。調査して下さい。 >> %LOG_DIR1%\%LOG_FILE1% ECHO ON set FLAG_A=%NG% goto NEXT_SERCH_FILE :YES1 ECHO ON echo %SERCH_FILE1%が存在しています。 >> %LOG_DIR1%\%LOG_FILE1% ECHO OFF REM %SERCH_FILE1%存在チェック終了=============================================== PAUSE :NEXT_SERCH_FILE REM <STEP2> REM %SERCH_FILE2%存在チェック開始=============================================== echo %yyyy%%mm%/%dd% %HHMMSS% >> %LOG_DIR1%\%LOG_FILE1% IF EXIST %SERCH_DIR1%\%SERCH_FILE2% goto YES2 ECHO ON echo %SERCH_FILE2%が存在していません。調査して下さい。 >> %LOG_DIR1%\%LOG_FILE1% ECHO ON set FLAG_B=%NG% goto HANTEI :YES2 ECHO ON echo %SERCH_FILE2%が存在しています。 >> %LOG_DIR1%\%LOG_FILE1% ECHO OFF REM %SERCH_FILE2%存在チェック終了=============================================== PAUSE REM <終了処理>================================================================== :HANTEI ECHO ON echo %FLAG_A% >> %LOG_DIR1%\%LOG_FILE1% echo %FLAG_B% >> %LOG_DIR1%\%LOG_FILE1% PAUSE IF FLAG_A == %OK% IF FLAG_B == %OK% ( echo %yyyy%/%mm%/%dd% %HHMMSS% 正常終了 >> %LOG_DIR1%\%LOG_FILE1% ) ELSE ( echo %yyyy%/%mm%/%dd% %HHMMSS% 異常終了 >> %LOG_DIR1%\%LOG_FILE1% ) PAUSE コード------------------------------------------------ 一番最後の判定処理がうまく動作しません。 ※両フラグ(FLAG_AとFLAG_B)が0の時に正常終了のログをはきだし、どちらかが0ではない場合は異常終了のログをはきだす仕組みにしたいのです。 プログラムのどこに問題があるのでしょうか? バッチファイルにお詳しい方、ご教授願いますでしょうか? ※サンプルがあれば、光栄です。 何卒、宜しくお願い致します。