• 締切済み

.bat(バッチ)から.batを実行したいのですがエラーになってしまいます。

<やりたい事> (1)メニュー的なバッチからOracleインストール後 (2)OracleのDB作成sqlを実行する.bat(バッチ)を実行する。 <現状> メニュー的バッチから(2)をCALLで呼びだすと「内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません。」とコンソールに表示されてしまいます。 コマンドの拡張子を実行できる設定になっている事は確認できています。 また、コマンドプロンプトから(2)のバッチを実行すると実行できました。 色々と調べて見たのですが原因、解決策が見つかりません。 どうか皆様のお力をお借りできればと思います。 宜しくお願いします。 ↓以下バッチの詳細 <(1)メニュー的なバッチ> ECHO OFF :Start ECHO. ECHO 1. ・・・ 運用APLデータベース設定 %P5% ECHO 99. ・・・ 終了 SET Process= SET Choice= SET /p Choice=Type 選択して下さい。 IF '%Choice%'=='1' GOTO MakeDB :MakeDB REM 5. 運用APLデータベース設定選択時 SET Process=運用APLデータベース設定 ECHO *** "%Process%"開始 *** REM 文字変換バッチ実行 CALL C:\TEMP\aaaa.bat IF ERRORLEVEL 1 GOTO ExceptionError :InputError REM 入力エラー時 ECHO 不正なパラメータが入力されました。 GOTO Start :ExceptionError REM 例外エラー時 ECHO ******** 失敗しました。 ******** GOTO Start :End REM バッチを終了する。 EXIT <(2)OracleのDB作成sqlを実行する.bat(バッチ)> SET ORACLE_INSTALL_DIR=C:\oraclexe SET ORACLE_BIN_DIR=%ORACLE_INSTALL_DIR%\app\oracle\product\10.2.0\server\BIN SET ADMIN_DIR=%ORACLE_INSTALL_DIR%\app\oracle\admin\XE SET ORADATA_DIR=%ORACLE_INSTALL_DIR%\oradata\XE SET DBS_DIR=%ORACLE_INSTALL_DIR%\app\oracle\product\10.2.0\server\dbs SET USERNAME=aaa SET PASSWORD=bbb REM // LOGファイル名用に日付の取得 // FOR /F "tokens=1,2,3 delims=/, " %%i IN ('date /t') DO SET SYSDATE=%%i%%j%%k REM // 「Win31J」に文字変換 // ECHO 文字変換開始 %date% %time% >> "C:\install%SYSDATE%.log" "%ORACLE_BIN_DIR%\sqlplus" %USERNAME%/%PASSWORD% as sysdba @C:\TEMP\Drop.sql >> "C:\install%SYSDATE%.log" IF ERRORLEVEL 1 GOTO ExceptionError ECHO DBユーザー作成開始 %date% %time% >> "C:\install%SYSDATE%.log" "%ORACLE_BIN_DIR%\sqlplus" %USERNAME%/%PASSWORD% as sysdba @C:\TEMP\CreateDB.sql >> "C:\install%SYSDATE%.log" IF ERRORLEVEL 1 GOTO ExceptionError

みんなの回答

  • notnot
  • ベストアンサー率47% (4845/10256)
回答No.4

>正確には「'aaaa.bat'は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません」です。 それが本当なら、 CALL C:\TEMP\aaaa.bat と書いているというのが間違いで、 CALL aaaa.bat と書いているとしか思えない。逆に、本当に CALL C:\TEMP\aaaa.bat と書いていて、 「'C:\TEMP\aaaa.bat'は、内部コマンドまたは外部コマンド~」 というのが正しいエラーメッセージなら、C:\TEMP\aaaa.batが存在しないと言うことです。現象が発生する(最小限の)正確なコードと、正確なエラーメッセージを書いてください。

回答No.3

ん?今同じ条件で確認したら'C:\TEMP\aaaa.bat'~ となったんですが…とりあえず私の補足要求もあいまいだったからな…。 とりあえず、そのaaaa.batの中身をpingコマンドなど、何度流してもいいのに置き換えて、 1.それで(1)のバッチを流してどうか(多分失敗すると思いますが) 2.(1)の内容をCallの行だけにしたらどうか 3.コマンドプロンプトから直接「call C:\TEMP\aaaa.bat」を実行したらどうか 等で、原因の絞込みをするしかないのでは?

回答No.2

補足要求 エラーメッセージは正確にはこうじゃないでしょうか? 「'(何か)'は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません。」 この上で言う(何か)に当てはまる部分は何でしょうか? 上記で言うaaaa.batにあたる部分なのか、それとも別の言葉が入っているのか?

