【发布时间】:2016-06-14 13:26:26
【问题描述】:
我正在编写一个批处理安装脚本,我试图让这个函数只有在某个变量等于 1 时才运行。每当调用这个函数时,我都会遵循一个正常的语法命令(“命令的语法不正确”)通过在下一行 "C:\Windows\System32> 中断>" 代码如下:
:updateStatus
IF %uploadInfo% EQU 1 (
REM finds IP
set ip_address_string="IP Address"
set ip_address_string="IPv4 Address"
for /f "usebackq tokens=2 delims=:" %%f in (`ipconfig ^| findstr /c:%ip_address_string%`) do (
SET ip=%%f
REM goto :eof
)
REM Removes spaces from IP
SETLOCAL ENABLEDELAYEDEXPANSION
for /f "tokens=* delims= " %%a in ("%ip%") do set ip=%%a
for /l %%a in (1,1,100) do if "!ip:~-1!"==" " set ip=!ip:~0,-1!
REM echo IP Adress: %ip%
SET txtLoc=C:\CadVersionInfo\%ip%.txt
SETLOCAL DISABLEDELAYEDEXPANSION
REM SETs time
For /f "tokens=2-4 delims=/ " %%a in ('date /t') do (set mydate=%%a/%%b/%%c)
For /f "tokens=1-2 delims=/:" %%a in ('time /t') do (set mytime=%%a:%%b)
REM writes info
if not exist C:\CadVersionInfo\ (mkdir C:\CadVersionInfo\)
if exist "%txtLoc%" (
del "%txtLoc%"
)
break>%txtLoc%
@echo %trunk%.%build% >>"%txtLoc%"
@echo %TA%>>"%txtLoc%"
@echo %mdbname%>>"%txtLoc%"
REM ~1 is status
@echo %~1>>"%txtLoc%"
@echo %mytime% %mydate%>>"%txtLoc%"
@echo %notes%>>"%txtLoc%"
REM Sets location on server to store data
SET txtLocRemote=\\cd-ptt\CAD Downloads\Webserver\servers\*
xcopy %txtLoc% "%txtLocRemote%" /q /y
)
goto:eof
【问题讨论】:
-
您需要启用和使用delayed expansion,因为您在单行/代码块中修改和读取变量值(注意
IF %uploadInfo% EQU 1 ( ... )被视为单个命令行).. . -
只有前 10 行受到
IF %uploadInfo% EQU 1测试的影响。如果uploadinfo不等于1,IP地址是否已经设置 -
不,@foxidrive,结尾的
)在脚本的最底部goto:eof之前;第10行的)属于上面的for /f... -
@aschipfl 确实如此!谢谢。您对
delayed expansion的建议是正确的,因为变量是在括号内设置的。 Wes Larson 的建议也是一个很好的解决方案。
标签: batch-file