Reputation: 41
I would like to exclude all profiles starting with _ without having to list each profile in an exclusion text file.
Is it possible to do this ?
@echo off
set Target=D:\backup
for /f "tokens=*" %%I in ('dir /a:d-h /b "%SystemDrive%\Users\*"') do if exist "%Target%\%%~nXI\" (
........
)
pause
exit
Thank you very much in advance for helping !
Upvotes: 1
Views: 137
Reputation: 38623
The following code example provides a methodology for retrieving the profile names you require, (those which are not a special account and whose names do not begin with an underscore), together with their current profile paths.
@For /F "Skip=1Tokens=1,2" %%G In ('%__AppDir__%wbem\WMIC.exe UserAccount Where^
"LocalAccount='True' And Not Name Like '[_]%%'" Get Name^,SID 2^>Nul'
)Do @For /F %%I In ("%%H")Do @For /F "Tokens=2Delims==" %%J In ('
%__AppDir__%wbem\WMIC.exe Path Win32_UserProfile Where^
"SID='%%I' And Special!='True'" Get LocalPath /Value 2^>Nul'
)Do @For /F "Tokens=*" %%K In ("%%J")Do @Echo User name:"%%G",Profile path:"%%K"
@Pause
Whilst the above does not directly help you with your task, it could very simply be adapted, to do so. (It even affords you the opportunity to use %%K
too, should you be copying/moving objects between the profile path and the target directory.):
@Set "Target=D:\backup"
@For /F "Skip=1Tokens=1,2" %%G In ('%__AppDir__%wbem\WMIC.exe UserAccount Where^
"LocalAccount='True' And Not Name Like '[_]%%'" Get Name^,SID 2^>Nul'
)Do @For /F %%I In ("%%H")Do @For /F "Tokens=2Delims==" %%J In ('
%__AppDir__%wbem\WMIC.exe Path Win32_UserProfile Where^
"SID='%%I' And Special!='True'" Get LocalPath /Value 2^>Nul'
)Do @For /F "Tokens=*" %%K In ("%%J")Do @If Exist "%Target%\%%G\" (
Rem …your code here
)
@Pause
@Set "Target=D:\backup"
@For /F Tokens^=4Delims^=^" %%G In ('%__AppDir__%wbem\WMIC.exe UserAccount^
Where "LocalAccount='TRUE' And Not Name Like '[_]%%'" Assoc:List^
/ResultRole:SID 2^>NUL')Do @For /F Tokens^=1* %%H In (
'%__AppDir__%wbem\WMIC.exe UserAccount Where "Name='%%G'" Get SID^
/Value 2^>NUL^|%__AppDir__%find.exe "="')Do @For %%I In (%%H
)Do @For /F "Tokens=1*Delims==" %%J In (
'%__AppDir__%wbem\WMIC.exe Path Win32_UserProfile Where^
"SID='%%I' And Special!='TRUE' And LocalPath Is Not Null" Get LocalPath /Value^
2^>NUL^|%__AppDir__%find.exe "="')Do @For /F "Tokens=*" %%L In ("%%K"
)Do @If Exist "%Target%\%%G\" (
Rem …your code here
)
@Pause
In this example, your user profile path will be assigned to %%~L
, (as opposed to %%K
, in the previous example.).
Upvotes: 2