Advertisement
dropbox1349

Order and move files into directories based on some filename

Oct 12th, 2016
368
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.09 KB | None | 0 0
  1. :: A script for grouping PDF files based on book series name
  2. :: http://i.imgur.com/seh6p.gif
  3.  
  4. @echo off
  5. setlocal enabledelayedexpansion
  6. cls
  7.  
  8. :: Main Directory Containing PDF Directories (change this to suit your needs)
  9. set "source_dir=C:\Users\Administrator\Desktop\test2"
  10.  
  11. :: Move to source dir and process each folder, one at a time.
  12. pushd "%source_dir%"
  13.  
  14. for /f "delims=" %%A in ('dir /b /a:d') do (
  15. call :getSeriesName "%%A" series_name
  16.  
  17. mkdir !series_name! 2>nul
  18.  
  19. REM If you want to do additional cleanup, change the copy to a move
  20. copy "%%A\*.pdf" !series_name! >nul
  21. )
  22.  
  23. popd
  24. exit /b
  25.  
  26. ::------------------------------------------------------------------------------
  27. :: Extracts the series name from the directory and changes spaces to periods
  28. ::
  29. :: Arguments: %1 - The original book release name
  30. :: %2 - The variable that will contain the returned value because
  31. :: batch doesn't actually have functions
  32. :: Returns: The series name and volume number
  33. ::------------------------------------------------------------------------------
  34. :getSeriesName
  35. :: Convert spaces to periods
  36. set "raw_name=%~1"
  37. set standard_name=!raw_name: =.!
  38.  
  39. :: Split the folder name into period-delimited tokens
  40. set token_counter=0
  41. :name_split
  42. for /f "tokens=1,* delims=.-" %%B in ("!standard_name!") do (
  43. set name_part[!token_counter!]=%%B
  44. set standard_name=%%C
  45. set /a token_counter+=1
  46. goto :name_split
  47. )
  48.  
  49. :: Get the volume number
  50. for /l %%B in (0,1,!token_counter!) do (
  51. echo !name_part[%%B]!|findstr /R /C:"[sS][0-9][0-9]*[eE][0-9][0-9]*" >nul
  52. if !errorlevel! equ 0 (
  53. set /a name_end=%%B-1
  54. set volume_value=!name_part[%%B]!
  55. set volume_value=!volume_value:~0,3!
  56. )
  57. )
  58.  
  59. :: Rebuild the series name
  60. set "extracted_name="
  61. for /l %%B in (0,1,!name_end!) do set "extracted_name=!extracted_name!!name_part[%%B]!."
  62. set extracted_name=!extracted_name!!volume_value!
  63.  
  64. :: Purge the name_part array
  65. for /l %%B in (0,1,!token_counter!) do set "name_part[%%B]="
  66.  
  67. :: Return the extracted name
  68. set "%~2=!extracted_name!"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement