字符串替换 *./*: 什么都不用,使用从命令行传递给批处理文件的变量

String replace *./*: with nothing, using variable passed to batch file from command line

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

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

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

    我。 set ShutdownMinute2762=%ShutdownTime2762:*.=%
    二. set ShutdownMinute2762=%%ShutdownTime2762%:*.=%
    三. set ShutdownMinute2762=%%%ShutdownTime2762%:*.=%%

  3. 转义 *call set 版本中的 .,使用 ^

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

    setlocal
    
    set ShutdownTime2762=%1
    
    call set ShutdownMinute2762=%%ShutdownTime2762:*.=%%
    call set ShutdownHour2762=%%ShutdownTime2762:%ShutdownMinute2762%=%%
    
    echo.%ShutdownHour2762%
    echo.%ShutdownMinute2762%
    
    endlocal
    

提供的输入: 1.10
预期输出:
1
10

每一个。单身的。 运行。后。每一个。单身的。改变。 %ShutdownHour2762%%ShutdownMinute2762% 都显示为空。 我错过了什么?

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 .

添加此时使用的两个变量的 echoes 确实应该不会为 var2 产生任何输出,但应该为 var1.[=42= 显示 1.10 ]

第二个 setvar1 中的所有字符分配给 除了 直到并包括第一个 . 的字符到 var2, 所以 var2 应该获取值 10.

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

替换

set var 节省了在 echo %var1% %var2% 上的输入,因为它列出了从 var

开始的所有变量的值

我习惯使用的 set "var=value" 语法,因为它确保批处理行上的尾随空格不包含在分配的值中(这可能很难调试)