好吧,我花了最好的一半,就像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
答案 0 :(得分: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语句中添加了一些双引号。
第二个问题与Batch如何解释代码有关:一行一行。当它到达你的行IF "%~1" NEQ "" (
时,它试图解释以下代码块,即使条件不满足(=不再需要检查的参数)。但如果MSCHECK
等于""
,则第一个if语句变为IF /I """=="/"
,从而导致错误。