Batch file 有人能告诉我这个蝙蝠脚本有什么问题吗?

Batch file 有人能告诉我这个蝙蝠脚本有什么问题吗?,batch-file,Batch File,这是一个简单的bat脚本,可以从svn签出一些文件夹。我不太熟悉bat脚本,在如何引用变量方面似乎没有一致性。 例如,变量“branchV”没有被追加,它被视为“'”,但如果我回显它,我会看到用户输入 set "DB_DIRECTORIES=AuditUser-db CarrierProcessingRules-db iDetectDB-db iRisk-db WarningsIndex-db" set "SVNBASEURL=http://XX.XX.XX.XX:7777/svn/

这是一个简单的bat脚本,可以从svn签出一些文件夹。我不太熟悉bat脚本,在如何引用变量方面似乎没有一致性。 例如,变量“branchV”没有被追加,它被视为“'”,但如果我回显它,我会看到用户输入

set "DB_DIRECTORIES=AuditUser-db CarrierProcessingRules-db   iDetectDB-db iRisk-db     WarningsIndex-db"
set "SVNBASEURL=http://XX.XX.XX.XX:7777/svn/YYY"
set BASELOCALDIRECTORY="C:"
@echo on


@cls


@echo Check out DB directories from?
@echo 
@echo 1. Trunk
@echo 2. Branch
@echo
@echo
@set OPTIONSELECTED=
@set /P OPTIONSELECTED=SELECT OPTION:%=%


if "%OPTIONSELECTED%" == "1" (


set SVNURL="%SVNBASEURL%/trunk"
set BRANCHV="BCSTrunk"

) ELSE IF %OPTIONSELECTED% == 2 (

 @echo
 @echo
 @echo
 @echo PLEASE ENTER THE BRANCH VERSION YOU WISH TO CHECKOUT
 @echo
 @echo
 @set branchV=
 @set /P branchV=ENTER VERSION:%=%
 @echo

 set SVNURL="%SVNBASEURL%"/branches/"%branchV%"

 ) ELSE (
@echo Invalid option

 )


for %%i in (%DB_DIRECTORIES%) do (

 set PATHTOUSE="%BASELOCALDIRECTORY%"/"%branchV%"/%%i
 set NEWSVNURL="%SVNURL%"/%%i
 REM Intended to remove all inverted commas , which were causing an issue in svn
 set PATHTOUSE="%PATHTOUSE:=%"
 set NEWSVNURL=%NEWSVNURL:=%


  TortoiseProc.exe /command:checkout /path:%PATHTOUSE% /url:%NEWSVNURL%  /closeonend:1

)

在批处理脚本中,当到达一行或一块代码(括在括号中的代码)时,所有变量读取都将替换为开始执行该行或代码块之前的值。因此,如果更改块内的变量,则无法在同一块内检索该值。没有读取变量值,它们被替换为变量值

要正确检索同一块内的更改值,必须向cmd指示读取操作应延迟到执行该行。为此,需要两个步骤。首先是启用此选项

setlocal enabledelayedexpansion

启用时,应延迟读取的变量需要sintax
!瓦尔
而不是
%var%

发布一个简短的版本,演示您遇到的问题。@GreenAsJade,没有必要。他们没有延迟的扩展,这可以通过快速浏览他们发布的源代码的末尾来看出。如果你可以费心阅读所有不相关的行来寻找答案,当然可以。但是,这是向新用户发出的正确信息吗:用一整段脚本做一堆毫无意义的事情并期望得到答案是可以的?在未翻阅的页面上有一个小零件!