2

他のバッチファイルを呼び出した後、バッチプロセスが毎回壊れるという問題があります。バッチ ファイルは、IBM Rhapsody から make プロセスを実行するために使用されます。Rhapsody からの呼び出しを Visual Studio ツールに変換します。したがって、さまざまな設定を行った後、バッチから nmake が呼び出されます。

スクリプトは完全に私が書いたものではなく、x86 と x64 の両方の Windows アーキテクチャ バージョンで実行できるようにテーマを調整するだけです。最初のスクリプト (vs2005_make.bat) は Rhapsody から呼び出され、「call」ステートメントまで実行されます。2 番目のスクリプト (Vcvars_VisualStudio2005.bat) が最後まで実行されます。しかし、最初のスクリプトは再開されません。この時点で、プロセスはエラー メッセージなしで中断されます。

私はバッチ ファイルにあまり詳しくありません。バッチ ファイルで単純なコンソール コマンド以上のものを作成するのはこれが初めてです。ですから、必要なすべての情報を提供したことを願っています。それ以外の場合はお尋ねください。

ここで開始スクリプト (vs2005_make.bat):

:: parameter 1 - Makefile which should be used
:: parameter 2 - The make target mark

@echo off

IF "%2"==""        set target=all
IF "%2"=="all"     set target=all
IF "%2"=="build"   set target=all
IF "%2"=="rebuild" set target=clean all
IF "%2"=="clean"   set target=clean

set RegQry="HKLM\Hardware\Description\System\CentralProcessor\0"
REG.exe Query %RegQry% > checkOS.txt 
Find /i "x86" < CheckOS.txt > StringCheck.txt

IF %ERRORLEVEL%==0 (
  set arch=x86
) ELSE (
  set arch=x64
)

call "%ProgramFiles%\IBM\Rhapsody752\Share\etc\Vcvars_VisualStudio2005.bat" %arch%

IF %ERRORLEVEL%==0 (
  set makeflags=
  nmake /nologo /S /F %1 %target%
) 

del checkOS.txt
del StringCheck.txt

exit

ここでは、呼び出されたスクリプト (Vcvars_VisualStudio2005.bat):

:: param 1 - Processor architecture

@echo off

ECHO param 1 = %1

IF %1==x86 (
    SET ProgrammPath=%ProgramFiles%
) ELSE IF %1==x64 (
    SET ProgrammPath=%ProgramFiles(x86)%
) ELSE (
    ECHO Unknowen architectur
    EXIT /B 1
)

SET VSINSTALLDIR="%ProgrammPath%\Microsoft Visual Studio 8\Common7\IDE"
SET VCINSTALLDIR="%ProgrammPath%\Microsoft Visual Studio 8"
SET FrameworkDir=C:\WINDOWS\Microsoft.NET\Framework
SET FrameworkVersion=v2.0.50727
SET FrameworkSDKDir="%ProgrammPath%\Microsoft Visual Studio 8\SDK\v2.0"
rem Root of Visual Studio common files.

IF %VSINSTALLDIR%=="" GOTO Usage
IF %VCINSTALLDIR%=="" SET VCINSTALLDIR=%VSINSTALLDIR%

rem
rem Root of Visual Studio ide installed files.
rem
SET DevEnvDir=%VSINSTALLDIR%

rem
rem Root of Visual C++ installed files.
rem
SET MSVCDir=%VCINSTALLDIR%\VC

SET PATH=%DevEnvDir%;%MSVCDir%\BIN;%VCINSTALLDIR%\Common7\Tools;%VCINSTALLDIR%Common7  \Tools\bin\prerelease;%VCINSTALLDIR%\Common7\Tools\bin;%FrameworkSDKDir%\bin;%FrameworkDir%\%FrameworkVersion%;%PATH%;
SET INCLUDE=%MSVCDir%\ATLMFC\INCLUDE;%MSVCDir%\INCLUDE;%MSVCDir%\PlatformSDK\include\gl;%MSVCDir%\PlatformSDK\include;%FrameworkSDKDir%\include;%INCLUDE%
SET LIB=%MSVCDir%\ATLMFC\LIB;%MSVCDir%\LIB;%MSVCDir%\PlatformSDK\lib;%FrameworkSDKDir%\lib;%LIB%

GOTO end

:Usage

ECHO. VSINSTALLDIR variable is not set. 
ECHO.
ECHO SYNTAX: %0

GOTO end

:end

これがコンソール出力です。ここで理解できず、非常に疑わしいのは、最初のスクリプトの「IF %ERRORLEVEL%」ステートメントの後に、エコーがオフに設定されているにもかかわらず、すべてが出力されることです…</p>

