Batch file 使用Dir命令排除多个文件夹

Batch file 使用Dir命令排除多个文件夹,batch-file,dir,Batch File,Dir,在使用DIR命令时,我通过排除多个文件搜索了整个论坛。但是没有找到我真正需要的。有些甚至使用PHP或VBS,真的不知道它们是如何工作的 我试图做的是*DIR*所有配置文件文件夹,并排除某些默认文件夹,这是显示该计算机上有哪些用户以及有多少用户有配置文件的一部分 我会再解释一点,因为我可能不完全理解我的需求 如果我在没有findstr的情况下使用DIR 输出: Administrator All Users Default User LocalService userprofile1 Networ

在使用DIR命令时,我通过排除多个文件搜索了整个论坛。但是没有找到我真正需要的。有些甚至使用PHP或VBS,真的不知道它们是如何工作的

我试图做的是*DIR*所有配置文件文件夹,并排除某些默认文件夹,这是显示该计算机上有哪些用户以及有多少用户有配置文件的一部分

我会再解释一点,因为我可能不完全理解我的需求

如果我在没有findstr的情况下使用DIR

输出:

Administrator
All Users
Default User
LocalService
userprofile1
NetworkService
userprofile2
...
userprofileN
但我的实际需要是:

userprofile1
userprofile2
...
userprofileN
我的剧本也走到了这一步

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
IF ERRORLEVEL 1 ECHO Your OS does not support enable extensions
DIR /A:d /B "F:\Documents and Settings" | findstr /v "Admin" | findstr /v "Default" | findstr /v "LocalService" | findstr /v "NetworkService"
EXIT
我上面的脚本实际上可以正常工作,但已经修复,可能没有很好的编码。 我想问一下,是否可以使用For循环来缩短长findstr管道,并设置一个包含要排除的文件夹名称的变量? 我更喜欢使用变量,而不是包含要排除的文件夹的文本文件

我得出了以下结论,但它重复了输出:

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
IF ERRORLEVEL 1 ECHO Your OS does not support enable extensions
SET xUser="Admin" "Default" "hi_I_will_be_future_added"
FOR %%A IN (!Xuser!) DO ( 
 DIR /A:d /B "F:\Documents and Settings" | findstr /v %%A
)

感谢您来到这个伟大的论坛,感谢梅为我和其他人所做的一切。

为了更好地阅读,分成几行,当然,也可以是一行

@echo off
    dir /ad /b "c:\Documents And Settings" ^
    | findstr /l /i /x /v   ^
        /c:"Administrator"  ^
        /c:"All Users"      ^
        /c:"Default User"   ^
        /c:"LocalService"   ^
        /c:"NetworkService" 
或者,您可以生成一个包含所有要排除的字符串的文件,而不是将所有字符串作为
/c:“…”
参数传递,并使用findstr的
/g:filename
开关

F:\>dir /AD /B "c:\documents and settings"| FINDSTR /V "All Default Local Networ
k"
Admin
Administrator

F:\>

如果只想显示用户名(不带“F:\Documents and Settings”路径),请使用
echo%%~Na
DIR/A:d/B“F:\Documents and Settings\userprofile*”
?很抱歉,userprofile1-N只是一个虚拟名称。如果所有用户都是这样命名的,那么您的脚本实际上可能会工作。不管怎样,谢谢。哦!当我阅读描述时,我非常直观!例如,
DIR
命令显示用户配置文件的完整路径,但您说“我的实际需要是:”并仅显示配置文件,因此,您是否要删除路径<代码>;-)。请看下面我的答案…谢谢,我会测试它。几天后我会回来公布结果。如果使用比较条件的想法,看起来很干净。很好,谢谢。:)Ally,Allycia,Allyn,Allison,Allyson?嗯,但实际上这也是我在没有For…循环的情况下想到的。我不知道我可以用一个FINDSTR命令完成这个任务。强大!!我永远也做不到这样的代码,这些代码太复杂了。也是我梦寐以求的关于For..loop的东西,谢谢Aacini。你可以在这里查看这个方法的详细说明:谢谢,我已经在Windows XP上测试过了。它工作起来很有魅力,但我对“echo%%~Na”有点好奇,因为它已经只回显了用户配置文件名(我更喜欢)。
F:\>dir /AD /B "c:\documents and settings"| FINDSTR /V "All Default Local Networ
k"
Admin
Administrator

F:\>
@echo off
setlocal EnableDelayedExpansion

set exclude=/Administrator/All Users/Default User/LocalService/NetworkService/
for /F "delims=" %%a in ('DIR /A:d /B "F:\Documents and Settings"') do (
   if "!exclude:/%%~Na/=!" equ "%exclude%" echo %%a
)