windows - PowerShellを使用して、空のフォルダーのリストをあるボリュームから別のボリュームに移動する

windows powershell powershell-2.0

最新のService Packが適用されたWindows SBS 2008マシンでPowerShell 2.0を使用しています。ディレクトリ内のすべての空のフォルダーを見つける2行のスクリプトがあります。

$a = Get-ChildItem E:\File_Server -recurse | Where-Object {$_.PSIsContainer -eq $True}
$a | Where-Object {$_.GetFiles().Count -eq 0} | [what now?!]


2行目は空のすべてのフォルダーを検出しますが、最後のパイプで困惑しています。これが私がこれまでに試したものです(上記の2行目の2番目のパイプの後に以下が試行されたことに注意してください)。

$_.move(F:\path)はい、試しました。はい、私はPowerShell初心者です。もちろん、「式はパイプラインの最初の要素としてのみ許可されています」というエラーを受け取りました。

move-item -destination F:\Pathこれまでで最も大きなエラーを受け取ります:「Move-Item:移動元と移動先のパスには同じルートが必要です。移動はボリューム間で機能しません。」マジ?あれはどんな制限なの?!次へ...

copy-item -destination F:\empty_foldersどうやら、copy-itemを使用してmove-itemの制限を回避してから、remove-itemを使用できるようです。しかし、そのような運はありません。最初にcopy-itemでスクリプトを開始しました。 PowerShellはエラーをスローしませんでしたが、それ以外には何もしませんでした。それはちょうど1時間のほとんどの間そこに座っていました。ディレクトリは移動されませんでした。

概要:
持っている空のフォルダーのリストを取得し、PowerShellを使用して、それらの空のディレクトリを(ボリューム間で)別の場所に移動して、移動後に元のフォルダーを削除するにはどうすればよいですか? RoboCopyをミックスに追加することはすでに考えましたが、PowerShell内に保持したいので、「PowerShellの使用」に関する警告に注意してください。
答え
私もこれにかなり不満を感じていましたが、あなたが言ったようにcopy-itemに続いてremove-itemが機能します:

gci e:\file_server | ?{$_.PSIsContainer -eq $true} | ?{$_.GetFiles().count -eq 0} | 
%{copy-item -LiteralPath $_.fullname -Destination f:\path; remove-item $_.fullname}


これはMove-ItemとPowershellの制限だけではなく、.Net System.IO.Directory.Moveにも適用可能であり、公平にするために、ドキュメントには次のように記載されています。


Move-Itemは、によってサポートされているドライブ間でファイルを移動します
同じプロバイダーですが、同じディレクトリ内でのみディレクトリを移動します
ドライブ。


http://technet.microsoft.com/en-us/library/dd315310.aspx

PS:"Expressions are only allowed as the first element of a pipeline."エラーが発生しました。これは、試行している$_.move(F:\path)がforeachオブジェクト内にある必要があるためです-%{$_.move(F:\path)}
関連記事

windows - Windowsでユーザーを作成せずにパスワードが有効かどうかを確認することはできますか?

windows - 複数のクライアントデータベースをホストするためのVPS上のMicrosoft SQL Server-これは正しい方法ですか?

windows - バッチファイルによる特定のファイルサイズチェック

ruby - Windowsでのrmagickの問題

c++ - メッセージループが別のスレッドにあるときにウィンドウが閉じるまで待機する

windows - アプリケーションのインストーラーを選択するときに、どの機能を考慮する必要がありますか? [閉まっている]

c - Cでfopenを使用してWindowsで長いファイル名を開く

c# - 返信を待たずに複数のPingを送信する

c++ - C++プログラムからデータをストリーミングしますか?

python - LinuxでのNTFS共有からのPythonモジュールのインポート