删除除用户默认文件夹之外的所有新文件和文件夹

删除除用户默认文件夹之外的所有新文件和文件夹

摘要:我需要删除创建/复制/移动到用户根配置文件中的所有文件和文件夹。如果有人创建了一个文件,它应该被自动删除。

我需要的是:
用户不要在 C:\Users\user 中创建文件夹或文件

我尝试过:
Del 脚本清除了所有内容。但我只想删除除默认用户文件夹之外的所有内容。我尝试了以下脚本,它删除了大多数文件夹。

@ECHO OFF    
SETLOCAL    
SET "sourcedir=C:\Users\user"    
SET "keepdir=3D Objects"    
SET "keepdir=Contacts"    
SET "keepdir=Desktop"    
SET "keepdir=Documents"    
SET "keepdir=Downloads"    
SET "keepdir=Favorites"    
SET "keepdir=Links"    
SET "keepdir=Music"    
SET "keepdir=Pictures"   
SET "keepdir=Roaming"    
SET "keepdir=Saved Games"    
SET "keepdir=Searches"    
SET "keepdir=Videos"    
FOR /d %%a IN ("%sourcedir%\*") DO IF /i NOT "%%~nxa"=="%keepdir%" RD /S /Q "%%a"    
FOR %%a IN ("%sourcedir%\*") DO IF /i NOT "%%~nxa"=="%keepfile%" DEL "%%a"    
GOTO :EOF

用户文件夹

答案1

在 powershell 中尝试这个:

Get-ChildItem "C:\Users\User" | Where-Object {$_.Basename -notin @("3D objects","Contacts","Desktop","Downloads","Favorites","Links","Music","Pictures","Roaming","Saved Games","Searches","Videos")} | Remove-Item -Force 

答案2

您需要将每个文件夹%UserProfile%与默认文件夹进行比较,%SystemDrive%\Users\Default\如果没有匹配则执行删除操作。

中默认文件夹的路径%SystemDrive%\Users\Default\,您可以通过以下方式获取reg query

reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList"

因此,我建议使用双for列表,for对其中的每个文件夹建立一个循环%UserProfile%,并另外建立一个for循环来列出默认用户文件夹的路径。

您需要做的就是将第一个循环中当前列出的文件夹与第二个循环for中输出的默认列表进行比较,如果运算符返回非...则删除。forfind folder in 1st Loop||0

删除文件夹:

观察:1这是为了including那些hidden和/或system属性:

@echo off && setlocal EnableDelayedExpansion

set "_keep_dir=3D\ Objects  Contacts  Searches"
set "_reg_key=HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList"

pushd "%UserProfile%" && for /f tokens^=* %%d in (
'^<con: dir /b /a:-a "%UserProfile%" ^|%__APPDIR__%findstr.exe /vi "%%~x !_keep_dir!"
')do for /f tokens^=3 %%i in ('%__APPDIR__%reg.exe query "!_reg_key!"^|find/i "Default"
')do <con: 2>nul dir /b /a:d /t "%%~i" | find /i "%%~d" >nul || echo\ rmDir /s /q "%%~d"

popd & endlocal & goto :eof

观察:2您可以将额外的文件夹放在变量中以防止删除_kepp_dir,并且为了在文件夹名称中转义空格(如3D Builder)只需添加\,例如:“ Folder With Space in Name

set "_keep_dir=3D\ Objects  Contacts  Searches Folder\ With\ Space\ in\ Name"

观察:3 用于删除文件夹排除那些hidden和/或system属性:

@echo off 

set "_keep=3D\ Objects Contacts Desktop Documents Downloads Favorites Links Music Pictures Roaming Saved\ Games Searches Videos"
cd /d "%UserProfile%" & for /d %%d in (*)do echo;%_keep% | %__APPDIR__%findstr.exe /vi "%%~d" >nul && rmDir /q /s "%%~d\."

对于做同样的事情including那些hidden和/或system属性:

$RKey = Get-ItemPropertyValue 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList' 'Default'
$keep = (Get-ChildItem -Path $RKey -Force -Directory ).Name + 'Searches' + 'Contacts' + '3D Objects' + 'Add More Folder'

Get-ChildItem -Path "$env:USERPROFILE" -Directory -Force | Where-Object {$_.Name -notin @($keep)}  | Remove-Item -Force -Whatif
  • 通过使用别名:
$RKey = gpv 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList' 'Default'
$keep = (gci -Path $RKey -Force -di ).Name + 'Searches' + 'Contacts' + '3D Objects' + 'Add More Folder'

gci -Path "$env:USERPROFILE" -di -Force | ? {$_.Name -notin @($keep)} | rd -Force -Whatif
  • 您可以测试,如果结果对您来说似乎不错,只需删除-whatif等待执行……
Remove-Item -Force -Whatif
rd -Force -Whatif



相关内容