3

PowerShellスクリプトの1つのファイルを除いて、フォルダーからすべてのファイルを削除する最もコンパクトな方法は何ですか。1つが保持されている限り、どのファイルが保持されているかはまったく関係ありません。

PowerShell2CTPを使用しています。

更新:
これまでのすべての答えの融合...

$fp = "\\SomeServer\SomeShare\SomeFolder"
gci $fp |where {$_.mode -notmatch "d"} |sort creationtime -desc |select -last ((@(gci $fp)).Length - 1) |del 

誰かがこれを使用することに問題がありますか?-notmatchの部分はどうですか?

4

5 に答える 5

9

PS V2 では、Select に -SKIP を追加して、次のことができるようにしました。

ディレクトリ | where {$_.mode -notmatch "d"} |select -skip 1 |del

于 2009-02-21T16:00:44.437 に答える
4

組み込み関数がないと、関数が決定的な長さを処理する必要があるため、少し複雑になります。ただし、この方法では、ディレクトリを2回確認する必要があります。

gci $dirName | select -last ((@(gci $dirName)).Length-1) | del

このようなタスクをはるかに簡単にするPowerShell拡張機能をいくつか作成しました。1つの例は、パイプラインで任意の数の要素をスキップできるようにするSkip-Countです。したがって、コードをすばやく検索して、ディレクトリを1回だけ確認できます。

gci $dirName | skip-count 1 | del

スキップカウントのソース:http://blogs.msdn.com/jaredpar/archive/2009/01/13/linq-like-functions-for-powershell-skip-count.aspx

編集

フォルダを強制終了するには、「del」の代わりに「rm-re-fo」を使用します

EDIT2

すべてのフォルダ(空かどうか)を回避するために、コードをそのまま変更できます

gci $dirName | ?{ -not $_.PSIsContainer } | skip-count 1 | del

PSISContainerメンバーは、フォルダーにのみ当てはまります。

于 2009-02-20T17:14:55.140 に答える
1

どうですか:

dir $dirName | select -first ((dir $dirName).Length -1) | del

最後のものを除くすべてを削除します。

編集:より柔軟なバージョンに加えて、dirコマンドを2回入力する必要はありません:

$include=$False; dir $dirNam | where {$include; $include=$True;} | del

これは逆になり、最初のものを除くすべてが削除されることに注意してください。また、ディレクトリに作用しないなどの句を追加することもできます。

$include=$False; dir $dirNam | where {$include -and $_.GetType() -ne [System.IO.DirectoryInfo]; $include=$True;} | del

Modeプロパティを使用したディレクトリの除外に関して2を編集します。フレームワークがモード文字列の生成方法を変更しない限り、これは機能するはずです(私はそれがそうなるとは想像できません)。正規表現を次のように厳しくするかもしれませんが:

$_.Mode -notmatch "^d.{4}"

入力を避けようとしている場合は、プロファイルに関数を追加するのが最善の策です。

function isNotDir($file) { return $file.GetType() -ne [System.IO.DirectoryInfo];}
dir $dirName | where {isNotDir($_)}
于 2009-02-20T17:04:09.627 に答える
1

お気に入り:

move file to preserve elsewhere
delete all files
move preserved file back
于 2009-02-21T16:52:57.493 に答える
0

デル-除外(dir | sort Creationtime -desc)[0] -whatif

これにより、最後に作成されたファイルを除くすべてのファイルが削除されます。

于 2009-02-20T16:55:15.530 に答える