我正在撕开我的头发。为什么没有可用于批处理脚本的调试器?
我当前批处理脚本的第一步(它必须在这个"语言",因为我没有能够使用c / wscript)只是删除小时(最初是1:10格式的参数,最近更改为尝试一小时+分钟的分隔符,与set
替换部分的分隔符相同字符串),这样我也可以获得参数的一小部分。我到目前为止尝试过:
set ShutdownMinute2762=!ShutdownTime2762:*.=!
各种版本的标准扩展(如一些记忆中的例子):
我。 set ShutdownMinute2762=%ShutdownTime2762:*.=%
II。 set ShutdownMinute2762=%%ShutdownTime2762%:*.=%
III。 set ShutdownMinute2762=%%%ShutdownTime2762%:*.=%%
转发*
& .
版本中的call set
,^
&#39>
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%
显示为空。 我缺少什么?
答案 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}}。
第二个var1
将set
中的所有字符分配给字符,直至并包括第一个var1
到.
,所以{ {1}}应获取值var2
。
第三个var2
使用10
来调用解析两次。第一个替换set
的值(因为它在单个call
之间),第二个执行var2
,因为%
的值将是替换为命令。这会将set "var1=%var1:.10=%"
分配给var2
,因为1
已替换为 nothing 。
var1
保存.10
上的输入,因为它列出了从set var
开始的所有变量的值
我习惯使用echo %var1% %var2%
语法,因为它确保批处理行上的尾随空格不包含在分配的值中(可能很难调试)