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
。