8
8
:: Requirements: 7-Zip (CLI), Powershell (native to Windows)
9
9
:: URL: https://github.com/chocmake/Backup-to-Zip
10
10
:: Author: choc
11
- :: Version: 0.2 (2023-02-10 )
11
+ :: Version: 0.2.1 (2024-03-11 )
12
12
13
13
:: Note: If you'd like to add custom comments to the backup filenames add them
14
14
:: after the date/time and wrap the comments in square brackets.
@@ -394,6 +394,41 @@ exit
394
394
set " %~2 = !args:* %~1 =! "
395
395
exit /b
396
396
397
+ :lastindexof
398
+ set " str = !%~1! "
399
+ set " delim = !%~2! "
400
+ set " delim = !delim:~0 ,1 ! "
401
+
402
+ set " str2 = .!str! "
403
+ call :len str2 str2len
404
+ for /l %%n in (!str2len! -1 0) do if " !str:~%%n ,1 ! " equ " !delim! " (
405
+ set " rtn = %%n "
406
+ goto :break
407
+ )
408
+ set " rtn = -1"
409
+
410
+ :break
411
+ set " %~3 = !rtn! "
412
+ exit /b
413
+
414
+ :lastsubstringbydelim
415
+ rem Extract last substring beginning with delimiter and output result
416
+ set " delim = %1 "
417
+ set " delim = !delim:" =! "
418
+ set " str = !%~2! "
419
+
420
+ call :len str strlen
421
+ call :lastindexof str delim delimstart
422
+ set /a " strdiff = ! strlen! - ! delimstart! "
423
+ for %%d in (!strdiff! ) do (
424
+ set " extracted = !str:~-%%d ! "
425
+ set " leftover = !str:~0 ,-%%d ! "
426
+ )
427
+ set " %~3 = !extracted! "
428
+ rem If forth argument defined then output input string with substring removed
429
+ if " %~4 " neq " " (set " %~4 =!leftover! " )
430
+ exit /b
431
+
397
432
:filenameformat
398
433
call :datetime
399
434
set " suffix = !date! " & if defined destname set " suffix = - !suffix! "
@@ -406,20 +441,21 @@ exit
406
441
for %%f in (" !destdir!!destname!!suffix! [*]!ext! " ) do (
407
442
setlocal disabledelayedexpansion
408
443
set " f = %%f "
444
+ set " origext = %%~xf "
445
+ set " origname = %%~nf "
409
446
setlocal enabledelayedexpansion
410
- for /f " tokens=2,3 delims=[" %%a in (" !f! " ) do (
411
- setlocal disabledelayedexpansion
412
- set " a = %%a "
413
- set " b = %%b "
414
- setlocal enabledelayedexpansion
415
- rem Check if filename already has secondary square brackets (eg: `[m]`)
416
- if exist " !destdir!!destname!!suffix! [*] [*]!ext! " (
417
- ren " !f! " " !destname!!suffix! (1) [!a! [!b! "
418
- ) else (
419
- ren " !f! " " !destname!!suffix! (1) [!a! "
420
- )
421
- endlocal & endlocal
447
+
448
+ rem Determine last occurrence of opening square brackets in filename, assumed to be start of user-added comment
449
+ call :lastsubstringbydelim " [" origname comment orignameleftover
450
+
451
+ rem Check if filename already has secondary square brackets (eg: `[m]`)
452
+ if exist " !destdir!!destname!!suffix! [*] [*]!ext! " (
453
+ call :lastsubstringbydelim " [" orignameleftover firstbrk
454
+ ren " !f! " " !destname!!suffix! (1) !firstbrk!!comment!!ext! "
455
+ ) else (
456
+ ren " !f! " " !destname!!suffix! (1) !comment!!ext! "
422
457
)
458
+
423
459
endlocal & endlocal
424
460
)
425
461
)
0 commit comments