Ho saltato del codice che dovrebbe eliminare file che non hanno nomi che iniziano con il valore di keep
. Sto raggiungendo questo mettendo il nome del file in tmpL1
e tmpL2
sostituendo il valore di keep
con niente. Se tmpL1
e tmpL2
sono diversi, sto mantenendo il file, altrimenti viene eliminato.Sostituzione stringa batch di Windows non funziona quando una stringa di ricerca viene fornita da una variabile
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]
)
)
Questo funziona correttamente. Tuttavia, quando inserisco questo codice in uno script più grande, l'impostazione di tmpL2
smette improvvisamente di funzionare. Invece di (una parte) il nome file tmpL2
ora contiene letteralmente tmpL1:=
.
Ecco lo script in cui voglio utilizzarlo. Gli ulteriori for
-loops sono solo per passare attraverso un albero di directory. La funzione principale dello script è sempre la stessa.
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]
)
)
)
)
)
)
Ho anche provato "artificiale" espansione ritardata sostituendo set tmpL2=!tmpL1:%keep%=!
con call set tmpL2=%%tmpL1:%keep%=%%
. Questo funziona anche nel piccolo script, ma quando lo applico al grande viene visualizzato un errore come "=%" can't be syntactically processed in this location
(che è una traduzione gratuita poiché la mia console è in tedesco).
Qualcuno ha un'idea di cosa sta causando questo?
incollato correttamente e funziona come un incantesimo. Grazie! – user3249829