我破坏了一些代码,这些代码应该删除没有以值为开头的名称的文件keep
.我通过将文件的名称放入tmpL1
并且tmpL2
在替换keep
没有任何值的情况下实现此目的.如果tmpL1
和tmpL2
不同我保留文件,否则它将被删除.
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
(这是一个免费的翻译,因为我的控制台是德语).
任何人都知道造成这种情况的原因是什么?