我想结合以下字符串操作...
SET MYVAR=someStringWithSomeExpressionInside
SET MYVAR=%MYVAR:Expression=thing%
SET MYVAR=%MYVAR:~4%
...类似这样:
SET MYVAR=%MYVAR:Expression=thing~4%
编辑
让您了解我打算做什么:
SET TIMESTAMP=%DATE:~8,2%%DATE:~3,2%%DATE:~0,2%%TIME:~0,2%%TIME:~3,2%%TIME:~6,2%
SET TIMESTAMP=%TIMESTAMP: =0%
..这应该是一个没有任何帮助程序变量的SET命令。
答案 0 :(得分:0)
您的意思是这样吗?
set "MYVAR=someStringWithSomeExpressionInside"
set "MYVAR1=%MYVAR:Expression=thing%"
set "MYVAR2=%MYVAR1:~4%"
set "VAR=%MYVAR%%MYVAR1%%MYVAR2%"
echo %VAR%
或
set "MYVAR=someStringWithSomeExpressionInside"
set "VAR=%MYVAR%%MYVAR:Expression=thing%%MYVAR:~4%"
echo %VAR%
但是很遗憾,按照我发表的评论,没有单行替换可以批量替换。
答案 1 :(得分:0)
使用wmic可以获得更可靠的值,唯一的不同是,无需进一步的字符串操作,就可以给出完整的年份(YYYY):
for /F "tokens=2 delims==." %%t in ('wmic OS Get localdatetime /value') do set stamp=%%t
我不认为有一种解决方案可以在一个命令中组合多个字符串操作,但是您可以对/ f执行类似的操作。
首先具有与上述相同的结果(YYYY格式):
for /F "tokens=1-6 delims=,.:" %%a in ("%date%,%time%") do set stamp=%%c%%b%%a%%d%%e%%f
这里是您在问题中使用的格式:
for /F "tokens=1-6 delims=,.:" %%a in ("%date:~0,6%%date:~8,2%,%time%") do set stamp=%%c%%b%%a%%d%%e%%f
这里所有版本组合在一起,从而产生相等的输出:
@echo off
SET TIMESTAMP=%DATE:~8,2%%DATE:~3,2%%DATE:~0,2%%TIME:~0,2%%TIME:~3,2%%TIME:~6,2%
SET TIMESTAMP=%TIMESTAMP: =0%
echo #1=%TIMESTAMP%
for /F "tokens=2 delims==." %%t in ('wmic OS Get localdatetime /value') do set stamp=%%t
echo #2=%stamp:~2%
for /F "tokens=1-6 delims=,.:" %%a in ("%date%,%time%") do set stamp=%%c%%b%%a%%d%%e%%f
echo #3=%stamp:~2%
for /F "tokens=1-6 delims=,.:" %%a in ("%date:~0,6%%date:~8,2%,%time%") do set stamp=%%c%%b%%a%%d%%e%%f
echo #4=%stamp%
pause