2012-07-14 207 views
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 
+1

那麼,如果你可以說你的程序應該做什麼,並描述你被卡住的地方,那麼幫助你會更容易。 – 2012-07-14 15:08:53

回答

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語句添加了一些雙引號。

第二個問題與批處理如何解釋代碼有關:一行一行。當它來到你的行IF "%~1" NEQ "" (它試圖解釋下面的代碼塊,即使條件不滿足(=沒有更多的參數來檢查)。但與MSCHECK等於"",第一條if語句變成IF /I """=="/",導致錯誤。

+0

非常感謝!我想我嘗試了引號,括號和if語句的每一個組合,除了擺脫整體if循環。這從來沒有凸現在我的腦海中,因爲我的代碼中有一個if語句,與本聲明幾乎完全相同,完全沒有任何問題。 – user1451070 2012-07-15 01:31:15