有人可以告诉我这个蝙蝠脚本有什么问题吗?

时间:2014-02-07 12:40:20

标签: batch-file

这是一个简单的bat脚本,应该从svn签出一些文件夹。我不是那么蝙蝠脚本,似乎没有关于如何引用变量的一致性。 例如,变量“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

)

1 个答案:

答案 0 :(得分:2)

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

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

setlocal enabledelayedexpansion

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