簡體   English   中英

Windows批處理腳本在if條件下替換子字符串

[英]windows batch script replace substring in a if condition

試圖將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

似乎延遲的表達在這里發揮了作用。 但我無法克服這一點。 如何替換if條件中的子字符串。

這是一種更好的方法:

@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將自動添加。

您正在set呼叫中使用延遲擴展,因此在這種情況下,您需要通過!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%

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM