是否可以重新定义CMD线参数

时间:2019-05-20 07:54:59

标签: batch-file

我正在寻找如何在执行批处理文件的过程中将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不变

2 个答案:

答案 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是最后一个参数将满足我的需要。