我有一个代码片段,这个网站帮助了我,如果可能的话,我想改变以不同的方式行事?
直接在本地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并且还在字母表中进一步移动可变字母,但我不知道在哪个方向: -
任何帮助表示赞赏..谢谢
答案 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