我正在编写一个批处理来对当前目录中的所有目录运行命令。
首先,我做dir /A:D
,但这甚至给出了我不想运行命令的.
和..
目录。
我知道我可以通过写
来排除它们IF NOT %%x EQU "."
IF NOT %%x EQU ".."
但是有更通用的方法吗?像:
set EXCLUDED=".","..","bob"
set FOLDERS=dir /A:D
rem for each in EXCLUDED, remove from FOLDERS
rem run my command(s) on FOLDERS
答案 0 :(得分:2)
您可以添加/b
开关以排除.
和..
,只要您不需要dir /a:d
提供的其他信息。
要排除其他目录,请使用find /v
,如下所示:
dir /a:d /b | find /v "bob" | find /v "alice"
/v
开关将输出除给定行之外的所有其他内容。
答案 1 :(得分:0)
显然,您使用for
循环(可能是for /f "..." %%x in ('dir ...') do ...
)。有一个特殊参数/D
可用于目录:
@echo off
setlocal EnableDelayedExpansion
FOR /D %%x IN (*) do (
ECHO %%x|FINDSTR /ivx "bob joe jane">nul && (
ECHO do stuff with %%x
) || (
ECHO skipping %%x
)
)
(只要“排除”文件夹名称中没有空格)
PS:此处无需排除.
和..
,因为for /d
没有显示它们。