Batch file 有人能告诉我这个蝙蝠脚本有什么问题吗?
这是一个简单的bat脚本,可以从svn签出一些文件夹。我不太熟悉bat脚本,在如何引用变量方面似乎没有一致性。 例如,变量“branchV”没有被追加,它被视为“'”,但如果我回显它,我会看到用户输入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/
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,没有必要。他们没有延迟的扩展,这可以通过快速浏览他们发布的源代码的末尾来看出。如果你可以费心阅读所有不相关的行来寻找答案,当然可以。但是,这是向新用户发出的正确信息吗:用一整段脚本做一堆毫无意义的事情并期望得到答案是可以的?在未翻阅的页面上有一个小零件!