字符串替换 *./*: 什么都不用,使用从命令行传递给批处理文件的变量
String replace *./*: with nothing, using variable passed to batch file from command line
我正在扯头发。为什么没有可用于批处理脚本的调试器?
我当前批处理脚本的第一步(它确实必须在这个 "language" 中,因为我没有 c/wscript 可以使用)只是删除小时部分的(最初是 1:10 格式的参数,最近已更改为尝试使用小时+分钟分隔符,该分隔符与 set
替换部分字符串的分隔符不同), 这样我也可以获得论证的微小部分。到目前为止我已经尝试过:
- 延迟扩展 -
set ShutdownMinute2762=!ShutdownTime2762:*.=!
标准扩展的各种版本(作为一些记忆中的例子):
我。 set ShutdownMinute2762=%ShutdownTime2762:*.=%
二. set ShutdownMinute2762=%%ShutdownTime2762%:*.=%
三. set ShutdownMinute2762=%%%ShutdownTime2762%:*.=%%
转义 *
和 call set
版本中的 .
,使用 ^
的
- [如下]在脚本启动时将参数存储在另一个变量中
- 在脚本中设置
ShutdownTime2762
变量,而不是通过参数
[如下] - 使用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
.
添加此时使用的两个变量的 echo
es 确实应该不会为 var2
产生任何输出,但应该为 var1
.[=42= 显示 1.10
]
第二个 set
将 var1
中的所有字符分配给 除了 直到并包括第一个 .
的字符到 var2
, 所以 var2
应该获取值 10
.
第三个 set
使用 call
调用解析两次。第一个替换 var2
的值(因为 它 在单个 %
之间),第二个执行 set "var1=%var1:.10=%"
因为 var2
将被替换到命令中。这会将 1
分配给 var1
,因为 .10
被 nothing.
替换
set var
节省了在 echo %var1% %var2%
上的输入,因为它列出了从 var
开始的所有变量的值
我习惯使用的 set "var=value"
语法,因为它确保批处理行上的尾随空格不包含在分配的值中(这可能很难调试)
我正在扯头发。为什么没有可用于批处理脚本的调试器?
我当前批处理脚本的第一步(它确实必须在这个 "language" 中,因为我没有 c/wscript 可以使用)只是删除小时部分的(最初是 1:10 格式的参数,最近已更改为尝试使用小时+分钟分隔符,该分隔符与 set
替换部分字符串的分隔符不同), 这样我也可以获得论证的微小部分。到目前为止我已经尝试过:
- 延迟扩展 -
set ShutdownMinute2762=!ShutdownTime2762:*.=!
标准扩展的各种版本(作为一些记忆中的例子):
我。
set ShutdownMinute2762=%ShutdownTime2762:*.=%
二.set ShutdownMinute2762=%%ShutdownTime2762%:*.=%
三.set ShutdownMinute2762=%%%ShutdownTime2762%:*.=%%
转义
*
和call set
版本中的.
,使用^
的- [如下]在脚本启动时将参数存储在另一个变量中
- 在脚本中设置
ShutdownTime2762
变量,而不是通过参数 [如下] - 使用
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
.
添加此时使用的两个变量的 echo
es 确实应该不会为 var2
产生任何输出,但应该为 var1
.[=42= 显示 1.10
]
第二个 set
将 var1
中的所有字符分配给 除了 直到并包括第一个 .
的字符到 var2
, 所以 var2
应该获取值 10
.
第三个 set
使用 call
调用解析两次。第一个替换 var2
的值(因为 它 在单个 %
之间),第二个执行 set "var1=%var1:.10=%"
因为 var2
将被替换到命令中。这会将 1
分配给 var1
,因为 .10
被 nothing.
set var
节省了在 echo %var1% %var2%
上的输入,因为它列出了从 var
我习惯使用的 set "var=value"
语法,因为它确保批处理行上的尾随空格不包含在分配的值中(这可能很难调试)