跳过匹配值的批处理脚本循环



我有一个现有的脚本,它循环遍历文件夹列表,并从找到的每个文件夹中删除一个文件。我希望脚本根据名称跳过列表中的特定文件夹。

下面是现有的脚本:

for /d %%F in (c:users*) do del "%%FAppDataRoamingMicrosoftWindowsRecentAutomaticDestinationsf01b4d95cf55d32a.automaticDestinations-ms" /s /q

在本例中,我希望它跳过"admin"文件夹发现"c:users"

下面的代码是为Windows 10设计的,因为你的任务是重置文件资源管理器中的快速访问固定文件夹。

代码已经忽略了"特殊"PC帐户,包括但不限于Administrator,DefaultAccount,GuestWDAGUtilityAccountdefault

如果您希望从此任务中排除其他命名帐户,您可以使用以下语法将它们插入'"之间的第7行:And Name='firstName' Or Name='anotherName' Or Name='additionalName'

例如:

"LocalAccount='TRUE' And Name='admin' Or Name='john' Or Name='jane'"

为了测试的目的,不应该修改、添加或删除任何其他内容。

@Echo Off
SetLocal EnableExtensions
Set "SubPath=AppDataRoamingMicrosoftWindowsRecentAutomaticDestinations"
Set "FileName=f01b4d95cf55d32a.automaticDestinations-ms"
For /F Tokens^=6^ Delims^=^" %%G In ('
%SystemRoot%System32wbemWMIC.exe UserAccount Where
"LocalAccount='TRUE'"
Get SID /Format:MOF 2^>NUL') Do For /F Tokens^=6^ Delims^=^" %%H In ('
%SystemRoot%System32wbemWMIC.exe Path Win32_UserProfile Where
"SID='%%G' And Special!='TRUE' And LocalPath Is Not Null" Get LocalPath
/Format:MOF 2^>NUL') Do Del /A /F "%%H%SubPath%%FileName%" 2>NUL

代码可能看起来很复杂,但它的好处是它忽略了"特殊"帐户,并且它没有将其本地配置文件路径限制为C:Users。并非每个用户都必须将其配置文件目录放在默认位置,因此这里确定了该位置,而不做这样的假设。

我还修改了您的Del命令选项,因为您想要删除的文件在树中不位于一次或多次,否定/S,并且由于您不使用全局通配符,您也不需要/Q选项。我已经包括/A/F选项,以防文件有问题的属性,只是为了提高成功删除的机会。

请注意,如果您的任务涉及从另一个用户的配置文件树中删除文件,那么任务的调用者必须具有所需的权限才能执行此操作。

最新更新