Windows 7 批处理文件循环问题

Windows 7 批处理文件循环问题,windows-7,batch-file,Windows 7,Batch File,好吧,我已经花了近六个小时的大半时间来试着让它发挥作用,我几乎要发疯了。如果有人能帮我解决这个问题,我将永远感激 @ECHO on SETLOCAL ENABLEEXTENSIONS SETLOCAL ENABLEDELAYEDEXPANSION CALL:MicrsoftInstaller-IntegrityCheck "x86" "KB978601" "2010\MS10-019\WinSec-MS10-019-011-P57297-Windows6.1-KB978601-x86.msu"

好吧,我已经花了近六个小时的大半时间来试着让它发挥作用,我几乎要发疯了。如果有人能帮我解决这个问题,我将永远感激

@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

一些小的变化是必要的,以使其工作:

@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”“=”/“
这导致了一个错误。

需要一些小的更改才能使其正常工作:

@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语句中添加了一些双引号


第二个问题与批处理如何解释代码有关:一行接一行。当涉及到您的行
时,如果“%~1”NEQ”“(
它试图解释以下代码块,即使条件不满足(=无需检查更多参数)。但是
MSCHECK
等于
”“
,第一个if语句变成了
if/I”“=”/"
这导致了一个错误。

好吧,如果你能说出你的程序应该做什么,并描述你在哪里陷入困境,那么帮助你会更容易。好吧,如果你能说出你的程序应该做什么,并描述你在哪里陷入困境,那么帮助你会更容易。非常感谢你!我想我已经尝试了所有这些方法的组合引号、方括号和if语句,除了去掉整个if循环。我从来没有想到过这一点,因为我的代码中的其他地方有一个if语句,它与此语句几乎相同,并且没有任何问题。非常感谢!我想我尝试了引号、方括号和if语句的每一个组合,但gett除外我从来没有想过这一点,因为我的代码中的其他地方有一个if语句,它与这个语句几乎相同,并且没有任何问题。