尝试将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条件中的子串。
答案 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%