删除由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