Page 5 of 6

Re: JREN.BAT v2.8 - Rename files/folders using regular expressions

Posted: 15 May 2020 09:47
by dostipsQuestion
dbenham wrote:
14 May 2020 09:04
Question 1

I'm not exactly sure what you are trying to do.

If you want only the size of a single folder,
like "D:\portable", then specify the root path with /P and
specify the specific folder with /FM

Code: Select all

call jren "^" "size()+'  '" /d /j /list /p "d:\" /fm "portable"
Dave Benham
.
Hello Dave Benham,
Thank You for the code below:

Code: Select all

call jren "^" "size()+'  '" /d /j /list /p "d:\" /fm "portable"
Desired output is achieved:
3596879 portable
Thank You


Question:
How to use above code with variables?

Code: Select all

call jren "^" "size()+'  '" /d /j /list /p "%~d0" /fm "%~p0" > "FolderList1.txt"
%~d0 = d:
%~p0 = \portable\

The problem is the \

Said differently:
"portable" = Directory name with no \ \ = works in above code.
"\portable\" = %~p0 = does not work in above code.


Help.
Please clarify how above variables in batch can be done.

--

Re: JREN.BAT v2.8 - Rename files/folders using regular expressions

Posted: 15 May 2020 15:18
by dbenham
The /FM must be the name of the folder or file you want, and the /P must be the full path leading up to that file/folder.

Code: Select all

for %%F in ("%~dp0.") do call jren "^" "size()+'  '" /d /j /list /p "%%~dpF" /fm "%%~nxF" > "FolderList1.txt"
"%~dp0." expands to "D:\portable\.", which is logically equivalent to "D:\portable"

So in the FOR loop, "%%~dpF" yields "D:\" and "%%~nxF" yields "portable".

Note that a folder name could include an extension, which is the reason I use %%~nxF instead of %%~nF.

Similarly I use %%~dpF instead of %%~dF just in case your batch script is not in a folder that hangs of the root.

Re: JREN.BAT v2.8 - Rename files/folders using regular expressions

Posted: 16 May 2020 21:23
by dostipsQuestion
Hello Dave Benham,
Thank You for the code in above post.

Below are slight changes to your code.
These changes might add clarity for others:

Code: Select all

for %%F in ("%~dp0.") do call D:\Batches\JREN\JREN.BAT "^" "size('               ')+'  bytes in       '" /d /j /list /p "%%~dpF" /fm "%%~nxF" > "R:\FolderList1.txt"
Above code of JREN.bat version 2.8 gives desired output as:
______227595130 bytes in FireFox


The above _ is added to align numbers in this post.
Actually, JREN.bat automatically aligns by padding with blank spaces.


Regarding counting, I am unsure as to what else JREN.bat can do.
Maybe JREN.bat can also do more than byte counting as per above code.
So I will ask.
I rather use JREN.bat versus other commands.

What code would tell JREN.bat version 2.8 to:
1. count Files?
2. count Folders?

Looking for output:
______227595130 bytes in FireFox
____________387 Files
_____________86 Folders

If JREN.bat cannot count files and folders as shown above,
then counting can be made in batch with:
dir /a:-d /s /b | find /c ":\" > "R:\FolderList1.txt"
dir /a:d /s /b | find /c ":\" > "R:\FolderList1.txt"


And, what code would tell JREN.bat version 2.8 to:
3. List all Files?

Looking for output:
S:\FireFox\App
S:\FireFox\Data
S:\FireFox\help.html
S:\FireFox\FirefoxPortable.exe
Etc.

If JREN.bat cannot output above files then I can use a batch with:
dir /s /b /ON > "R:\FolderList1.txt"



And, what code would tell JREN.bat version 2.8 to:
4. Date & Time stamp? Ideal stamp:
Ended : Sat 16 May 2020 at 11:55:14
If JREN.bat cannot stamp as above then this is close:
"C:\WINDOWS\system32\ROBOCOPY.EXE" /L * \ \ | find /i "Ended" >> "R:\FolderList1.txt"


And, what code would tell JREN.bat version 2.8 to:
5. Give credit to you in TEXT files? Meaning:
JREN.BAT version 2.8 by Dave Benham
Put above text to a file.

