我正在寻找如何在执行批处理文件的过程中将CMD行的最后一个参数重新定义为null。我尝试重新定义%n(其中n是最后一个参数,因为null)失败
批处理文件a.bat
@echo 1=%1 2=%2 3=%3 4=%4 5=%5
set %%5%=""
@echo 1=%1 2=%2 3=%3 4=%4 5=%5
set %%5%=
@echo 1=%1 2=%2 3=%3 4=%4 5=%5
结果
a one two three four five
1=one 2=two 3=three 4=four 5=five
set %5=""
1=one 2=two 3=three 4=four 5=five
set %5=
1=one 2=two 3=three 4=four 5=five
%5
不变
答案 0 :(得分:2)
如果只有5
个参数,则可以取消define
的第五个(最后一个),使用Shift
,(输入shift /?
(在命令提示符处获取其用法信息)。这将有效地将defined
的空白/未%6
值移动到%5
的位置。
示例:
@Echo Off
Echo 1=%1 2=%2 3=%3 4=%4 5=%5
Shift /5
Echo 1=%1 2=%2 3=%3 4=%4 5=%5
Pause
如果您想将参数/参数Set
/重新define
为另一个值,则可以使用Call
语句来做到这一点:
示例:
@Echo Off
Echo 1=%1 2=%2 3=%3 4=%4 5=%5
Call :Sub %1 %2 %3 %4 cinco
Pause
GoTo :EOF
:Sub
Echo 1=%1 2=%2 3=%3 4=%4 5=%5
Exit /B
除此之外,您别无选择,只能将变量的参数/参数Set
@Echo Off
Set "one=%~1"
Set "two=%~2"
Set "three=%~3"
Set "four=%~4"
Set "five=%~5"
Echo one=%one% two=%two% three=%three% four=%four% five=%five%
Set "five=cinco"
Echo one=%one% two=%two% three=%three% four=%four% five=%five%
Pause
,然后根据需要重新定义它们:
示例:
StartDate = x.StartDate == default(LocalDate) ? null : x.StartDate .ToIsoDateString()
答案 1 :(得分:0)
“我很好奇您为什么认为需要清除%5的定义”
添加的参数(如果存在)将影响长时间使用的脚本的操作。脚本的操作基于CMD行中参数的内容和数量。
我想在检测到'test'参数的脚本中添加前缀以设置test =“ @ echo”的变量,然后删除'test'以防止脚本检测到参数错误或行为不正确。 / p>
该脚本将被修改,以在每个“操作”行的前面加上%test%。如果没有测试参数,该脚本将按原样运行,并且当存在该脚本时,它将让我构建一组用例,这些用例可用于解释脚本的作用。
感谢您的帮助,SHIFT / n其中n是最后一个参数将满足我的需要。