批处理文件显示目录列表,不包括以下划线“_”开头的目录

批处理文件显示目录列表,不包括以下划线“_”开头的目录

我正在编写一个批处理文件,它将返回特定路径中所有目录的列表。

我在目录中有几个文件夹W:/wamp/www/以下划线开头_;例如_templates

我希望结果排除所有以 开头的文件夹_。我不需要这种递归的努力。

所以我当前的目录w:/wamp/www/如下所示:

  • _system
  • _templates
  • _assets
  • Folder1
  • Folder2
  • Folder3

期望的回声输出是:

  • Folder1
  • Folder2
  • Folder3

我可以使用下面的方法获得带有数字计数的列表,但当然它会抛出全部文件夹。任何帮助我都会很感激。我并不需要这个列表中的数字,所以如果有更优雅的方法,我将非常感激你的见解

set acctDir=w:\wamp\www\
set app=setup.exe /cd
set log=w:\wamp\logs\projectlogs.txt


set c=0
For /f %%a in ('dir !acctDir! /B /A /D') do (
    set /a c+=1
    echo     !c!  %%a
    set dir!c!=%%a
    set projectname=%%a
)

答案1

您可以在 FOR 循环内的某处测试下划线。

SET FIRSTCHAR=%%a
SET FIRSTCHAR=!FIRSTCHAR:~0,1!
IF NOT "!FIRSTCHAR!"=="_" (do some stuff)

此站点提供了一些有关在 CMD 中操作字符串的好技巧。 http://www.dostips.com/DtTipsStringManipulation.php

答案2

如果你需要的只是清单,那么完整的代码可能是

dir /a /b /d "w:\wamp\www" | findstr /v /b /c:"_"

用于findstr过滤列表,并仅检索行/v首不包含 ( ) 下划线的行 ( /b)

答案3

如果此系统至少是 Windows 7/Server 2008 R2,那么您可以在 Powershell 中以交互方式运行以下命令:

Get-ChildItem -Exclude _* -Path w:\wamp\www\ | where{$_.mode -like "d*"} | select name

建议彻底废弃批处理并转而使用 Powershell。它是 cmd(将来会被弃用)的后继者,并且由于其面向对象的特性而功能更加强大。

该命令检索 www 目录中不以“_”开头的所有内容,然后仅将目录通过管道传递到返回目录名称属性的 select 命令。

请告诉我您是否需要自动化执行此操作或这是否足够。

相关内容