Because this does work at windows command line:
D:\Batches\JREN\JREN.BAT /?VERSION
But above command did not work inside a batch.

and
your web site for JREN.BAT would be good for a text file.
http://_


6. Curious, what is maximum JREN.BAT byte count?
For sure JREN.BAT can count to 255 GB, example:
___255000111222 bytes


Byte count background:
https://superuser.com/questions/222249/ ... 267#222267
As designed, the maximum NTFS file size is
16 EB (16 × 1024^6 bytes) minus 1 KB (1024 bytes) or
18,446,744,073,709,550,592 bytes.

As implemented, the maximum NTFS file size is
16 TB (16 × 1024^4 bytes) minus 64 KB (64 × 1024 bytes) or
17,592,185,978,880 bytes.

Said differently, maximum NTFS file size is:
18446744073709550592 bytes by design _______ > 18 quintillion
______17592185978880 bytes by implementation > 17 trillion

Maximum volume size
Implementation:
256 terabytes minus 64 KB ( 232 clusters minus 1 cluster)
https://docs.microsoft.com/en-us/previo ... dfrom=MSDN



--

Re: JREN.BAT v2.8 - Rename files/folders using regular expressions

Posted: 18 May 2020 07:30
by dbenham
In general, the built in help (JREN /?) does a good job describing the features of JREN. It is up to you to figure out how to use those features. Plus there are examples throughout this thread. I hope you take the time to scan all the posts.
dostipsQuestion wrote:
16 May 2020 21:23
What code would tell JREN.bat version 2.8 to:
1. count Files?
2. count Folders?

Looking for output:
______227595130 bytes in FireFox
____________387 Files
_____________86 Folders
JREN does not have any feature to provide a summary at the end of all processing. That might be an interesting feature to add, though I'm not particularly inclined to invest in much more development with this project. It is significantly behind in its Unicode capabilities compared to JREPL.BAT - regular expression find/replace utility. And the date/time formatting and computation capabilities lag compared to what is available in jTimeStamp.bat. I probably want to address that before I add any new features, but there just doesn't seem to be that much interest in this utility. By far my most widely used utility is JREPL.BAT. You should check that out if you haven't seen it already.
dostipsQuestion wrote:
16 May 2020 21:23
And, what code would tell JREN.bat version 2.8 to:
3. List all Files?

Looking for output:
S:\FireFox\App
S:\FireFox\Data
S:\FireFox\help.html
S:\FireFox\FirefoxPortable.exe
Etc.
Not sure exactly what you are looking for. JREN can process (list) files or folders, but not both at the same time. The /S option allows recursion of subdirectories. So the following would list all files within the folder tree rooted at the current directory:

Code: Select all

jren "^" "path()" /list /s /j
JREN processes system and hidden files the same as any other. Use the many other options to specify the root folder, and filter paths and files as needed.
dostipsQuestion wrote:
16 May 2020 21:23
And, what code would tell JREN.bat version 2.8 to:
4. Date & Time stamp? Ideal stamp:
Ended : Sat 16 May 2020 at 11:55:14
You need to investigate the /TS option. The following JScript expression using the FileSystemObject will yield your desired format if your computer's date format can be parsed by JScript

Code: Select all

ts({ dt:'fsoCreated', fmt:'Ended : {wkd} {d} {month} {yyyy} at {hh}:{nn}:{ss}' })
If the date cannot be parsed, then you will need the much slower WMI variant:

Code: Select all

ts({ dt:'created', fmt:'Ended : {wkd} {d} {month} {yyyy} at {hh}:{nn}:{ss}' })
dostipsQuestion wrote:
16 May 2020 21:23
And, what code would tell JREN.bat version 2.8 to:
5. Give credit to you in TEXT files? Meaning:
JREN.BAT version 2.8 by Dave Benham
Put above text to a file.

Because this does work at windows command line:
D:\Batches\JREN\JREN.BAT /?VERSION
But above command did not work inside a batch.
JREN.BAT is a batch script, so you must use CALL JREN within your own script, else it won't return to your script.
dostipsQuestion wrote:
16 May 2020 21:23
your web site for JREN.BAT would be good for a text file.
http://_
I treat this DosTips thread as the primary source for JREN. https://www.dostips.com/forum/viewtopic.php?f=3&t=6081

