批处理又出问题了,各种百度、测试都不行,无奈求助.1000无忧币

查看 339|回复 27
作者:夏阳   
   
如题,问题:下段代码即不报错,什么也不输出,不知道哪里出了问题?  图片有解释..不用延迟变量,只能输出一个分区的文件,所以还必须得用延迟变量。
@echo off
for %%w in (c,d,e,f,g,h,i,j,k,l,m) do if exist %%w: echo %%w:\>>pan.txt
setlocal enabledelayedexpansion
for /f %%s in (pan.txt) do (
set tt=%%s
for /r [!tt!] %%i in (*.txt *.exe) do echo %%~i
)
endlocal

变量, 也不, 出了

DOLLOR   
咨询 文心一言 试试
815979670   
似乎括号内的逗号应该改成空格
israinbow   
文心一言  清谱智言。。。
4630269wu   
   
[ol]@echo off
for %%w in (c,d,e,f,g,h,i,j,k,l,m) do if exist %%w: echo %%w:\>>pan.txt
setlocal enabledelayedexpansion
for /f %%s in (pan.txt) do (
set tt=%%s
pushd "!tt!"
for /r %%i in (*.txt *.exe) do echo %%~i
popd
)
endlocal
pause[/ol]复制代码
我也不太懂,但是试试看。
israinbow   
@echo off
for %%w in (c,d,e,f,g,h,i,j,k,l,m) do if exist %%w: echo %%w:\>>pan.txt
setlocal enabledelayedexpansion
for /f %%s in (pan.txt) do (
    set tt=%%s
    for /r %tt% %%i in (*.txt *.exe) do echo %%~i
)
endlocal
pause
chutsetien   
问题出在for /r [!tt!] %%i in (*.txt *.exe) do echo %%~i这句,[!tt!]改成%tt%就可以正常运行了
Trexrush   

bjay2008xmy 发表于 2024-2-22 17:10
@echo off
for %%w in (c,d,e,f,g,h,i,j,k,l,m) do if exist %%w: echo %%w:\>>pan.txt
setlocal enabled ...

不用延迟变量,而用%tt%肯定能输出,但只会输出一个盘的文件,因为%tt%只会接收一个变量,您可以自己测试一下
vmebeh   
   

sunsea 发表于 2024-2-22 16:59
我也不太懂,但是试试看。

pushd "!tt!"
for /r %%i in (*.txt *.exe) do echo %%~i
popd
  貌似可以,您用了pushd和popd, 这是啥东西,我先学习一下,,刚百度了一下,您这貌似变换了思路,既然FOR /R [[drive:]path] %variable IN...这里的[drive:]path不允许使用延迟变量,我干脆就不用延迟变量了,但如果不填drive:path参数的话,就会默认在当前批处理所在的文件夹下遍历文件,所以您先pushd,即临时更改目录,再popd(删除)这个目录(恢复到默认目录,即批处理所在的文件夹),下次再循环又会再变更新的目录(随着延迟变量而改变),,属于曲线救国,高!
noahhhh   
这是干什么用,批处理太危险
您需要登录后才可以回帖 登录 | 立即注册

返回顶部