Windows 字符串replace*/*:不带任何内容,使用从命令行传递到批处理文件的变量

Windows 字符串replace*/*:不带任何内容,使用从命令行传递到批处理文件的变量,windows,batch-file,cmd,variable-expansion,Windows,Batch File,Cmd,Variable Expansion,我正在把头发扯下来。为什么不能为批处理脚本提供调试器 我当前批处理脚本的第一步(它必须使用这种“语言”,因为我不能使用c/wscript)只是删除批处理脚本的小时部分(最初是1:10格式的参数,最近被更改为尝试使用一个小时+分钟分隔符,该分隔符与setreplacement部分字符串的分隔符不同),因此我还可以获取参数的分钟部分。到目前为止,我尝试了: 延迟扩展-设置关机分钟2762=!关机时间2762:*。=! 标准扩展的各种版本(如一些记忆中的示例): i、 设置关机分钟2762=%Shut

我正在把头发扯下来。为什么不能为批处理脚本提供调试器

我当前批处理脚本的第一步(它必须使用这种“语言”,因为我不能使用c/wscript)只是删除批处理脚本的小时部分(最初是1:10格式的参数,最近被更改为尝试使用一个小时+分钟分隔符,该分隔符与
set
replacement部分字符串的分隔符不同),因此我还可以获取参数的分钟部分。到目前为止,我尝试了:

  • 延迟扩展-
    设置关机分钟2762=!关机时间2762:*。=!
  • 标准扩展的各种版本(如一些记忆中的示例):

    i、
    设置关机分钟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
    。这很简单一个全新的雷区。。。