通过主机名列表从C:\ Users \%username%\ AppData \ Local中删除某些文件夹

时间:2017-10-12 17:12:11

标签: windows batch-file cmd wmic

我有一个代码片段,这个网站帮助了我,如果可能的话,我想改变以不同的方式行事?

直接在本地PC上运行文件将扫描用户配置文件文件夹,省略系统配置文件(以避免不必要的扫描)并从每个用户应用程序数据本地文件夹中删除2个指定的文件夹。

我现在需要做的是通过网络运行它,我有一个主机名列表,并按此方式执行。以下工作正在PC上直接运行。

For /F "Skip=1 Delims=" %%A In (
    '"WMIc Path Win32_UserProfile Where (Special!='True') Get LocalPath"'
    ) Do For /F "Delims= " %%B In ("%%A") Do (
For %%I In (Folder1 Folder_2) Do (If Exist "%%B\AppData\Local\%%I\" (
    RMDIR "%%B\AppData\Local\%%I" /S /Q >nul 2>&1)
    )
)

我想将其更改为

for /f "usebackq tokens=*" %%A in ("%~dp0hostnames.txt") do (
    For /F "Skip=1 Delims=" %%A In (
        '"WMIc Path Win32_UserProfile Where (Special!='True') Get LocalPath"'
        ) Do For /F "Delims= " %%B In ("%%A") Do (
    For %%I In (Folder1 Folder_2) Do (If Exist "\\%%B\C$\AppData\Local\%%I\" (
        RMDIR "\\%%B\C$\AppData\Local\%%I" /S /Q >nul 2>&1)
        )
    )

我已经离开了,但它超越了我有限的知识,我认为我需要delayedexpansion并且还在字母表中进一步移动可变字母,但我不知道在哪个方向: -

任何帮助表示赞赏..谢谢

2 个答案:

答案 0 :(得分:0)

这是完全未经测试的,但我假设您可以使用/Node的{​​{1}}选项:

WMIC

答案 1 :(得分:0)

以下是在PowerShell中执行此操作的方法。如果您确信将删除正确的目录,请从-WhatIf命令中删除Remove-Item开关。

$dirlist = 'dir1', 'dir2'
$userdirs = (Get-CimInstance -ClassName Win32_UserProfile -Filter "Special=$false").LocalPath

foreach ($ud in $userdirs) {
    foreach ($d in $dirlist) {
        if (Test-Path -Path "$ud\$d") {
            Remove-Item -Path "$ud\$d" -Recurse -WhatIf
        }
    }
}

使用Invoke-Command将允许您同时在所有计算机上运行脚本。这假设前一个脚本保存为udscan.ps1

Invoke-Command -ComputerName 'host1', 'host2' -FilePath .\udscan.ps1