cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
Check out the JMP® Marketplace featured Capability Explorer add-in
Choose Language Hide Translation Bar
lala
Level VIII

How can get the volume of a specified folder directly using JSL?

For example, this folder:

C:\Windows

 

Thanks!

7 REPLIES 7
txnelson
Super User

Re: How can get the volume of a specified folder directly using JSL?

I don't believe it can be derived directly.  Here is what I cam up with

Names Default To Here( 1 );
theList = Files In Directory( "C:\Windows" );
totSize = 0;
For Each( {theFile}, theList,
	totSize = Sum( totSize, File Size( "C:\Windows\" || theFile ) )
);
Show( totSize );

But it doesn't appear to be accurate

Jim
lala
Level VIII

Re: How can get the volume of a specified folder directly using JSL?

Thank Jim!

lala
Level VIII

Re: How can get the volume of a specified folder directly using JSL?

  • Yes, this result is obviously incorrect.

jthi
Super User

Re: How can get the volume of a specified folder directly using JSL?

It might be better to perform this type of check using Run Program and some command with it.

 

With Files In Directory you will have to add recursive(1) (or perform a loop yourself, to get files inside folders).

Names Default To Here(1);
lookup_dir = "C:\Windows\";
file_list = Files In Directory(lookup_dir, recursive(1));
file_sizes = Transform Each({cur_file}, file_list,
	File Size(lookup_dir || cur_file)
);
sum(file_sizes);

https://www.jmp.com/support/help/en/17.0/#page/jmp/file-functions.shtml?os=win&source=application#ww...

 

You can also use Multiple File Import for this Directory Tree: Explore Space Used by Folders 

 

-Jarmo

Re: How can get the volume of a specified folder directly using JSL?

As @jthi suggested, here's a way to do it using Run Program / Powershell (from JMP, of course).

/*JMP STATISTICAL DISCOVERY LLC (“JMP”) PERMITS THE USE OF THIS COMPUTER SOFTWARE CODE (“CODE”) ON AN AS-IS BASIS AND AUTHORIZES YOU TO USE THE CODE SUBJECT TO THE TERMS LISTED HEREIN.  BY USING THE CODE, YOU AGREE TO THESE TERMS.  YOUR USE OF THE CODE IS AT YOUR OWN RISK.  JMP MAKES NO REPRESENTATION OR WARRANTY, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRIGEMENT, AND TITLE, WITH RESPECT TO THE CODE.
You may use the Code solely as part of a software product you currently have licensed from JMP, JMP’s parent company SAS Institute Inc. (“SAS”), or one of JMP’s or SAS’s subsidiaries or authorized agents (the “Software”), and not for any other purpose.  The Code is designed to add functionality to the Software but has not necessarily been tested.  Accordingly, JMP makes no representation or warranty that the Code will operate error-free.  JMP is under no obligation to maintain, support, or continue to distribute the Code.
Neither JMP nor its licensors shall be liable to you or any third-party for any general, special, direct, indirect, consequential, incidental, or other damages whatsoever arising out of or related to your use or inability to use the Code, even if JMP has been advised of the possibility of such damages.  Except as otherwise provided above, the Code is governed by the same agreement that governs the Software.  If you do not have an existing agreement with JMP or SAS governing the Software, you may not use the Code.
JMP and all other JMP Statistical Discovery LLC product or service names are registered trademarks or trademarks of JMP Statistical Discovery LLC in the USA and other countries.  ® indicates USA registration.  Other brand and product names are registered trademarks or trademarks of their respective companies.
*/

Names Default To Here( 1 );
op = {};
rp = Run Program(
	Executable( "powershell.exe" ),
	Options( "ls c:\temp\ -r | measure -sum Length" ), //Replace c:\temp\ with your folder
	ReadFunction( Function( {this}, Insert Into( op, this << read ) ) )
);

for each ({i}, op,
	if (word(1, i) == "Sum", totalsize = num(regex (i, "([0-9]+)")))
);

show (totalsize);
lala
Level VIII

Re: How can get the volume of a specified folder directly using JSL?

Now GPT-4o is very powerful, it can do ordinary programming:

In the win10 system, the volume size of each directory of the C disk (including hidden files), the specific requirements are:
Starting from the root directories of drive C,
1, if the subdirectory of this directory is more than 3 layers, it can be expanded to the third layer directory, statistics of the respective volume of each directory contained in the third layer directory
2, if the subdirectory of this directory does not exceed 3 layers, the statistics of the expansion of this directory to the last layer of the directory of the respective volume

t1=tick seconds();run program(executable("cmd.exe"),options({"/c powershell -Command \!"& {$results = @(); Get-ChildItem C:\ -Directory -Force | ForEach-Object { $topDir = $_; $subDirs = Get-ChildItem $topDir.FullName -Recurse -Directory -Force -ErrorAction SilentlyContinue | Where-Object { ($_.FullName.Split('\').Length - 1) -le 3 }; if ($subDirs) { $subDirs | ForEach-Object { $size = (Get-ChildItem $_.FullName -Recurse -File -Force -ErrorAction SilentlyContinue | Measure-Object -Property Length -Sum).Sum; $results += [PSCustomObject]@{ Path = $_.FullName; 'Size (MB)' = [math]::Round($size / 1MB, 2) } } } else { $size = (Get-ChildItem $topDir.FullName -Recurse -File -Force -ErrorAction SilentlyContinue | Measure-Object -Property Length -Sum).Sum; $results += [PSCustomObject]@{ Path = $topDir.FullName; ')' = [math]::Round($size / 1MB, 2) } } }; $results | Export-Csv -Path 'D:\目录大小.csv' -NoTypeInformation -Encoding UTF8}\!""}));
t2=tick seconds();t=t2-t1;
lala
Level VIII

Re: How can get the volume of a specified folder directly using JSL?

2024-07-09_11-29-16.png