我正在编写一个批量安装脚本,我试图让这个函数只在某个变量等于1时运行。每当调用这个函数时我都是一个正常的语法命令("命令的语法不正确& #34;)接着是下一行 " 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
答案 0 :(得分:2)
不是试图使用delayedexpansion
来处理所有变量,而是可能更容易撤销if
语句并使用goto
,如下所示:< / p>
:updateStatus
IF NOT %uploadInfo% EQU 1 goto end
{do stuff}
:end
答案 1 :(得分:1)
另一种解决方案是将变量设置在循环之外,并且只在需要时才处理循环。
我已经多次编辑过这篇文章,最后使用了Wes的解决方案,这里只是为了说明实现代码部分的一些不同方法。
IP
变量中的空格将以更简单的方式删除。
更改了文件的重定向 - 它可以避免使用此方法尾随空格。
*
中的SET "txtLocRemote=\\cd-ptt\CAD Downloads\Webserver\servers\*"
不是xcopy的合法语法,需要进行修改。
在此代码块中,两行被替换,2>nul
只是隐藏了控制台中不相关的文本。它将始终尝试创建文件夹并删除文件,如果文件夹已存在或文件不存在,则不会造成任何损坏。
if not exist C:\CadVersionInfo\ (mkdir C:\CadVersionInfo\)
break>"%txtLoc%"
这是您编辑的代码:
:updateStatus
IF %uploadInfo% NEQ 1 goto :EOF
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
SET "ip=%ip: =%"
REM echo IP Adress: %ip%
SET "txtLoc=C:\CadVersionInfo\%ip%.txt"
REM Sets location on server to store data
SET "txtLocRemote=\\cd-ptt\CAD Downloads\Webserver\servers\*"
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
mkdir "C:\CadVersionInfo" 2>nul
del "%txtLoc%" 2>nul
>>"%txtLoc%" @echo %trunk%.%build%
>>"%txtLoc%" @echo %TA%
>>"%txtLoc%" @echo %mdbname%
REM ~1 is status
>>"%txtLoc%" @echo %~1
>>"%txtLoc%" @echo %mytime% %mydate%
>>"%txtLoc%" @echo %notes%
xcopy "%txtLoc%" "%txtLocRemote%" /q /y
goto:eof