Executing: "C:\Programme\IBM\Rhapsody752\Share\etc\vs2005_make.bat" Simulation.mak build

IF %ERRORLEVEL%==0 (
Mehr?   set arch=x86
Mehr? ) ELSE (
Mehr?   set arch=x64
Mehr? )

call "%ProgramFiles%\IBM\Rhapsody752\Share\etc\Vcvars_VisualStudio2005.bat" %arch%
:: param 1 - Processor architecture

@echo off

ECHO param 1 = %1
param 1 = x86

IF %1==x86 (
Mehr?   SET ProgrammPath=%ProgramFiles%
Mehr? ) ELSE IF %1==x64 (
Mehr?   SET ProgrammPath=%ProgramFiles(x86)%
Mehr? ) ELSE (
Mehr?   ECHO Unknowen architectur
Mehr?   EXIT /B 1
Mehr? )

SET VSINSTALLDIR="%ProgrammPath%\Microsoft Visual Studio 8\Common7\IDE"
SET VCINSTALLDIR="%ProgrammPath%\Microsoft Visual Studio 8"
SET FrameworkDir=C:\WINDOWS\Microsoft.NET\Framework
SET FrameworkVersion=v2.0.50727
SET FrameworkSDKDir="%ProgrammPath%\Microsoft Visual Studio 8\SDK\v2.0"
rem Root of Visual Studio common files.

IF %VSINSTALLDIR%=="" GOTO Usage
IF %VCINSTALLDIR%=="" SET VCINSTALLDIR=%VSINSTALLDIR%

rem
rem Root of Visual Studio ide installed files.
rem
SET DevEnvDir=%VSINSTALLDIR%

rem
rem Root of Visual C++ installed files.
rem
SET MSVCDir=%VCINSTALLDIR%\VC

SET PATH=%DevEnvDir%;%MSVCDir%\BIN;%VCINSTALLDIR%\Common7\Tools;%VCINSTALLDIR%\Common7\Tools\bin\prerelease;%VCINSTALLDIR%\Common7\Tools\bin;%FrameworkSDKDir%\bin;%FrameworkDir%\%FrameworkVersion%;%PATH%;
SET INCLUDE=%MSVCDir%\ATLMFC\INCLUDE;%MSVCDir%\INCLUDE;%MSVCDir%\PlatformSDK\include\gl;%MSVCDir%\PlatformSDK\include;%FrameworkSDKDir%\include;%INCLUDE%
SET LIB=%MSVCDir%\ATLMFC\LIB;%MSVCDir%\LIB;%MSVCDir%\PlatformSDK\lib;%FrameworkSDKDir%\lib;%LIB%

GOTO end

Build Done    

私は誰かがアイデアを持っていることを願っています.2日以来、私は今働いていますが、エラーが見つかりません...期待していただきありがとうございます。

注: 「Mehr?」という言葉。テキスト出力ではドイツ語で、「もっと」を意味します。それがどこから来たのかはわかりませんが、英語の出力からドイツ語への悪い翻訳である可能性があります。

4

2 に答える 2

4

'mehr'/'more' という単語は、バッチ コンテキストを離れるため、cmd.exe からのものです。
問題は、なぜこれができるのかということです。
通常、これは CALL なしで別のバッチを開始するループで発生します。

したがって、パス ディレクトリの 1 つに FIND.BAT ファイルがあると推測できます。バッチでFINDコマンドを再マークしてみてください。

テストすることもできますecho ### %undefined%
まだバッチコンテキストにある場合は、ハッシュのみが表示されます。そうでない場合はエコーし### %undefined%ます。

次に、行を移動して、原因となっているコマンドを見つけることができます。

于 2013-06-24T22:42:29.280 に答える
2

このような構成は、変数内の括弧による解析エラーのために機能しません。回避してください:

IF %1==x86 (
     SET ProgrammPath=%ProgramFiles%
) ELSE IF %1==x64 (
     SET ProgrammPath=%ProgramFiles(x86)%
) ELSE (
     ECHO Unknowen architectur
     EXIT /B 1
)

常に変数を二重引用符で囲んで使用します。例:

IF "%~1"=="x86" (
     SET "ProgrammPath=%ProgramFiles%"
) ELSE IF "%~1"=="x64" (
     SET "ProgrammPath=%ProgramFiles(x86)%"
) ELSE (
     ECHO Unknown architecture
     EXIT /B 1
)
于 2013-06-24T17:29:23.593 に答える