Batch file 使用RMDIR保留2个特定文件夹

Batch file 使用RMDIR保留2个特定文件夹,batch-file,cmd,rmdir,Batch File,Cmd,Rmdir,作为我工作的一部分,我需要从海上运输的计算机上删除文件,这项任务每周要完成好几次,并且可以编写脚本,但是我对脚本很糟糕,我决不是任何类型的编码员 我的问题是,我需要清除C:\Users文件夹,同时保留公用和默认文件夹。我知道如何删除一个目录和所有子文件夹,但我不知道如何只保留这两个文件夹 到目前为止,我掌握的代码是: @Echo off color F :Choice Echo. Echo. set choice= set /p choice="Type Y to proceed or N t

作为我工作的一部分,我需要从海上运输的计算机上删除文件,这项任务每周要完成好几次,并且可以编写脚本,但是我对脚本很糟糕,我决不是任何类型的编码员

我的问题是,我需要清除
C:\Users
文件夹,同时保留
公用
默认
文件夹。我知道如何删除一个目录和所有子文件夹,但我不知道如何只保留这两个文件夹

到目前为止,我掌握的代码是:

@Echo off
color F

:Choice
Echo.
Echo.
set choice=
set /p choice="Type Y to proceed or N to close the tool and then press ENTER:----"

IF '%Choice%' =='Y' GOTO DELETE
IF '%Choice%' =='y' GOTO DELETE
IF '%Choice%' =='N' GOTO END
IF '%Choice%' =='n' GOTO END

:DELETE
rmdir /S /Q C:\***PATH***\***FOLDERNAME***
rmdir /S /Q C:\***PATH***\***FOLDERNAME***
rmdir /S /Q C:\***PATH***\***FOLDERNAME***
rmdir /S /Q C:\***PATH***\***FOLDERNAME***

Echo.
Echo.
@Echo        All Files Removed
GOTO END

:END
echo.
echo.
Echo             *****...Closing programme... Please wait...*****
Timeout /t 3
exit

您知道这是否可行吗?

以下以管理员身份运行的方法可能适用于您:

@Echo Off
Color 0F
Echo=&Echo=
Choice /N /M "Type Y to proceed or N to close the tool"
If ErrorLevel 2 Exit /B
For /F Tokens^=2^Delims^=^" %%A In ('WMIC Path Win32_UserProfile Where^
 "Special!='True'" Assoc /AssocClass:Win32_UserAccount 2^>Nul'
) Do WMIC UserAccount Where "SID='%%A' And LocalAccount='TRUE'" Delete
Echo=&Echo=&Echo    All Files Removed&Echo=&Echo=
Echo    *****...Closing programme... Please wait...*****
Timeout 3 /NoBreak>Nul
Exit /B

Special!='True“
将忽略特殊帐户,其中包括
管理员
公共
默认

,您可能会发现这些帐户很有用。将文件夹路径弄得如此混乱实际上无助于我们理解问题。很抱歉,它们只是我在编写脚本时填充的一般路径。前提是:----RMDIR/S/Q C:\users***,其中***是用户名,问题是在我开始执行任务之前,我不知道框上的用户名,但是我可以使用RMDIR/S/Q C:\users,因为这将删除默认文件夹和公共文件夹。还感谢Jeff Zeitlin!我认为IF命令可以让脚本继续运行,我将首先设置一个测试结构!再次感谢首先,我认为在
rmdir/S
之前写保护异常文件夹是可行的,但这没有帮助,它们仍然被删除。但是,您可以在(“C:\Users\*”)中为/D%%D执行
。如果/I不“%%~nxD”==“Public”如果/I不“%%~nxD”==“Default”rmdir/S/Q”%%~D”
。尽管如此,我不太确定仅仅删除用户配置文件文件夹是否是个好主意……哇!非常感谢我一直在努力解决IF语句,所以我选择了一个非常笨拙的复制粘贴解决方案,我将尝试一下您的方法,尽管它看起来会比我的更快更好!顺便说一句@OliverJeffries,这应该正确地删除配置文件,而不仅仅是它们的配置文件目录。@Compo-也许您可以解释为什么FOR语句中需要所有插入符号。另外,我如何找出
\\CC049105\root\cimv2:Win32_UserProfile.SID=“S-1-5-21-832980616-969695268-1544898942-81553”
所指的目录?@lit,插入符号是必要的,因为
标记和
Delims
通常包含在双引号内。在这种情况下,因为我使用双引号作为分隔符,这是不可能的,所以必须对等号字符和任何分隔符进行转义,以便不“中断”for
命令的
。由于使用了该分隔符,在上述情况下,返回的项目将是
S-1-5-21-832980616-969695268-1544898942-81553
UserProfile/UserAccount
associator(公共项)是
SID
,与
Where
一起用于检索与该
SID
相关的
LocalPath