The closest thing I have to a personal website is my StackOverflow profile: https://stackoverflow.com/users/1012053 ... ab=profile

And for music I have my YouTube channel - www.youtube.com/c/DaveBenhamMusic
and SoundCloud channel - www.soundcloud.com/dave-benham

dostipsQuestion wrote:
16 May 2020 21:23
6. Curious, what is maximum JREN.BAT byte count?
For sure JREN.BAT can count to 255 GB, example:
___255000111222 bytes
I don't know for sure. I'm relying on built in Microsoft routines to get the files sizes. My guess is that it cannot exceed the maximum JScript integer size of (2^53)-1 = 9,007,199,254,740,991. And then within that limit I imagine it is dependent on the underlying file system.


Dave Benham

Re: JREN.BAT v2.8 - Rename files/folders using regular expressions

Posted: 20 May 2020 07:32
by dostipsQuestion
.
With code below, JREN.BAT works great giving output:

____87111222333 bytes in Archive

Note the _ means padded blank spaces.


Question:
What is an easy way to use above
1 line output and get this
4 line output?

_______________ TB (Tera Bytes)
____87_________ GB (Giga Bytes)
____87111______ MB (Mega Bytes)
____87111222___ KB (Kilo Bytes)
____87111222333 bytes in Archive


Said differently, replace numbers with blank spaces.
Not doing math of divide by 1024.
Just truncate.
Just replace numbers with blank spaces.


Can above 5 line output be done inside JREN?

If so, please make a suggestion as to how and
point me to line number inside JREN.bat

If not, then what suggested Text Tool can manipulate the
1 line output?
____87111222333 bytes in Archive


Code for JREN.bat

Code: Select all

for %%F in ("%~dp0.") do call D:\Batches\JREN\JREN.BAT "^" "size('               ')+'  bytes in       '" /d /j /list /p "%%~dpF" /fm "%%~nxF" > "d:\FolderList1.txt"

--

Re: JREN.BAT v2.8 - Rename files/folders using regular expressions

Posted: 20 May 2020 08:55
by dbenham
I'm' going to leave that coding exercise to you. The entire JScript language is at your disposal. You can include newlines in your output with the correct JScript code.

Re: JREN.BAT v2.8 - Rename files/folders using regular expressions

Posted: 05 Oct 2020 21:25
by medp7060
I may have found a small bug. This is reproducible:

Code: Select all

D:\>jren BOOTEX.loG BOOTEX.LOG /P "G:\"
"G:\BOOTEX.loG"  -->  "BOOTEX.LOG"

D:\>jren BOOTEX.LOG BOOTEX.loG /P "G:\"
"G:\BOOTEX.LOG"  -->  "BOOTEX.loG"

D:\>jren BOOTEX.loG BOOTEX.LOG /P "G:\"
"G:\BOOTEX.loG"  -->  "BOOTEX.LOG"        // but not renamed !!!!

D:\>jren BOOTEX.loG BOOTEX.LOG /P "G:\"
"G:\BOOTEX.loG"  -->  "BOOTEX.LOG"

D:\>
Drive G: is a USB. That is the third rename command was executed, but name was not changed. A fourth command has to be issued for the renaming.

Further test on Drive G: confirmed with a new CMD session. This only needs once to actually rename it:

Code: Select all

G:\>jren BOOTEX.LOG BOOTEX.loG
"G:\BOOTEX.LOG"  -->  "BOOTEX.loG"

G:\>
with a new CMD session, this needs to run twice to actually rename it:

Code: Select all

G:\>jren BOOTEX.loG BOOTEX.LOG
"G:\BOOTEX.loG"  -->  "BOOTEX.LOG"     // but not renamed !!!!

G:\>jren BOOTEX.loG BOOTEX.LOG
"G:\BOOTEX.loG"  -->  "BOOTEX.LOG"

G:\>

Re: JREN.BAT v2.8 - Rename files/folders using regular expressions

Posted: 06 Oct 2020 17:40
by dbenham
That is weird, I don't see how my code can do that. And working off a USB drive shouldn't make a difference.

Have you tried the same steps with a simple REN instead of JREN? Your example should work just as well with REN.

