变量子串在for循环内编辑/替换

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了变量子串在for循环内编辑/替换相关的知识,希望对你有一定的参考价值。

我想替换一个变量的子串,以前存储在for循环中的一个变量上,我试着像这样做,但它不起作用:

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

例如这里if %%Y==blepabcdnnnn.pdf;我想在输出上有meuWithoutChar=blepnnnn.pdf谢谢你提前

答案

您对延迟扩展的概念以及使用CALL进行额外的扩展阶段感到有点困惑。以下是示例。我只是使用你的单个文件示例。您可以将其更改回使用通配符。

CALL示例

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

延迟扩张

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

作为Squashmans答案的补充/延伸。 仅循环访问必要的文件并忽略文件的扩展名。

没有延迟扩张:

@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

使用完整脚本延迟扩展(将出现包含!文件名的问题):

@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

切换延迟扩展,(保护包含!的文件名):

@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

以上是关于变量子串在for循环内编辑/替换的主要内容,如果未能解决你的问题,请参考以下文章

Python For 循环随时间变慢

即使在设置 EnableDelayedExpansion [重复] 之后,也无法在批处理文件中的 for 循环内设置变量值

R:试图理解逻辑以用lapply()替换循环

使用从循环内的代码片段中提取的函数避免代码冗余/计算开销

js 如何保存循环内的变量,然后循环外使用这个变量?

在嵌套for循环内,打印字符串“。”并在满足条件时将其替换为其他字符。 MOOC Java Week 10'Dungeon'