Hi,
I've got a situation where I've got a bunch of files, each of which gets processed by different applications resulting in multiple different output files for each input file. For example, if my input files are file-1, file-2 and file-3, after all processing is complete I'll have file-1-urf, file-1-ack, and file-1-spam (and similarly for file-2 and file-3).
What I'm looking to do is to make a script that will compare the modified date of the input files with either the modified or created date of the associated output files, and let me know, for each input file, which of the output files are older (i.e. which ones need to be processed).
I've done some other basic scripting, but nothing related to this -- any pointers or ideas will be much appreciated!
Thanks!
andy
How to compare file dates and make a report for newer files
-
avsfan
- Posts: 554
- Joined: 29 Jun 2006 09:00
- Location: Fort Collins, Colorado
-
admin
- Site Admin
- Posts: 66280
- Joined: 22 May 2004 16:48
- Location: Win8.1, Win10, Win11, all @100%
- Contact:
Re: How to compare file dates and make a report for newer fi
I will add date compare to SC compare(), that will help a little.
FAQ | XY News RSS | XY X
-
highend
- Posts: 14940
- Joined: 06 Feb 2011 00:33
- Location: Win Server 2022 @100%
Re: How to compare file dates and make a report for newer fi
One way to do that:
create a new tab (clones the current)
filter the current list (an exclude filter that hides the three extensions, that are created) | or a filter that selects all source files automatically (by e.g. extension)
a variable, that contains all of your three extensions
iterate (foreach) over this variable, combined with the basename of the appropriate source file)
and in the loop create a list via datediff between the destination and the source file(s).
I'd suggest seconds for datediff and you only have to check if they're != 0 (because >=1 means, dst file is older).
At least that's how I'd solve it.
create a new tab (clones the current)
filter the current list (an exclude filter that hides the three extensions, that are created) | or a filter that selects all source files automatically (by e.g. extension)
a variable, that contains all of your three extensions
iterate (foreach) over this variable, combined with the basename of the appropriate source file)
and in the loop create a list via datediff between the destination and the source file(s).
I'd suggest seconds for datediff and you only have to check if they're != 0 (because >=1 means, dst file is older).
At least that's how I'd solve it.
One of my scripts helped you out? Please donate via Paypal
-
avsfan
- Posts: 554
- Joined: 29 Jun 2006 09:00
- Location: Fort Collins, Colorado
Re: How to compare file dates and make a report for newer fi
Thanks for the initial thoughts. One thing I forgot to mention in the first post that makes it *slightly* more complicated -- the files generated are in a subdirectory below the initial files.
One thing that should make it easier is that the names of the initial files don't change -- it's a fixed set of files, so that list could actually just be a static list without needing to worry about selection, etc.
ugly pseudo-code might look something like this :
Is this more clear?
Thanks!
One thing that should make it easier is that the names of the initial files don't change -- it's a fixed set of files, so that list could actually just be a static list without needing to worry about selection, etc.
ugly pseudo-code might look something like this :
Code: Select all
for each file in (myfile-1.src, myfile-2.src, myfile-3.src, myfile-4.src)
for each suffix in (-urf.dll, -ack.dll, -spam.dll)
if date_modified(file) > date_created(basename(file).suffix) then
add file to needs_update list
else
add file to OK list
end_if
end
end
[report code come next]Thanks!
-
highend
- Posts: 14940
- Joined: 06 Feb 2011 00:33
- Location: Win Server 2022 @100%
Re: How to compare file dates and make a report for newer fi
You have to build the file paths in the second foreach loop anyway so it doesn't make such a difference. You just have to append the subdir name to the <curpath>.the files generated are in a subdirectory below the initial files.
So you can either use just one string with "|" as a separator or (for better readability) the heredoc syntax depending onit's a fixed set of files, so that list could actually just be a static list without needing to worry about selection
how many files you to process.
Doesn't look bad.ugly pseudo-code might look something like this :
One of my scripts helped you out? Please donate via Paypal
-
avsfan
- Posts: 554
- Joined: 29 Jun 2006 09:00
- Location: Fort Collins, Colorado
Re: How to compare file dates and make a report for newer fi
Now my real question is how to convert it into something that will actually work... Help, please!highend wrote:So you can either use just one string with "|" as a separator or (for better readability) the heredoc syntax depending onit's a fixed set of files, so that list could actually just be a static list without needing to worry about selection
how many files you to process.
Doesn't look bad.ugly pseudo-code might look something like this :
Thanks in advance!
andy
-
highend
- Posts: 14940
- Joined: 06 Feb 2011 00:33
- Location: Win Server 2022 @100%
Re: How to compare file dates and make a report for newer fi
Code: Select all
$srcFiles=<<<>>>
D:\Temp\test\abc.src
D:\Temp\test\def.src
D:\Temp\test\geh.src
>>>;
$subFolderName = "processed";
$dstExtensions = "-urf.dll|-ack.dll|-spam.dll";
// Main part
$changedFileList = "";
foreach($file, $srcFiles, "<crlf>") {
$modifiedSourceDate = property("Write", $file);
$processedPath = regexreplace($file, "(.*\\).*", "$1$subFolderName\" . getpathcomponent($file, "base"));
foreach($item, $dstExtensions, "|") {
$processedItem = $processedPath . $item;
if(exists($processedItem) == 1) {
$modifiedDstDate = property("Write", $processedItem);
if(datediff($modifiedSourceDate, $modifiedDstDate, "n") < 0) {
$changedFileList = $changedFileList . $processedItem . "<crlf>";
}
}
}
}
text $changedFileList;Tested it a few times, looks ok so far.
One of my scripts helped you out? Please donate via Paypal
-
avsfan
- Posts: 554
- Joined: 29 Jun 2006 09:00
- Location: Fort Collins, Colorado
Re: How to compare file dates and make a report for newer fi
Excellent! Thanks very much!
XYplorer Beta Club