Please note that your first argument is a regular expression, meaning the dot is a wildcard that matches any character, not a dot literal. But that has nothing to do with your reported behavior.


Dave Benham

Re: JREN.BAT v2.8 - Rename files/folders using regular expressions

Posted: 07 Oct 2020 10:01
by aGerman
It's not a bug it's a feature :lol:
Also REN doesn't work for me, not even manual renaming in the explorer UI. Neither in one direction nor in the other one. The reason is likely that file names on Windows are not case-sensitive. So, I suspect the names are treated to be the same. Nothing wrong with JREN here :wink:

Possible workaround could be to rename in two steps where the first step actually updates the file name (in terms of my assumption). Something like that

Code: Select all

ren "G:\BOOTEX.loG" "BOOTEX.~LOG"
ren "G:\BOOTEX.~LOG" "BOOTEX.LOG"
Steffen

Re: JREN.BAT v2.8 - Rename files/folders using regular expressions

Posted: 07 Oct 2020 15:23
by medp7060
Thanks, Dave.

As Steffen said, your script has the feature where other utilities all fail when Windows simply ignores case-sensitive renaming. I did a thorough research and yours came up as the only one which can make a case sensitive name change. Windows' own ren command, all other file explorers cannot do that. The MS says that old FAT, exFAT, etc are case conserving, but not case sensitive. Therefore, it is impossible just to change the case of a file name on these file systems. However, your script can. To me, it seems that your current v2.8 has a little thing that prevents the case sensitive renaming from going to a certain direction (e.g. from "BOOTEX.loG" --> "BOOTEX.LOG" in some cases like mine, not always), but the other direction renaming is always fine (e.g. "BOOTEX.LOG" --> "BOOTEX.loG"). Of course, it is possible that your script is fine, it could be because of other factors that resulted in the weird thing I observed.

Your codes are too complex for me to figure out what is the possible reason. I can only give you more details on my circulation, in case you wanted to have a look at it. Thank you so much for this useful utility.

OS: Windows 10 1903
Drive G: USB FAT32 format (with "Quick Removal" device enabled)
A text file: BOOTEX.LOG


I tested it again today. This issue is reproducible:

One command is enough for "BOOTEX.LOG" --> "BOOTEX.loG"

Code: Select all

Microsoft Windows [Version 10.0.18362.900]
(c) 2019 Microsoft Corporation. All rights reserved.

C:\Users\xyz>g:

G:\>jren BOOTEX.LOG BOOTEX.loG
"G:\BOOTEX.LOG"  -->  "BOOTEX.loG"

G:\>dir
 Volume in drive G is USB_DATA
 Volume Serial Number is E03D-4258

 Directory of G:\
 04/10/2020  10:54 pm            41,722 JREN.BAT
08/10/2020  09:59 am                34 BOOTEX.loG
               5 File(s)        473,480 bytes
              10 Dir(s)   9,542,025,216 bytes free

G:\>exit
Two commands are needed for "BOOTEX.loG" --> "BOOTEX.LOG"

Code: Select all

Microsoft Windows [Version 10.0.18362.900]
(c) 2019 Microsoft Corporation. All rights reserved.

C:\Users\xyz>g:

G:\>jren BOOTEX.loG BOOTEX.LOG
"G:\BOOTEX.loG"  -->  "BOOTEX.LOG"     // actually failed see below

G:\>dir
 Volume in drive G is USB_DATA
 Volume Serial Number is E03D-4258

 Directory of G:\
04/10/2020  10:54 pm            41,722 JREN.BAT
08/10/2020  09:59 am                34 BOOTEX.loG    // failed here
               5 File(s)        473,480 bytes
              10 Dir(s)   9,542,025,216 bytes free

G:\>jren BOOTEX.loG BOOTEX.LOG                // a second try
"G:\BOOTEX.loG"  -->  "BOOTEX.LOG"             // successful!!!

G:\>dir
 Volume in drive G is USB_DATA
 Volume Serial Number is E03D-4258

 Directory of G:\
04/10/2020  10:54 pm            41,722 JREN.BAT
08/10/2020  09:59 am                34 BOOTEX.LOG
               5 File(s)        473,480 bytes
              10 Dir(s)   9,542,025,216 bytes free

