删除由C某些文件夹:\用户\%USERNAME%\ AppData的\主机名通过

问题描述:

列表地方我有一个代码片段这个网站帮助了我,我想改变如果可能的话用不同的方式表现?删除由C某些文件夹:用户%USERNAME% AppData的主机名通过

运行在本地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还取决于可变信中进一步待着字母表,但我不知道在哪个方向: -

任何帮助表示赞赏..thanks

这是完全未经测试,但我猜想,您可以利用该/Node选项WMIC

@Echo Off 
For /F "UseBackQ Delims=" %%Z In ("%~dp0hostnames.txt" 
) Do For /F "UseBackQ Skip=1 Delims=" %%X In (`WMIC /Node:'%%~Z' Path^ 
Win32_UserProfile Where "Special='False'" Get LocalPath` 
) Do For /F "Delims=" %%Y In ("%%X") Do Call :Sub "%%~Z" %%Y 
Exit/B 

:Sub 
For /F "Tokens=1* Delims=:\" %%V In ("%~2") Do For %%U In (Folder1 Folder_2 
) Do If Exist "\\%~1\%%~V$\%%~W\AppData\Local\%%~U"^ 
RD/S/Q "\\%~1\%%~V$\%%~W\AppData\Local\%%~U" 
GoTo :EOF 

这里是一个办法做到这一点在PowerShell中。当你有信心,正确的目录将被删除,请从Remove-Item命令-WhatIf开关。

$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