我正在编写一个批处理文件,它将返回特定路径中所有目录的列表。
我在目录中有几个文件夹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 命令。
请告诉我您是否需要自动化执行此操作或这是否足够。