批处理:合并字符串操作

时间:2018-08-15 08:38:28

标签: string batch-file operations

我想结合以下字符串操作...

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命令。

2 个答案:

答案 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