gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 13:24:54 26 4
gpt4 key购买 nike

我删除了一些代码,这些代码应该删除名称不以 keep 值开头的文件。我通过将文件名放在 tmpL1tmpL2 中,同时用空值替换 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 循环仅用于遍历目录树。脚本的主要功能还是一样。

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是德语)。

有人知道是什么原因造成的吗?

最佳答案

你可以尝试改变这一行
设置 tmpL2=!tmpL1:%keep%=!

FOR /F "delims=" %%R in (""!keep!"") do set "tmpL2=!tmpL1:%%~R=!"

关于当搜索字符串由变量给出时,Windows 批处理字符串替换不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34290507/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com