Overview
This script provides columns which show the name and date of the newest file below each folder.
The script adds six columns. You'll only use one or two at a time.
Three of the columns report on files directly below each folder, ignoring sub-folders:
- Newest File: Date and name.
- Newest Date: Date only.
- Newest Name: Name only.
The other columns report on files anywhere below each folder, including sub-folders:
- Newest File (Recursive): Date and name.
- Newest Date (Recursive): Date only.
- Newest Name (Recursive): Name only.
The combined date and name columns let you turn on just one column to see both things, but the information is harder to read because the dates, times and filenames do not line up nicely. This isn't the case with the separate date and name columns. It's up to you which you use.
Sorting and grouping:
- The combined columns sort by date/time and do not currently support grouping.
- The date columns sort by date/time, and groups like the internal date columns do.
- The name columns sort by name (alphabetically), and do not currently support grouping.
These columns read the list of files below each folder every time the file display is refreshed. For the recursive ones, that includes listing all sub-folders, and if you turn them on at the root of a drive the script will have to list every file on the drive. With large, complex directory trees, it can take a few seconds (and lots of disk/network activity) for the information to appear. You probably don't want to turn these columns on all the time, or in folders like C:. Use them when you need them and turn them off afterwards.
Installation
- Download Newest File Column.js.txt (3.5 KB) v1.1
- Open Preferences / Toolbars / Scripts to display the list of scripts.
- Drag the downloaded Newest File Column.js.txt to the list.
History
- v1.1 (15/Apr/2017)
- "Subscript out of range" errors should be fixed now. They were due to this.
- v1.0 (2014)
- Initial version.
Usage
If the script is installed, you will see its columns under the Scripts category in the Folder Options dialog, or the menu you get from right-clicking your existing columns.
Add the columns manually as you would any others.
Alternatively, you might want to use a command, like this, which toggles a pair of the columns at once:
@ifset:COLUMNSTOGGLE="scp:Newest File Column/NewestFileDate"
Set COLUMNSREMOVE="scp:Newest File Column/NewestFileDate"
Set COLUMNSREMOVE="scp:Newest File Column/NewestFileName"
@ifset:else
Set COLUMNSADD="scp:Newest File Column/NewestFileDate"
Set COLUMNSADD="scp:Newest File Column/NewestFileName"
The command editor's menus will work out the column names for you, so don't worry about doing that by hand.
The Script Itself
Expand the section below if you want to look at the script to see how it works.
The script
If you just want to use the script, the Newest_File_Column.js.txt download above is probably easier.
The script code is reproduced here so that people looking for scripting techniques on the forum can browse the script code without having to download and open the .js.txt file.
This script is in JScript.
// Newest File Column
// (C) 2014-2017 Leo Davidson
//
// This is a script for Directory Opus.
// See http://www.gpsoft.com.au/DScripts/redirect.asp?page=scripts for development information.
function OnInit(initData)
{
initData.name = "Newest File Column";
initData.desc = "Columns to show the newest file below each folder";
initData.copyright = "(C) 2014-2017 Leo Davidson";
initData.url = "https://resource.dopus.com/t/custom-column-newest-file/18765";
initData.version = "1.1";
initData.default_enable = true;
initData.min_version = "11.5.2"
var col = initData.AddColumn();
col.name = "NewestFile";
col.method = "OnNewestFile";
col.label = "Newest File";
// col.header = "Newest File";
col.justify = "left";
col.autogroup = true;
col.multicol = true;
var col = initData.AddColumn();
col.name = "NewestFileRec";
col.method = "OnNewestFileRec";
col.label = "Newest File (Recursive)";
col.header = "Newest File (Rec)";
col.justify = "left";
col.autogroup = true;
col.multicol = true;
var col = initData.AddColumn();
col.name = "NewestFileDate";
col.method = "OnNewestFile";
col.label = "Newest File Date";
col.header = "Newest Date";
col.justify = "right";
col.autogroup = true;
col.type = "datetime";
col.multicol = true;
var col = initData.AddColumn();
col.name = "NewestFileDateRec";
col.method = "OnNewestFileRec";
col.label = "Newest File Date (Recursive)";
col.header = "Newest Date (Rec)"
col.justify = "right";
col.autogroup = true;
col.type = "datetime";
col.multicol = true;
var col = initData.AddColumn();
col.name = "NewestFileName";
col.method = "OnNewestFile";
col.label = "Newest File Name";
col.header = "Newest Name"
col.justify = "left";
col.autogroup = true;
col.multicol = true;
var col = initData.AddColumn();
col.name = "NewestFileNameRec";
col.method = "OnNewestFileRec";
col.label = "Newest File Name (Recursive)";
col.header = "Newest Name (Rec)"
col.justify = "left";
col.autogroup = true;
col.multicol = true;
}
function OnNewestFile(scriptColData)
{
NewestFileMain(scriptColData, false);
}
function OnNewestFileRec(scriptColData)
{
NewestFileMain(scriptColData, true);
}
function BestItemName(item)
{
if (item.display_name != "")
return item.display_name;
return item.name;
}
function NewestFileMain(scriptColData, IsRecursive)
{
if (scriptColData.item.is_dir)
{
FolderEnum = DOpus.FSUtil.ReadDir(scriptColData.item, IsRecursive);
NewestItem = null;
while (!FolderEnum.complete)
{
FolderItem = FolderEnum.next;
if (!FolderItem.is_dir)
{
if (NewestItem == null || NewestItem.modify.Compare(FolderItem.modify) < 0)
{
NewestItem = FolderItem;
}
}
}
if (NewestItem != null)
{
var isRec = (IsRecursive ? "Rec" : "");
if (scriptColData.columns.exists("NewestFileName" + isRec))
{
scriptColData.columns("NewestFileName" + isRec).value = BestItemName(NewestItem) + "";
}
if (scriptColData.columns.exists("NewestFileDate" + isRec))
{
scriptColData.columns("NewestFileDate" + isRec).value = NewestItem.modify;
}
if (scriptColData.columns.exists("NewestFile" + isRec))
{
DateVar = new Date(NewestItem.modify);
scriptColData.columns("NewestFile" + isRec).value = NewestItem.modify.Format() + " " + BestItemName(NewestItem);
scriptColData.columns("NewestFile" + isRec).sort = DateVar.toJSON() + " " + BestItemName(NewestItem);
}
}
}
}
Alternative:
A similar but slightly different script can be found here: