我在使用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
)
感谢这个伟大的论坛以及所有可能帮助我和其他人的论坛。
答案 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:\>