这是一个简单的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
)
答案 0 :(得分:2)
在批处理脚本中,当到达一行或一段代码(括号中的代码)时,所有变量读取都被替换为之前>>开始执行该行或块的值。因此,如果更改块内的变量,则无法在同一块内检索此值。没有读取变量值,它们被替换为其值。
要在同一个块内正确检索更改的值,必须向cmd指示应该延迟读取操作,直到执行该行。要做到这一点,需要两个步骤。首先是启用此选项
setlocal enabledelayedexpansion
启用后,应延迟读取的变量需要sintax !var!
而不是%var%