我正在编写一个批量安装脚本,并尝试仅在某个变量等于1时才运行此函数。无论何时调用此函数时,只要在下一行后面加上"C:\Windows\System32> break>“,就是一个正常语法的命令(”命令的语法不正确“),代码如下:
: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发布于 2016-03-02 08:28:13
与尝试使用delayedexpansion处理所有变量相比,倒过来使用if语句并只使用goto可能更简单,如下所示:
:updateStatus
IF NOT %uploadInfo% EQU 1 goto end
{do stuff}
:end发布于 2016-03-02 08:54:24
另一种解决方案是设置循环外部的变量,并且只在需要时才处理循环。
我对这篇文章进行了多次编辑,最后使用了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:eofhttps://stackoverflow.com/questions/35734584
复制相似问题