当前位置:  开发笔记 > 编程语言 > 正文

Windows批处理字符串替换在变量给出搜索字符串时不起作用

如何解决《Windows批处理字符串替换在变量给出搜索字符串时不起作用》经验,为你挑选了0个好方法。

我破坏了一些代码,这些代码应该删除没有以值为开头的名称的文件keep.我通过将文件的名称放入tmpL1并且tmpL2在替换keep没有任何值的情况下实现此目的.如果tmpL1tmpL2不同我保留文件,否则它将被删除.

setlocal enabledelayedexpansion
set keep=[File I want to keep]
for /F %%L IN ('dir /b *') do (
    set tmpL1=%%L
    set tmpL2=!tmpL1:%keep%=!
    if !tmpL1!==!tmpL2! (
        echo.[REMOVE]
    ) else (
        echo.[KEEP]
    )
)

这工作正常.但是,当我将此代码放在一个更大的脚本中时,设置tmpL2突然停止工作.而不是(部分)文件名tmpL2现在字面上包含tmpL1:=.

这是我想要使用它的脚本.附加的for-loops仅用于浏览目录树.脚本的主要功能仍然相同.

setlocal enabledelayedexpansion
for /F %%G in ('dir /b *-snapshots') do (
    set tmpG1=%%G
    for /F %%H in ('dir /b !tmpG1!\*') do (
        set tmpH1=%%H
        for /F %%I in ('dir /b !tmpG1!\!tmpH1!\*') do (
            set tmpI1=%%I
            for /F %%J in ('dir /b !tmpG1!\!tmpH1!\!tmpI1!\*-SNAPSHOT') do (
                set tmpJ1=%%J
                set tmpJ2=!tmpJ1:~0,8!
                for /F %%K in ('dir /b !tmpG1!\!tmpH1!\!tmpI1!\!tmpJ1!\*!tmpJ2!*.pom /O:N') do (
                    set tmp1=%%K
                )
                set keep=!tmp1:.pom=!
                for /F %%L in ('dir /b !tmpG1!\!tmpH1!\!tmpI1!\!tmpJ1!\*!tmpJ2!*') do (
                    set tmpL1=%%L
                    set tmpL2=!tmpL1:%keep%=!
                    pause
                    if !tmpL1!==!tmpL2! (
                        echo.[REMOVE]
                    ) else (
                        echo.[KEEP]
                    )
                )
            )
        )
    )
)

我也试过更换"懒"延迟扩展set tmpL2=!tmpL1:%keep%=!call set tmpL2=%%tmpL1:%keep%=%%.这也适用于小脚本,但当我将它应用到大脚本时,我得到一个错误"=%" can't be syntactically processed in this location(这是一个免费的翻译,因为我的控制台是德语).

任何人都知道造成这种情况的原因是什么?

推荐阅读
Chloemw
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有