批处理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%"又获取不到值,直接填写路径又得写好多遍循环,应该怎么修改才正确呢 展开
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%"又获取不到值,直接填写路径又得写好多遍循环,应该怎么修改才正确呢 展开
展开全部
@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删掉。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询