だから私は私が仕事のために行った巨大なリストを持っています、そして私はそれらを1つのフォルダにまとめることができて、古いRevsのすべてを削除してそこに最も高いRevを残すバッチを実行することができるようにしたいです。私はこれがいくつかの深刻な深いプログラミングなしに可能なことさえないので、私はここで尋ねると思いました。
ファイル名の例:
最後に、私はそれがあなたのように見えたいです。
それ以来、そうです。これは可能です、名前が異なるこれらのファイルが何百ものあり続けることを留めますか?一貫した唯一のものは、REV-1、REV-2、REV-3などです。ここでは、図面に基づいて上記のように変化します。私は本当にこれをできるだけ見ていませんが、私はとにかく尋ねても構わないと思っています。
私たちはスクリプトライティングサービスではありませんが、私はある時間と興味を持っていました。
#Set directory to search (. = current directory).
$dir = "."
#Get a list of all the files (only), sorted with newest on top.
$dirFiles = Get-ChildItem -Path $dir | where { ! $_.PSIsContainer } | Sort-Object LastAccessTime -Descending
#Create an array to hold unique file name parts.
$uniqueFileNameParts = @()
#Create an array to hold final file list of files to keep.
$filesToKeep = @()
#Add the file name of the script itself to the files to keep, to prevent it from being deleted if it's in the same folder you're trying to clean.
$filesToKeep += $MyInvocation.MyCommand.Name
#Loop through all the files in the directory list.
foreach ($file in $dirFiles) {
#If it contains "-Rev-" pull the first part of the file name (up to and including "-Rev-").
$filenameTokenLocation = $file.name.IndexOf("-Rev-")
if ($filenameTokenLocation -ge 0) {
$endOfString = $filenameTokenLocation + 5
$subString = $file.name.Substring(0,$endOfString)
#If the file name part doesn't already exist in the array, add it to it.
if ($uniqueFileNameParts -notcontains $subString) {
$uniqueFileNameParts += $subString
}
}
}
#Loop through all the file name parts.
foreach ($fileName in $uniqueFileNameParts) {
#Create a list of all files starting with that file name part, select the one file with the newest "LastWriteTime" attribute, and assign it to $latest.
$latest = Get-ChildItem -Path $dir | where { ! $_.PSIsContainer } | where { $_.name.StartsWith($fileName) } | Sort-Object LastAccessTime -Descending | Select-Object -First 1
#Add that file to the list of files to keep.
$filesToKeep += $latest.name
}
#Get all files in the folder that are not in the list of files to keep, and remove them.
Get-ChildItem -exclude ($filesToKeep) | where { ! $_.PSIsContainer } | Remove-Item
ノート:
XYZ.txt
という名前のファイルは必ずしもxYz.TxT
という名前のものと同じではありません。それが助けてくれることを願っています!