1

さて、私はこれを機能させるために6時間のように最後の半分を費やしました、そして私はほとんど髪を抜いています。誰かがこれを理解するのを手伝ってくれるなら、私は永遠に感謝するでしょう。

@ECHO on
SETLOCAL ENABLEEXTENSIONS
SETLOCAL ENABLEDELAYEDEXPANSION
CALL:MicrsoftInstaller-IntegrityCheck "x86" "KB978601" "2010\MS10-019\WinSec-MS10-019-011-P57297-Windows6.1-KB978601-x86.msu" "/quiet /norestart"
pause

:MicrsoftInstaller-IntegrityCheck
SET MSCheck="%~1"
IF "%~1" NEQ "" (
    IF /I %MSCheck:~1,1%=="/"       SET MSI_Switch=%MSCheck%
    IF /I %MSCheck:~1,2%=="20"      SET MSI_Path=%MSCheck%
    IF /I %MSCheck:~1,20%=="KB"     SET MSI_KB=%MSCheck%
    IF /I %MSCheck%=="x64"          SET MSI_Architecture=x64
    IF /I %MSCheck%=="x86"          SET MSI_Architecture=x86    
       SHIFT
       GOTO:MicrsoftInstaller-IntegrityCheck
)
ECHO KB: %MSI_KB%
ECHO Switches: %MSI_Switch%
ECHO Path: %MSI_Path%
ECHO Architecture: %MSI_Architecture%
GOTO:EOF
4

1 に答える 1

1

それを機能させるには、いくつかの小さな変更が必要でした。

@ECHO off
SETLOCAL ENABLEEXTENSIONS
SETLOCAL ENABLEDELAYEDEXPANSION
CALL:MicrsoftInstaller-IntegrityCheck "x86" "KB978601" "2010\MS10-019\WinSec-MS10-019-011-P57297-Windows6.1-KB978601-x86.msu" "/quiet /norestart"
pause

:MicrsoftInstaller-IntegrityCheck
SET MSCheck="%~1"
IF "%~1" EQU "" GOTO Part2

IF /I "%MSCHECK:~1,1%"=="/"       SET MSI_Switch=%MSCheck%
IF /I "%MSCheck:~1,2%"=="20"      SET MSI_Path=%MSCheck%
IF /I "%MSCheck:~1,2%"=="KB"     SET MSI_KB=%MSCheck%
IF /I %MSCheck%=="x64"          SET MSI_Architecture=x64
IF /I %MSCheck%=="x86"          SET MSI_Architecture=x86    
SHIFT
GOTO:MicrsoftInstaller-IntegrityCheck

:Part2
ECHO KB: %MSI_KB%
ECHO Switches: %MSI_Switch%
ECHO Path: %MSI_Path%
ECHO Architecture: %MSI_Architecture%
GOTO:EOF

最初に、if ステートメントにいくつかの二重引用符を追加しました。

2 番目の問題は、Batch がコードを解釈する方法 (行ごと) に関連しています。あなたの行IF "%~1" NEQ "" (になると、条件が満たされていない場合でも(=これ以上チェックする引数がない場合)、次のコードブロックを解釈しようとしました。しかしMSCHECKequal to""では、最初の if ステートメントがIF /I """=="/"になり、エラーになりました。

于 2012-07-14T15:22:53.617 に答える