字符串替换* ./ *:没有任何内容,使用从命令行

时间:2017-08-13 15:46:56

标签: windows batch-file cmd variable-expansion

我正在撕开我的头发。为什么没有可用于批处理脚本的调试器?

我当前批处理脚本的第一步(它必须在这个"语言",因为我没有能够使用c / wscript)只是删除小时(最初是1:10格式的参数,最近更改为尝试一小时+分钟的分隔符,与set替换部分的分隔符相同字符串),这样我也可以获得参数的一小部分。我到目前为止尝试过:

  1. 延迟展开 - set ShutdownMinute2762=!ShutdownTime2762:*.=!
  2. 各种版本的标准扩展(如一些记忆中的例子):

    我。 set ShutdownMinute2762=%ShutdownTime2762:*.=%
    II。 set ShutdownMinute2762=%%ShutdownTime2762%:*.=%
    III。 set ShutdownMinute2762=%%%ShutdownTime2762%:*.=%%

  3. 转发*& .版本中的call set^&#39>

  4. [如下]在脚本启动时将参数存储在另一个变量中
  5. 在脚本中设置ShutdownTime2762变量,而不是通过参数
  6. [如下] - 使用call set

    setlocal
    
    set ShutdownTime2762=%1
    
    call set ShutdownMinute2762=%%ShutdownTime2762:*.=%%
    call set ShutdownHour2762=%%ShutdownTime2762:%ShutdownMinute2762%=%%
    
    echo.%ShutdownHour2762%
    echo.%ShutdownMinute2762%
    
    endlocal
    
  7. 提供输入: 1.10
    预期输出:
    1
    10

    每一个。单。跑。后。每一个。单。更改。 %ShutdownHour2762%和{ %ShutdownMinute2762%显示为空。 我缺少什么?

1 个答案:

答案 0 :(得分:2)

for /f "tokens=1* delims=." %%a in ("%1") do set shutdownhour=%%a&set shutdownminute=%%b

echo %shutdownhour%
echo %shutdownminute%

做你想做的事情?

使用set

@ECHO OFF
SETLOCAL

SET "var1=%1"
SET "var2=%var1:*.=%"
CALL set "var1=%%var1:.%var2%=%%"
SET var

GOTO :EOF

setlocal确保在过程结束时撤消对环境所做的任何更改,以便不会因运行多个批次或重复批次而产生更改。

第一个set将命令行中的第一个参数分配给var1,如果参数1.10应该1.10分配给var1。< / p>

添加此时使用的两个变量的echo es确实不会产生var2的输出,但应显示1.10的{​​{1}}。

第二个var1set 中的所有字符分配给字符,直至并包括第一个var1.,所以{ {1}}应获取值var2

第三个var2使用10来调用解析两次。第一个替换set的值(因为在单个call之间),第二个执行var2,因为%的值将是替换为命令。这会将set "var1=%var1:.10=%"分配给var2,因为1已替换为 nothing

var1保存.10上的输入,因为它列出了从set var开始的所有变量的值

我习惯使用echo %var1% %var2%语法,因为它确保批处理行上的尾随空格不包含在分配的值中(可能很难调试)