windows批处理脚本替换if条件中的子字符串

时间:2016-02-15 13:09:37

标签: windows batch-file

尝试将11/22/2016替换为11222016.为此,我尝试了以下操作并按预期工作。

set string=dd/mm/yyyy.
set find=/
set replace=
call set string=%%string:!find!=!replace!%%
echo %string%

输出是ddmmyyyy

但是当我在if条件下尝试这个时,这没有按预期工作。

setlocal enabledelayedexpansion

    set isDateFound=false
    set string=dd/mm/yyyy.
    if "%isDateFound%" == "false" (
    echo %isDateFound%
    set find=/
    set replace=
    call set string=%%string:!find!=!replace!%%
    echo %string%
    )

输出dd / mm / yyyy

看起来delayedexpressions在这里扮演了一些角色。但我无法克服这一点。如何替换if条件中的子串。

2 个答案:

答案 0 :(得分:2)

这是一种更好的方法:

@echo off
FOR /F "tokens=1-3" %%a IN ('WMIC Path Win32_LocalTime Get Day^,Month^,Year ^| findstr [0-9]') DO (
    set "$Day=0%%a"
    set "$Month=0%%b"
    set "$Year=%%c"
 )

echo %$Year%%$Month:~-2%%$Day:~-2%

自动添加月和日之前的前导0。

答案 1 :(得分:1)

您在设置调用中使用延迟扩展,因此在这种情况下,您需要通过!string访问该值!不是%string%,所以:

setlocal enabledelayedexpansion

set isDateFound=false
set string=dd/mm/yyyy.
if "%isDateFound%" == "false" (
echo %isDateFound%
set find=/
set replace=
call set string=%%string:!find!=!replace!%%
echo !string!
)

注意 echo!string!而不是 echo%string%