Windows 字符串replace*/*:不带任何内容,使用从命令行传递到批处理文件的变量
我正在把头发扯下来。为什么不能为批处理脚本提供调试器 我当前批处理脚本的第一步(它必须使用这种“语言”,因为我不能使用c/wscript)只是删除批处理脚本的小时部分(最初是1:10格式的参数,最近被更改为尝试使用一个小时+分钟分隔符,该分隔符与Windows 字符串replace*/*:不带任何内容,使用从命令行传递到批处理文件的变量,windows,batch-file,cmd,variable-expansion,Windows,Batch File,Cmd,Variable Expansion,我正在把头发扯下来。为什么不能为批处理脚本提供调试器 我当前批处理脚本的第一步(它必须使用这种“语言”,因为我不能使用c/wscript)只是删除批处理脚本的小时部分(最初是1:10格式的参数,最近被更改为尝试使用一个小时+分钟分隔符,该分隔符与setreplacement部分字符串的分隔符不同),因此我还可以获取参数的分钟部分。到目前为止,我尝试了: 延迟扩展-设置关机分钟2762=!关机时间2762:*。=! 标准扩展的各种版本(如一些记忆中的示例): i、 设置关机分钟2762=%Shut
set
replacement部分字符串的分隔符不同),因此我还可以获取参数的分钟部分。到目前为止,我尝试了:
设置关机分钟2762=!关机时间2762:*。=!
设置关机分钟2762=%ShutdownTime2762::.=%
ii.
设置关机分钟2762=%ShutdownTime2762%:*。=%
iii.设置关机分钟2762=%%%ShutdownTime2762%:*。=%%
调用集
版本中,使用^
对*
和
进行转义ShutdownTime2762
变量,而不是通过参数呼叫集
setlocal
set ShutdownTime2762=%1
call set ShutdownMinute2762=%%ShutdownTime2762:*.=%%
call set ShutdownHour2762=%%ShutdownTime2762:%ShutdownMinute2762%=%%
echo.%ShutdownHour2762%
echo.%ShutdownMinute2762%
endlocal
1.10
预期输出:
1
10
随着each.single.run.after.each.single.change.two%ShutdownHour2762%
和%ShutdownMinute2762%
显示为空。我缺少什么?会
for /f "tokens=1* delims=." %%a in ("%1") do set shutdownhour=%%a&set shutdownminute=%%b
echo %shutdownhour%
echo %shutdownminute%
做你想做的事
使用
设置:
@ECHO关闭
SETLOCAL
设置“var1=%1”
设置“var2=%var1:*。=%”
调用集“var1=%%var1:。%var2%=%%”
集合变量
后藤:EOF
setlocal
确保在过程结束时,对环境所做的任何更改都会被备份,这样更改就不会因运行多个批或重复批而累积
第一个set
将命令行中的第一个参数指定给var1
,给定1.10
的参数,该参数应将1.10
指定给var1
此时添加两个变量的echo
es确实不会产生var2
的输出,但应显示var1
的1.10
第二个集合
将var1
中的所有字符(第一个
之前的字符除外)分配给var2
,因此var2
应获取值10
第三个set
使用call
调用解析两次。第一个替换var2
的值(因为它介于单个%
之间),第二个执行set“var1=%var1:.10=%”
因为var2
的值将被替换到命令中。这将1
分配给var1
,因为.10
被零替换
set var
保存键入echo%var1%%var2%
,因为它列出了从var
开始的所有变量的值
设置“var=value”
语法是我惯用的,因为它确保批处理行上的尾随空格不包含在指定的值中(这可能很难调试)您能提供一个预期输入/预期输出值的样本吗?@LotPings-不是这样。在第一组中,我希望使用*。
表示所有内容,包括,
都被替换为零(我真的希望我可以使用:
,但是,如果这使代码变得更复杂,我将拒绝使用修改后的时间格式)。引用的问题希望在文本中使用*
。如果引用参数,我会使用“%~1”。这是我太慢的答案;-)+1看起来是这样。虽然我可能会使用这个,但考虑到我花了很多时间试图让格式set variableB=%variableA::.=%
起作用,你能想出如何使用这个格式来获得想要的结果吗?谢谢,但是set
示例似乎不起作用。介绍echo.%var1%
和echo.%var2%
在前两个集合之间产生命令行参数,然后是一行空白输出。我也不明白最后一个集合var
的用途。也许解释一下代码是如何工作的可能有助于跟踪问题。感谢您的解释。集合var
的使用现在看起来很明显。但是我认为问题一直是(使用您的答案变量名)设置“var1=%1”\n如果“%var1%”“eq”(…)其他()
为了简化示例中的代码,我省略了。删除if-else,就可以得到所需的输出。保留它,输出为空,尽管在else
子句的开头echo%var1%
报告它仍然充满了%1
?!??你在帖子中没有提到if-else
。这很简单一个全新的雷区。。。