Blumer
Blumer

Reputation: 73

Variable substring Edit/Replace inside a for loop

I want to replace a variable's substring, previously stored on a variable inside a for loop, I tried to do it like this but it didn't work:

setlocal EnableDelayedExpansion
set checkVar=abcd
FOR %%Y IN (*.pdf) DO (  
    SET meu=%%Y
    CALL SET meuWithoutChar=!meu:%%%checkVar%%%=! 
    ECHO meuWithoutChar=!meuWithoutChar!
)

For example here if %%Y==blepabcdnnnn.pdf; I want to have meuWithoutChar=blepnnnn.pdf on the output Thank you in advance

Upvotes: 0

Views: 69

Answers (2)

Compo
Compo

Reputation: 38589

As a supplement/extension to Squashmans answer.
Only cycles through necessary files and ignores the file's extension.

Without delayed expansion:

@Echo Off
SetLocal DisableDelayedExpansion
Set "strChr=abcd"
For %%A In ("*%strChr%*.pdf") Do (Set "objFileName=%%~nA"
    Call Set "objNewFile=%%objFileName:%strChr%=%%%%~xA"
    Call Echo %%%%objNewFile%%%%=%%objNewFile%%)
Pause

With full script delayed expansion, (will have issues with filenames containing !'s):

@Echo Off
SetLocal EnableDelayedExpansion
Set "strChr=abcd"
For %%A In ("*%strChr%*.pdf") Do (Set "objFileName=%%~nA"
    Set "objNewFile=!objFileName:%strChr%=!%%~xA"
    Echo %%objNewFile%%=!objNewFile!)
Pause

With toggled delayed expansion, (protects filenames containing !'s):

@Echo Off
SetLocal DisableDelayedExpansion
Set "strChr=abcd"
For %%A In ("*%strChr%*.pdf") Do (Set "objFileName=%%~nA"
    SetLocal EnableDelayedExpansion
    Set "objNewFile=!objFileName:%strChr%=!%%~xA"
    Echo %%objNewFile%%=!objNewFile!
    EndLocal)
Pause

Upvotes: 1

Squashman
Squashman

Reputation: 14290

You are bit confused on the concept of delayed expansion and the use of CALL to get an extra phase of expansion. Here are the examples. I am just using your single file example. You can change it back to using the wildcard.

CALL example

@echo off
set checkVar=abcd
FOR %%Y IN (blepabcdnnnn.pdf) DO (  
SET "meu=%%Y"
CALL SET "meuWithoutChar=%%meu:%checkVar%=%%" 
CALL ECHO meuWithoutChar=%%meuWithoutChar%%
)
pause

Delayed Expansion

@echo off
setlocal Enabledelayedexpansion
set checkVar=abcd
FOR %%Y IN (blepabcdnnnn.pdf) DO (  
SET "meu=%%Y"
SET "meuWithoutChar=!meu:%checkVar%=!" 
ECHO meuWithoutChar=!meuWithoutChar!
)
pause

Upvotes: 2

Related Questions