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

时间:2014-06-09 18:56:46

标签: batch-file dir

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

我要做的是 * DIR * ing 所有个人资料文件夹,也不包括某些默认文件夹,这是显示该计算机上有哪些用户拥有个人资料的一部分。

我会解释一下,因为我可能无法完全理解我的需求。

如果我使用 DIR 而不使用 findstr

DIR /A:d /B "F:\Documents and Settings"

输出:

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 循环来缩短long 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
)

感谢这个伟大的论坛以及所有可能帮助我和其他人的论坛。

3 个答案:

答案 0 :(得分:2)

分成几行以便更好地阅读,但当然,它可以在一行中

@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开关

答案 1 :(得分:2)

@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
)

如果您只想显示用户名(没有" F:\ Documents and Settings"路径),请使用echo %%~Na

答案 2 :(得分:1)

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

F:\>