2017-10-12 9 views
0

私はこのサイトを手伝ってくれたコードスニペットを持っています。できるだけ別の方法で動作させたいのですが?ホスト名のリストからC: Users %username% AppData Localの特定のフォルダを削除してください

ローカル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) 
    ) 
) 

私は行くがあったが、それは私の限られた知識を超えてきています、私はdelayedexpansionが必要だと思うし、さらに沿って可変文字の上に移動

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) 
     ) 
    ) 

のようなものに変更したいと思いますアルファベットが、私はどの方向に知らない: -

すべてのヘルプは、これは完全にテストされていないですが、私はあなたが利用することができるものと仮定してい..thanksに

答えて

0

を高く評価しましたWMIC/Nodeオプション:

@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 
0

ここでは、PowerShellでそれを行う方法です。正しいディレクトリが削除されると確信がある場合は、Remove-Itemコマンドから-WhatIfスイッチを削除します。 Invoke-Commandを使用して

$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 
     } 
    } 
} 

あなたは同時にすべてのコンピュータ上でスクリプトを実行できるようになります。これは、前のスクリプトがudscan.ps1として保存されたことを前提としています。

Invoke-Command -ComputerName 'host1', 'host2' -FilePath .\udscan.ps1 
関連する問題