make_dream
質問者

お礼

言葉足らずですみません。 khazad-lefty様がおっしゃられるとおり正確には 「'aaaa.bat'は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません」です。 CALLを実行している所で、呼び先(aaaa.bat)が存在しているのに実行できず困っています。

noname#208124
noname#208124
回答No.1

拡張子込みのフルパスで書いている以上CALLしてるファイル名が間違ってる以外に原因は無さそうですが、 質問文がコピー&ペーストしたものだとして文中のaaaaが全角になっていますが、本当にaaaa.batでいいのですか?

make_dream
質問者

お礼

ご回答ありがとうございます。 aaaaは両方とも全角です。(質問文が間違いです。) ※ちなみにメニュー的なバッチは、USBメモリから実行しています。

関連するQ&A

  • bat サブルーチンのERRORLEVELについて

    バッチのサブルーチンのERRORLEVELについて質問です。 サブルーチン内でERRORLEVELを返すコマンドを実行したいのですが、 親ルーチンにそのERRORLEVELを共有したくない場合、何か方法はありますか? ============================================================ [1.bat] SET MSG1="NOTFOUND" SET MSG2="found!" echo %ERRORLEVEL% FIND %MSG1% 2.bat REM %ERRORLEVEL%は1に echo %ERRORLEVEL% CALL :LOG echo %ERRORLEVEL% FIND %MSG2% 2.bat REM %ERRORLEVEL%は0に echo %ERRORLEVEL% CALL :LOG echo %ERRORLEVEL% REM %ERRORLEVEL%は0であって欲しいが0に pause EXIT 1 :LOG FIND %MSG1% hogehoge.log REM %ERRORLEVEL%は1に ============================================================ [2.bat] found! ============================================================ [hogehoge.log] 空 ============================================================

  • バッチファイルのループ処理の質問です。

    バッチファイルのループ処理の質問です。 バッチファイルでサーバにセキュリティーパッチをインストールしたいのですが、 一件しかインストール出来ません。 ---------------------------------------------- @echo on setlocal set SrcDir=\\192.168.11.5\temp\ for %%i in (%SrcDir%*.msu) do ( %%i /quiet /norestart >>Instarll_log.log IF ERRORLEVEL 3010 GOTO ReqReboot IF ERRORLEVEL 1 GOTO NG IF ERRORLEVEL 0 GOTO OK :NG echo 異常 >> kekka.log echo ERRORLEVELは%ERRORLEVEL%です。 >> kekka.log :OK echo 正常 > kekka.log echo ERRORLEVELは%ERRORLEVEL%です。 >> kekka.log :ReqReboot echo 再起動が必要 >> kekka.log echo ERRORLEVELは%ERRORLEVEL%です。 >> kekka.log ) goto END :END endlocal ---------------------------------------------- 続けて次のファイルをインストールするにはどうすれば良いか 教えてください。

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

    いつも大変御世話になっております。 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ではない場合は異常終了のログをはきだす仕組みにしたいのです。 プログラムのどこに問題があるのでしょうか? バッチファイルにお詳しい方、ご教授願いますでしょうか? ※サンプルがあれば、光栄です。 何卒、宜しくお願い致します。

  • batファイルの実行について

    batファイルを作成しました。 (ATコマンドにてスケジュールさせたいと考えてます。) ファイル自体をダブルクリックで実行すると正常に処理が完了しますが、コマンドプロンプトから実行しようとすると以下のエラーが発生します。 〓〓〓〓〓〓〓〓〓〓〓〓 C:\>cmd /c "E:\MirroringTool\SimpleFolderMirror\test.bat" 指定した名前は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されません。 〓〓〓〓〓〓〓〓〓〓〓〓 実行させたいbatファイルは以下のとおりです。 〓〓〓〓〓〓〓〓〓〓〓〓 echo off cls rem ↓SimpleFolderMirror.exeを解凍したフォルダ SET EXEFOLDER_PATH="E:\MirroringTool\SimpleFolderMirror\" rem ↓ログの出力フォルダ・ファイル SET LOG_DIR="E:\MirroringTool\SimpleFolderMirror\logs\" rem ↓ミラー元フォルダ1 SET COPY_FROM_PATH_01="S:\" rem ↓ミラー先フォルダ1 SET COPY_TO_PATH_01="E:\ORANT\OWS" cd %EXEFOLDER_PATH% SimpleFolderMirror.exe %COPY_FROM_PATH_01% %COPY_TO_PATH_01% > %LOG_DIR%logs.txt 〓〓〓〓〓〓〓〓〓〓〓〓 cd %EXEFOLDER_PATH%のところまでは処理は完了しているようなので、最後の行のところで発生しているようです。 何が原因でエラーが発生してしまっているのでしょうか? 宜しくお願い致します

  • IEのバージョンチェックとバージョンアップでBATの簡略化

    IEのバージョンチェックとバージョンアップでBATの簡略化 タイトルの通りで、なんとか仕事で使っている端末のバージョンチェックと 条件に合わない場合、バージョンアップするBATを作りました。 目的の作業は出来ますが、まだまだ勉強不足で簡略化するとしたら どのように短く出来ますか? お時間あるかたいましたらご教授下さい。 @echo off CLS echo IE ver6.0 の場合、IE7.0にアップグレードされます。 echo 実行続けますか? echo 中止:CTRL + C pause rem マウント net use T: \\server\setup$\microsoft\IE echo IEバージョン情報出力 REG QUERY "HKLM\SOFTWARE\Microsoft\Internet Explorer" /v "version" > %temp%\IEverchek.log :XP_SP2 C: CD %temp% find IEverchek.log "6.0.2900.2180" if %ERRORLEVEL% == 0 GOTO verup_start if %ERRORLEVEL% == 1 GOTO XP_SP3 :XP_SP3 C: CD %temp% find IEverchek.log "6.0.2900.5512" if %ERRORLEVEL% == 0 GOTO verup_start if %ERRORLEVEL% == 1 GOTO IE7 :IE7 C: CD %temp% find IEverchek.log "7.0.5730" set message=環境は「IE 7.0 」の環境でした。 if %ERRORLEVEL% == 0 GOTO END if %ERRORLEVEL% == 1 GOTO IE8 :IE8 C: CD %temp% find IEverchek.log "8.0.6001" set message=環境は「IE 8.0 」の環境でした。 if %ERRORLEVEL% == 0 GOTO END if %ERRORLEVEL% == 1 GOTO Error :verup_start for /f "tokens=2 delims=[" %%i in ('ver') do set ver1=%%i for /f "tokens=2" %%i in ('echo %ver1%') do set ver2=%%i for /f "tokens=1-2 delims=. " %%i in ( 'echo %ver2%' ) do set OSVER=%%i.%%j rem -------%OSVER% Win2k=5.00 XP=5.1 XPx64=5.2----------- set OS_TYPE="" if "%OSVER%" == "5.1" set OS_TYPE=32 if "%OSVER%" == "5.2" set OS_TYPE=64 echo installing IE7.0 %OS_TYPE%bit..... echo please wait..... T: start /wait "" "IE7-WindowsXP-x%OS_TYPE%.exe" /passive /forcerestart /update-no goto verupend :Error echo Internet Explorer のレジストリキーが見つかりません。 echo 必要なら手動でインストールしてね。 pause exit :END echo. echo チェックOK echo %message%終了します。 echo. pause exit :verupend echo. echo バージョンアップしました echo. pause exit

  • BATのIF文について質問

    @echo off cls set LOGFILE=C:\%COMPUTERNAME%.log find C:\temp\setting.txt "SERVER01" /I if %ERRORLEVEL% == 1 GOTO END if %ERRORLEVEL% == 0 ( set MESSAGE=SEVER01の環境です echo %MESSAGE% echo %MESSAGE% >> %LOGFILE% GOTO SET1 ) :SET1 echo テスト >> %LOGFILE% :END こんな簡単なBATを作成してみましたがERRORLEVELが0の時処理されません (「SEVER01の環境です」がLOGに書き込まれません) (もちろんsetting.txtには「SERVER01」の文字が入ってます) (FINDのあと、「echo %errorlevel」を記述して0にもなっているのですが) IFの構文として間違っていますか?どなたかご教授ください。 OSはWindowsXP SP3 64Bitです。

  • バッチファイルでFINDSTRを使って文字列検索をしたいが、ファイルが

    バッチファイルでFINDSTRを使って文字列検索をしたいが、ファイルが開けない (1)と(2)のバッチファイルを作りました。それぞれ単体で実行すると、エラーは出ません。 (1)と(2)を一緒にした(3)というバッチファイルで実行すると、FINDSTRのところで、 「ファイルを開くことができません」というエラーが出て、途中でとまってしまいます。 エラーを出さずに実行する方法は何かないでしょうか? (A.batは、CドライブにあるWord.exeを実行するだけのバッチファイルです。) どうぞよろしくお願いします。 【(3)の中身】 call A.bat >kekka.txt   ←この1行だけが(1)のバッチファイルの中身です GOTO kensaku GOTO :EOF ::文字列検索 :kensaku SET keyword=作成しました。   ←この行から下が(2)のバッチファイルの中身です FINDSTR %keyword% kensaku.txt > NUL GOTO kekka%ERRORLEVEL% GOTO :EOF :kekka0 REM 文字列あり ECHO %keyword%がありました PAUSE > nul GOTO :EOF :kekka1 REM 文字列なし ECHO %keyword%はありませんでした。 PAUSE > nul GOTO :EOF

  • バッチファイルとVBスクリプトの連携エラーコード取得

    イベントログにアベンドしたJOBが出力されない場合 せめて、logファイルにだけでも内容を書きたいのですが うまくいきません。 リターンコードが全部(1)の元バッチファイルで0がかえってきます。 どなたがご教授願います。 (1)親バッチファイルの中味 @echo off rem============================================== rem rem ARG1 = スケジュール日 rem ARG2 = ネットワーク名 rem ARG3 = 終了コード rem rem ================================================ set SDATE=%1 set NETWORK=%2 set RC=%3 set SDATE_SHORT=%SDATE:~2,6% set WK_DIR=D:\temp set TOML_TXT=%WK_DIR%\toml_%NETWORK%.txt set VBSCRIPT=D:\stage\tools\bat\GetJobName.vbs echo ### ARG1(%1) ARG2(%2) ARG3(%3) ### if "%RC%"=="00" ( echo NETWORK NORMAL END #AUTONEND# ) else ( echo NETWORK ABNORMAL END #AUTONEND# if exist %TOML_TXT% ( del %TOML_TXT% ) toml -p999 > %TOML_TXT% cscript //Nologo %VBSCRIPT% %SDATE_SHORT% %NETWORK% %RC% %TOML_TXT% )      if not "%errlrlevel%"=="0" ( set EVT_CRT_RC=%errorlevel% echo EVETCREATE Failed. RC=%EVT_CRT_RC% ) ) exit (2)VBスクリプトの中味 800文字以上になるので、補足要求してください。 (3)イベントログ出力バッチファイルの中味 @echo off rem rem 引数 rem %1:SDATE rem %2:NETWORK rem %3:RC rem %4:JOB set MSG=A-AUTO JOBNET : NETWORK(%2) JOB(%4) SDATE=%1 ABNORMALLY ENDED RC=%3 eventcreate /l application /t error /so autonend /id 999 /d "%MSG%" exit %errorlevel%

  • バッチ処理について

    お世話になります。 バッチファイルを作成して、サーバー間でファイルのコピーを行おうと思ってます。 サーバーA:win2003server standerdEditon サーバーB:win2003server standerdEditon サーバーC:win2003server R2 standerdEditon(ServicePack1) A、Bからnet useコマンドでCをマウントしてます A→Cのコピーは大丈夫なのですが、 B→Cでは頻繁にnet useコマンドで失敗します。 サーバーBのバッチファイル if not exist P:\ net use P: \\serverC\test >> log.txt if %ERRORLEVEL% neq 0 echo エラー発生 ERRORLEVEL=%ERRORLEVEL% >> log.txt &goto END if ERRORLEVEL 0 echo 正常終了 >> log.txt のようにしているのですが、エラーなのに、 「エラー発生」がログに出ずに終了してます。 「正常終了」も 「エラー発生」もログに出ないということは、if文で評価されてないように 思うのですが、&gotoで次の処理を飛ばしているので、終了のログは出てます。 説明が不足しておりましたら追加させていただきますので、 なぜこの現象が発生するのかお知恵をお貸しいただければ幸いです。 よろしくお願いします。

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

    WindowsXP環境にて下記のバッチファイルがあります。 rem --- 時間変数 --- set yyyy=%date:~-10,4% set yy=%date:~-8,2% set mm=%date:~-5,2% set dd=%date:~-2,2% rem --- ログフォルダ変数 --- set LOG_DIR1=D:\LOG rem --- ログファイル変数 --- set LOG_FILE1=LOG.txt set A=1 set B=2 IF %A% == 1 IF %B% == 2 ( echo %yyyy%%mm%/%dd% %HHMMSS%正常終了 >> %LOG_DIR1%\%LOG_FILE1% ) ELSE (echo %yyyy%%mm%/%dd% %HHMMSS%異常終了 >> %LOG_DIR1%\%LOG_FILE1%) pause 上記プログラムだとログ上で【200912/10 正常終了】と表示されるのに、【set A=10】と変更して 【200912/10 異常終了】の表示がログ上に出力されるだろうと期待して実行した結果、 何も表示されてませんでした。 どこに問題があるのでしょうか?

専門家に質問してみよう