Beefy Boxes and Bandwidth Generously Provided by pair Networks
We don't bite newbies here... much
 
PerlMonks  

comment on

( [id://3333]=superdoc: print w/replies, xml ) Need Help??

The following is a JavaScript program I wrote which sweeps a directory tree and creates an unicode text file which contains all the file names in a directory. Runs under Windows XP/7/8/10. It should be saved with a .JS extension.

Some tasks are easier in perl, while others are easier in JavaScript. And although JavaScript does not require it, you can use $ signs in the variables, which I did, to make it more perlish. Lol

// This JavaScript program reads directory contents // and saves the sorted list in a file in Unicode format. $PATH = "C:\\WINDOWS"; $RECURSIVE = 0; $OUTPUT_FILE = "Z:\\Output.txt"; $SAVE_DIR_SIZE = 0; $SAVE_FULLPATH = 0; // PROGRAM STARTS HERE: $T = (new Date()).getTime(); // Get current time in milliseconds $PATH_LENGTH = $PATH.length + (($PATH.slice(-1) == '\\') ? 0 : 1); try { $FSO = new ActiveXObject('Scripting.FileSystemObject'); } catch( +e) { Quit(1, 'Cannot access File System.'); } if ($PATH.charAt(1) == ':') { $DRIVE = $PATH.substr(0, 2); if (!$FSO.DriveExists($DRIVE)) Quit(2, 'Drive does not exist - ' + $ +PATH); if (!($FSO.GetDrive($DRIVE)).IsReady) Quit(3, 'Drive is not ready - +' + $PATH); } OUTPUT = []; // create an array for file data DIR($PATH); // sweep directory and collect data OUTPUT = OUTPUT.sort(); // sort all files by size (this line can be +removed) OUTPUT.unshift($PATH); // Save PATH starting point OUTPUT.unshift($T); // The first line of the output file will co +ntain the exact time when this program was executed. try // Write file... { // Here we try to open the text file for writing using the CreateTex +tFile() method. // The first "true" argument states that the output file will be ove +rwritten. // The second "true" argument states that the output text file will +be in Unicode format. var $F = $FSO.CreateTextFile($OUTPUT_FILE, true, true); $F.Write(OUTPUT.join("\r\n")); // Write contents of the array into +the file. $F.Close(); } catch (e) { Quit(4, 'Cannot save file - ' + $OUTPUT_FILE); } Quit(0, "SUCCESS!!!!!\n\nDIRECTORY CONTENTS OF\n\n" + $PATH + "\n\nSAV +ED SUCCESSFULLY TO:\n\n" + $OUTPUT_FILE); // This function reads the contents of one directory and saves the // contents in the OUTPUT array. function DIR($path) { var $F = $FSO.GetFolder($path), $FC, $File, $FullName; // First we record all the sub-directories. for ($FC = new Enumerator($F.SubFolders); !$FC.atEnd(); $FC.moveNext +()) { $FullName = $FC.item(); $File = $FSO.GetFolder($FullName); OUTPUT.push('+' + ($SAVE_DIR_SIZE ? '00000000000 ' : '') + DateOf( +$File) + AttributesOf($File) + ($SAVE_FULLPATH ? $FullName : Shorten( +$FullName))); if ($RECURSIVE) DIR($FullName); } // Then we record all the files. for ($FC = new Enumerator($F.files); !$FC.atEnd(); $FC.moveNext()) { $FullName = $FC.item(); $File = $FSO.GetFile($FullName); OUTPUT.push('-' + SizeOf($File) + DateOf($File) + AttributesOf($Fi +le) + ($SAVE_FULLPATH ? $FullName : Shorten($FullName))); } } // This function returns the last modified date of a file or directory +. function DateOf($f) { return ('0000000000' + ($f.DateLastModified * 1) +).slice(-13).substr(0, 10) + ' '; } // This function returns the size of a file. function SizeOf($f) { return ('00000000000' + $f.Size + ' ').slice(-12 +); } // This function returns the file attributes in a nice formatted way. function AttributesOf($f) { var $A = $f.Attributes; return ($A & 1 ? 'R' : '-') // Read-only + ($A & 2 ? 'H' : '-') // Hidden file + ($A & 4 ? 'S' : '-') // System file + ($A & 8 ? 'V' : '-') // Volume label (attribute is read-only) + ($A & 16 ? 'D' : '-') // Directory + ($A & 32 ? 'A' : '-') // Archive + ($A & 1024 ? 'L' : '-') // Link or shortcut file + ($A & 2048 ? 'C' : '-') + ' '; // Compressed file } // Removes the first part of a fullpath. function Shorten($n) { return ($n + '').slice($PATH_LENGTH); } // Terminates the program and maybe displays a message. function Quit($errorcode, $msg) { if (typeof($msg) == 'string') WScrip +t.Echo($msg); WScript.Quit($errorcode); }

Here's a sample output produced by this program:


1593733100343
C:\WINDOWS
+1578861460  ----D--- Cursors
+1578861460  ----D--- Driver Cache
+1578861460  ----D--- Help
+1578861460  ----D--- Media
+1578861460  ----D--- NLDRV
+1578861460  ----D--- Provisioning
+1578861460  ----D--- Resources
+1578861460  ----D--- WinSxS
+1578861460  ----D--- ehome
+1578861460  ----D--- msagent
+1578861460  ----D--- mui
+1578861460  ----D--- pchealth
+1578861460  ----D--- repair
+1578861460  ----D--- security
+1578861460  ----D--- system
+1578861460  ----D--- system32
+1578861460  ----D--- twain_32
+1578861460  -H--D--- inf
+1578861460  R-S-D--- Fonts
+1578861772  -HS-D--- Installer
+1578862010  ----D--- Registration
+1578862048  ----D--- srchasst
+1578862072  R---D--- Web
+1578862902  ----D--- SoftwareDistribution
+1578863966  ----D--- SHELLNEW
+1578868700  ----D--- RegisteredPackages
+1578869970  -H--D--- $NtUninstallKB888111WXPSP2$
+1578888466  -H--D--- $MSI31Uninstall_KB893803v2$
+1578899930  ----D--- Microsoft.NET
+1578899952  R-S-D--- assembly
+1579014252  -HS-D--- Recycled
+1579107350  -H--D--- $NtUninstallWIC$
+1579107390  -H--D--- $NtUninstallKB894476$
+1579107394  -H--D--- $NtUninstallKB909394$
+1579150942  -H--D--- $NtUninstallWdf01009$
+1579150946  -H--D--- $NtUninstallwinusb0200$
+1579151832  -H--D--- $NtUninstallKB942288-v3$
+1591766356  -H--D--- PIF
+1593196520  ----D--- apppatch
+1593196520  ----D--- ime
+1593196520  ----D--- peernet
+1593227820  ----D--- temp
00000000000 1578898458  -----A-- ativpsrm.bin
00000000000 1593196522  -----A-- Sti_Trace.log
00000000036 1578862012  -----A-- vb.ini
00000000037 1578862012  -----A-- vbaddin.ini
00000000038 1271437200  -----A-- avisplitter.ini
00000000042 1580688388  -----A-- boxworld.ini
00000000048 1593666958  -----A-- wiaservc.log
00000000080 1141128000  -----A-- explorer.scf
00000000109 1580687782  -----A-- WCHESS.INI
00000000116 1592963652  -----A-- NeroDigital.ini
00000000140 1578896578  -----A-- gife.ini
00000000159 1593729422  -----A-- wiadebug.log
00000000203 1593625384  -----A-- GIBW.INI
00000000227 1578871656  -----A-- system.ini
00000000335 1580305028  -----A-- nsreg.dat
00000000376 1578864048  -----A-- ODBC.INI
00000000383 1578893046  -----A-- SNAP.INI
00000000706 1578898910  -----A-- SS_SLIDE.INI
00000000749 1578862066  RH---A-- WindowsShell.Manifest
00000000808 1593521706  -----A-- win.ini
00000001272 1141128000  -----A-- Blue Lace 16.bmp
00000001405 1141128000  -----A-- msdfmap.ini
00000002048 1593729420  --S--A-- bootstat.dat
00000003626 1593666956  -----A-- WindowsUpdate.log
00000004079 1593229038  -----A-- IF40LE.INI
00000004161 1578862110  -----A-- ODBCINST.INI
00000009522 1141128000  -----A-- Zapotec.bmp
00000010752 1141128000  -----A-- hh.exe
00000015360 1141128000  -----A-- TASKMAN.EXE
00000016730 1141128000  -----A-- FeatherTexture.bmp
00000017062 1141128000  -----A-- Coffee Bean.bmp
00000017336 1141128000  -----A-- Gone Fishing.bmp
00000017362 1141128000  -----A-- Rhododendron.bmp
00000018944 1141128000  -----A-- vmmreg32.dll
00000025600 1141128000  -----A-- twunk_32.exe
00000026582 1141128000  -----A-- Greenstone.bmp
00000026680 1141128000  -----A-- River Sumida.bmp
00000035363 1312180208  -----A-- atiogl.xml
00000038065 1075075200  -----A-- EPHEM12.HLP
00000048680 1141128000  -HS----- winnt.bmp
00000048680 1141128000  -HS----- winnt256.bmp
00000049680 1141128000  -----A-- twunk_16.exe
00000050688 1141128000  -----A-- twain_32.dll
00000059392 1463460046  -----A-- STARFIELD.SCR
00000062976 1141128000  -----A-- SPGRMR.DLL
00000064512 1463460042  -----A-- CYLFRAC.SCR
00000065832 1141128000  -----A-- Santa Fe Stucco.bmp
00000065954 1141128000  -----A-- Prairie Wind.bmp
00000065978 1141128000  -----A-- Soap Bubbles.bmp
00000069120 1141128000  -----A-- NOTEPAD.EXE
00000069632 1115163808  -----A-- ALCMTR.EXE
00000075264 1463459448  -----A-- 3DTEXT.SCR
00000086016 1153516476  -----A-- SOUNDMAN.EXE
00000094784 1141128000  -----A-- twain.dll
00000128000 1463460046  -----A-- MATRIX.SCR
00000130048 1141128000  -----A-- SOFTKBD.DLL
00000146432 1141128000  -----A-- regedit.exe
00000149504 1463460046  -----A-- SSSTARS.SCR
00000220160 1141128000  -----A-- MSCANDUI.DLL
00000223744 1463460044  -----A-- BUTTERFLIES.SCR
00000250880 1141128000  -----A-- SPTIP.DLL
00000256192 1141128000  -----A-- winhelp.exe
00000260640 1075075200  -----A-- EPHEM12.SCR
00000282624 1118694920  -----A-- SLIDESHOW.SCR
00000283648 1141128000  -----A-- winhlp32.exe
00000316640 1578868716  -----A-- WMSysPr9.prx
00000626397 1593382024  -----A-- setupapi.log
00000720896 1579922638  -----A-- iun6002.exe
00001032192 1141128000  -----A-- explorer.exe
00001183744 1159470048  -----A-- RtlUpd.exe
00002157568 1160606578  -----A-- MicCal.exe
00002808832 1146777996  -----A-- ALCWZRD.EXE
00002879488 1147820666  -----A-- SkyTel.exe
00009709568 1146778514  -----A-- RTLCPL.EXE
00016269312 1162259394  -----A-- RTHDCPL.EXE
 

In reply to Re: Function to sweep a file tree by harangzsolt33
in thread Function to sweep a file tree by bojinlund

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post; it's "PerlMonks-approved HTML":



  • Are you posting in the right place? Check out Where do I post X? to know for sure.
  • Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
    <code> <a> <b> <big> <blockquote> <br /> <dd> <dl> <dt> <em> <font> <h1> <h2> <h3> <h4> <h5> <h6> <hr /> <i> <li> <nbsp> <ol> <p> <small> <strike> <strong> <sub> <sup> <table> <td> <th> <tr> <tt> <u> <ul>
  • Snippets of code should be wrapped in <code> tags not <pre> tags. In fact, <pre> tags should generally be avoided. If they must be used, extreme care should be taken to ensure that their contents do not have long lines (<70 chars), in order to prevent horizontal scrolling (and possible janitor intervention).
  • Want more info? How to link or How to display code and escape characters are good places to start.
Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others studying the Monastery: (5)
As of 2024-04-24 00:34 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found