具有双命令集的Bat文件

时间:2017-03-16 03:18:34

标签: batch-file

我想创建一个包含两组命令的批处理文件:

第一集:

@echo off
set varip=10.0.80.40
REM WRITE YOUR COMPUTER IP ABOVE
set vardefaultgway=10.0.80.1
set varsubnetmask=255.255.255.192
netsh interface ip set address name="Ethernet" static %varip% %varsubnetmask% %vardefaultgway%

第二集:

@echo off
netsh interface ipv4 set address name="Ethernet" source=dhcp

所以现在我想要一个以下格式的批处理文件。

结果集

@echo off
REM BOOLEAN_VALUE
REM //some code here that reads the BOOLEAN_VALUE and goes to command-set-1 or command-set-2 depending on the result
:1
set varip=10.0.80.40
REM WRITE YOUR COMPUTER IP ABOVE
set vardefaultgway=10.0.80.1
set varsubnetmask=255.255.255.192
netsh interface ip set address name="Ethernet" static %varip% %varsubnetmask% %vardefaultgway%
REM //some code to change the BOOLEAN_VALUE i.e. a toggler
exit
:2
netsh interface ipv4 set address name="Ethernet" source=dhcp
REM //some code to change the BOOLEAN_VALUE i.e. a toggler
exit
  

基本上,我需要一个具有BOOLEAN_VALUE的批处理文件   占位符。批处理文件需要执行以下两个功能:   

      1.批处理文件需要读取自身中的值   第二行和第四个字符。   

2.完成任何一组命令后,批处理文件必须在退出前更改其占位符中的值(即BOOLEAN_VALUE)。

我希望我已经清楚了。这可以成就吗?

3 个答案:

答案 0 :(得分:1)

此解决方案正是您在问题中所要求的:

@echo off
REM Y
REM This is the code that reads the BOOLEAN_VALUE and goes to command-set-1 or command-set-2 depending on the result
for /F "usebackq skip=1 tokens=2" %%a in ("%~F0") do set "BOOLEAN_VALUE=%%a" & goto continue
:continue
ECHO BOOLEAN_VALUE=%BOOLEAN_VALUE%
IF %BOOLEAN_VALUE% EQU Y GOTO 2
:1
set varip=10.0.80.40
REM WRITE YOUR COMPUTER IP ABOVE
set vardefaultgway=10.0.80.1
set varsubnetmask=255.255.255.192
netsh interface ip set address name="Ethernet" static %varip% %varsubnetmask% %vardefaultgway%
GOTO UPDATE_BOOLEAN_VALUE
:2
netsh interface ipv4 set address name="Ethernet" source=dhcp
:UPDATE_BOOLEAN_VALUE
REM The code to change the BOOLEAN_VALUE i.e. a toggler
if %BOOLEAN_VALUE% equ Y (set "BOOLEAN_VALUE=N") else set "BOOLEAN_VALUE=Y"
(
echo @echo off
echo REM %BOOLEAN_VALUE%
for /F "usebackq skip=2 delims=" %%a in ("%~F0") do echo %%a
) > _new_.bat
move /Y _new_.bat "%~F0" > NUL
echo BOOLEAN_VALUE updated
exit

请注意,您不能插入空白行;为了管理程序中的空白行,需要进行修改。

答案 1 :(得分:0)

您可以使用

Boolean_value设置为 nothing
set "Boolean_value="

或某个值 - 您喜欢的任何值,例如

set "Boolean_value=Y"

然后使用

if defined Boolean_value (doonething) else (doanotherthing)

如果这就是你想要的......

答案 2 :(得分:0)

@echo off
(<%~f0:bool set /p bool=) 2>nul 
set /a bool=1-bool
>%~f0:bool echo %bool%

if %bool%==1 goto :1
echo do one thing
goto :eof
:1
echo do other thing

第2行从备用数据流中获取数据(技术上是绑定到主文件的辅助文件,但它不是自己的文件)
第3行在01之间切换 第4行将切换的值写回备用数据流