[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文件操作] 【已解决】批处理for多数值递归不到后面的值?

本帖最后由 hztccy 于 2024-11-28 12:36 编辑
  1. @echo off
  2. CD /D C:\Users
  3. for %%i in (123.* *456.* 789.*) do (
  4.     echo 可删除的: %%i
  5. )
复制代码
搜索不到*456.*和789.*只能查找到123.*的文件

对for总是一知半解,搞不懂,我哪里错了

但是我使用CD命令
  1. cd /d C:\users\public\desktop
复制代码
然后在使用
  1. for %%i in (123.* *456.* 789.*) do (
  2.     echo 可删除的: %%i
  3. )
复制代码
却可以循环123.* *.456.* 789.*全部文件
求大佬指教

答案:在20楼,问题出在for不会扫描带有隐藏属性的路径内文件,就算路径下的其他文件不为隐藏属性,但是文件夹处于隐藏属性时,依然会被for给忽略不在扫描该路径下的其他文件
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

回复  hztccy

for %%i in (...*...?...) 这个句式仅匹配当前目录下的目标文件,而 123.* 文件在 C:\use ...
aloha20200628 发表于 2024-11-22 21:00



    奇怪,我也是试过使用/R参数,但是我在三台Windows10电脑分别测试,发现其中有一台电脑,依然是只能123.*后面的都不识别

TOP

回复 5# aloha20200628


    DIR命令我试过,能找到我需要的文件,就是使用for无法找到

TOP

回复 7# Batcher


    加入DIR的方式,我试过是可以的,目前就是直接使用for 或 for /R的参数只是无法完全递归出来,正在纠结这个。

TOP

回复 8# aloha20200628


    调用外部DIR我试过,之前已经说过了可以的,现在纠结的是,不调用外用外部命令就真的无法递归出来了嘛?

TOP

回复 12# aloha20200628


    我的123.* 456.* 789.*均在C:\Users\Public\Desktop有文件,那么我CD /D 到C:\users时,就应该可以直接for循环出来,但是现在for循环只在C:\users这一层级上,在往下Public\Desktop这个层级却是不曾搜索。
这里才是我纠结的位置。

TOP

回复 11# qixiaobin0715


    其实如果for可以不加dir的情况,这样其实是有利于我缩短代码量,优化简短一些代码,这个是我比较想实现的,虽然for+dir虽然可以,但是却会额外增加代码难度。

TOP

回复 15# aloha20200628


    然而并非如此,三台电脑,都是我作用测试的实体机,并非虚拟机和客服机,文件均是我为了测试而创建,也就不存在隐藏文件一说

TOP

回复 15# aloha20200628


    隐藏属性不存在的,因为我作为测试,电脑是123.* 456.* 789.*均为我新创建的文件,所以隐藏属性不存在。这里现在就是我最纠结的,到底是递归的问题,还是其他问题引起还在摸索中。。。

TOP

回复 21# Five66


    你说对了。我把public下的desktop是隐藏的的问题给忽略了。不能扫描出来的就是desktop文件夹处于隐藏状态,另外另外可以正常扫描的desktop文件夹是正常显示的,所以for在到desktop这一层级时,发现desktop这个文件时隐藏的直接放弃扫描了。包括desktop文件夹内的其他文件都不扫描了

TOP

返回列表