摘要:我需要删除创建/复制/移动到用户根配置文件中的所有文件和文件夹。如果有人创建了一个文件,它应该被自动删除。
我需要的是:
用户不要在 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
中输出的默认列表进行比较,如果运算符返回非...则删除。for
find 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
进一步阅读:
[√]放
[√]为了
[√]对于/F
[√]For 循环
[√]Where-Object | ? (参考:
PowerShell
)[√]获取ItemPropertyValue | gpv(参考
PowerShell
:)
对于您的评论:有没有办法可以在无需用户干预的情况下在后台静默运行?