Yarasa komut dosyasında bir for döngüsü içindeki dize değiştirme


2

Bu komut dosyasında yerine koyma işlemi iyi gider. Dinamik hale getirmeye çalışıyorum.

SETLOCAL enabledelayedexpansion
for /f "tokens=* delims= " %%a in (C:\workspace\iwms_kw_patch_script\BuildPatchScript\140903111828_batch_file.txt) do (
    set lineString=%%a

    set str2=!lineString:C:\iwms_builder_working_directory\tmp\IWMS_KW_01_CBI_2014-003\=!
    echo !str2!

    echo IF NOT %ERRORLEVEL%==0 GOTO ERROR_HANDLER2 >> %output_file%
)
endlocal

Ve bu da çalışmıyor

SETLOCAL enabledelayedexpansion
for /f "tokens=* delims= " %%a in (C:\workspace\iwms_kw_patch_script\BuildPatchScript\140903111828_batch_file.txt) do (
    set to_replace=C:\iwms_builder_working_directory\tmp\IWMS_KW_01_CBI_2014-003\
    set lineString=%%a
    set str2=!lineString:%to_replace%=!
    echo !str2!

    echo IF NOT %ERRORLEVEL%==0 GOTO ERROR_HANDLER2 >> %output_file%
)
endlocal

Bir for döngüsü içinde değişken ile bir dize yerine yapabilir miyim? Teşekkür ederim: D

Yanıtlar:


0

Sorun değişkenin genişlemesidir. Değişken forkod bloğunun içinde değiştirilmişse , aynı blok içindeki değerine erişmek için gecikmeli genişleme gerekir.

Ama böyle bir şey yapamaz !lineString:!to_replace!=!ayrıştırıcı açılmasını yorumlayacaktır olarak !içinde to_replacesonlandırma og olarak lineString.

Demek iki seçeneğin var.

En kolay olanı, forkomut başlamadan önce bilinmesi için bu değerin değiştirilmesini gerektirir . Sadece komuttan to_replaceönce tanımlayın for. Ayrıştırıcı forkomuta ulaştığında değişken doğru değere sahiptir ve uygun şekilde genişletilir.

Ancak, herhangi bir nedenden dolayı forkomut içindeki değişkenin değerini tanımlamanız gerekiyorsa, kodunuzu şu şekilde değiştirmeniz gerekecektir.

for /f "tokens=* delims= " %%a in ( .... ) do (
    set "lineString=%%a"

    set "to_replace= .... "
    for %%b in ("!to_replace!") do set "str2=!lineString:%%~b=!"

    echo !str2!
)

Bu, değişkendeki değeri for, change ifadesinde kullanılan yeni değiştirilebilir bir parametrede saklar.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.