G:\>exit

Re: JREN.BAT v2.8 - Rename files/folders using regular expressions

Posted: 07 Oct 2020 16:35
by medp7060
More tests have revealed that JREN.bat will fail sometimes at first try, but a second try will work to rename the cases:

Code: Select all

G:\>jren captain.mkv captain.MKV
"G:\captain.mkv"  -->  "captain.MKV"          //actually failed on the first try

G:\>jren captain.mkv captain.MKV
"G:\captain.mkv"  -->  "captain.MKV"         //succeeded on the 2nd try

G:\>jren captain.MKV captain.mkv
"G:\captain.MKV"  -->  "captain.mkv"         //actually failed on the first try

G:\>jren captain.MKV captain.mkv
"G:\captain.MKV"  -->  "captain.mkv"         //succeeded on the 2nd try

G:\>

Re: JREN.BAT v2.8 - Rename files/folders using regular expressions

Posted: 07 Oct 2020 23:47
by medp7060
By the way, these always worked. So perhaps is there something to do with the the dot (.)?

Code: Select all

G:\t>jren BOOTEX.1.LOG BOOTEX.1.loG
"G:\t\BOOTEX.1.LOG"  -->  "BOOTEX.1.loG"          //succeeded 

G:\t>jren BOOTEX.1.loG BOOTEX.1.LOG
"G:\t\BOOTEX.1.loG"  -->  "BOOTEX.1.LOG"          //succeeded 

G:\t>jren BOOTEX.1.LOG BOOTEX.1.loG
"G:\t\BOOTEX.1.LOG"  -->  "BOOTEX.1.loG"          //succeeded 

G:\t>jren BOOTEX.1.loG BOOTEX.1.LOG
"G:\t\BOOTEX.1.loG"  -->  "BOOTEX.1.LOG"          //succeeded 

Re: JREN.BAT v2.8 - Rename files/folders using regular expressions

Posted: 08 Oct 2020 03:19
by aGerman
I had a brief look at the code. Seems that Dave updates the Name property of the FolderItem object.
https://docs.microsoft.com/en-us/window ... folderitem
If you have some experiences in JScript you may just write a piece of code which skips all the regex stuff. Even though my expectation is that this won't help much. If you're facing issues like the same thing fails once and succeeds at a second try, then I strongly suspect it's some kind of undefined behavior. You should never rely on it. Rather consider to work around it as I did …

Steffen

//EDIT:
Save this code with extension .bat and give it a go

Code: Select all

@if (0)==(0) echo off &set jsrename=cscript.exe //nologo //e:jscript "%~fs0"

>"foo.TXT" type nul                    &REM create a new file
pause                                  &REM just to give you the opportunity to observe what happened

%jsrename% "%cd%" "foo.TXT" "foo.txt"  &REM Syntax: %jsrename% "Path" "OldName" "NewName"
pause

%jsrename% "%cd%" "foo.txt" "foo.TXT"
pause

goto :eof @end new ActiveXObject('Shell.Application').NameSpace(WScript.Arguments(0)).ParseName(WScript.Arguments(1)).Name = WScript.Arguments(2);
If you want to modify it, always leave the first and the last line the same and update the code in the middle.

Re: JREN.BAT v2.8 - Rename files/folders using regular expressions

Posted: 09 Oct 2020 03:12
by medp7060
Thanks, Steffen.

I tested your script. It worked as the ren command.

I also think the weird observations with JREN.BAT is due to some other undefined causes. ATM, I am using the workaround.

Re: JREN.BAT v2.8 - Rename files/folders using regular expressions

Posted: 09 Oct 2020 10:26
by aGerman
For me it worked on the NTFS-formatted C: volume only. It failed on my exFAT-formatted external SSD and on a USB pen drive with FAT32 file system. However I'm uncertain if those are really representative results. Even though when I used the FileSystemObject object ...

Code: Select all

goto :eof @end new ActiveXObject('Scripting.FileSystemObject').MoveFile(WScript.Arguments(0) + '\\' + WScript.Arguments(1), WScript.Arguments(0) + '\\' + WScript.Arguments(2));
... it's still the same behavior which indicates that the file system might have something to do whith it.

Steffen