批处理for /r循环参数使用变量的问题

setLogDir=D:\wangluo-logsetlocalenabledelayedexpansion……for/d%%kin(*)do(……for/d%%kin(... set LogDir=D:\wangluo-log
setlocal enabledelayedexpansion
……
for /d %%k in (*) do (
……
for /d %%k in (*) do (
set SrcDir=%LogDir%\%%k
set sd=!SrcDir!
for /r !sd! %%a in (*.eml *.log) do (
……
if exist "%%a" (
del /f /q "%%a"
)
)
)
endlocal
以上是批处理的部分代码,,在for /r后面的目录参数使用"!LogDir!\%%k"、"!SrcDir!"、"!sd!"直接跳过循环,"%LogDir%\%%k"、"%SrcDir%"、"%sd%"又获取不到值,直接填写路径又得写好多遍循环,应该怎么修改才正确呢
展开
 我来答
依梦琴瑶
高粉答主

2016-08-10 · 说的都是干货,快来关注
知道顶级答主
回答量:6.9万
采纳率:82%
帮助的人:1.7亿
展开全部
@echo off
set LogDir=D:\wangluo-log
setlocal enabledelayedexpansion
cd /d %LogDir%
for /d %%k in (*) do (
    pushd %LogDir%\%%k
    for /r %%a in (*.eml *.log) do (
        if exist "%%~a" (del /f /q "%%~a")
    )
    popd
)
endlocal
更多追问追答
追问
之前试过了不行,我在外面的for之前就设置了pushd %LogDir%,其他代码用,再用pushd %LogDir%\%%k切换,不知道为什么切换不了,echo %cd%输出还是D:\wangluo-log,delete的是%LogDir%目录下的文件,而不是遍历的子目录%%k,因为在for /r之前要判断子目录的名字,有几个目录的文件要压缩,不能delete。需要分析的话,我贴出整个脚本
追答
那就把你之前的pushd删掉。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式