Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- :: A script for grouping PDF files based on book series name
- :: http://i.imgur.com/seh6p.gif
- @echo off
- setlocal enabledelayedexpansion
- cls
- :: Main Directory Containing PDF Directories (change this to suit your needs)
- set "source_dir=C:\Users\Administrator\Desktop\test2"
- :: Move to source dir and process each folder, one at a time.
- pushd "%source_dir%"
- for /f "delims=" %%A in ('dir /b /a:d') do (
- call :getSeriesName "%%A" series_name
- mkdir !series_name! 2>nul
- REM If you want to do additional cleanup, change the copy to a move
- copy "%%A\*.pdf" !series_name! >nul
- )
- popd
- exit /b
- ::------------------------------------------------------------------------------
- :: Extracts the series name from the directory and changes spaces to periods
- ::
- :: Arguments: %1 - The original book release name
- :: %2 - The variable that will contain the returned value because
- :: batch doesn't actually have functions
- :: Returns: The series name and volume number
- ::------------------------------------------------------------------------------
- :getSeriesName
- :: Convert spaces to periods
- set "raw_name=%~1"
- set standard_name=!raw_name: =.!
- :: Split the folder name into period-delimited tokens
- set token_counter=0
- :name_split
- for /f "tokens=1,* delims=.-" %%B in ("!standard_name!") do (
- set name_part[!token_counter!]=%%B
- set standard_name=%%C
- set /a token_counter+=1
- goto :name_split
- )
- :: Get the volume number
- for /l %%B in (0,1,!token_counter!) do (
- echo !name_part[%%B]!|findstr /R /C:"[sS][0-9][0-9]*[eE][0-9][0-9]*" >nul
- if !errorlevel! equ 0 (
- set /a name_end=%%B-1
- set volume_value=!name_part[%%B]!
- set volume_value=!volume_value:~0,3!
- )
- )
- :: Rebuild the series name
- set "extracted_name="
- for /l %%B in (0,1,!name_end!) do set "extracted_name=!extracted_name!!name_part[%%B]!."
- set extracted_name=!extracted_name!!volume_value!
- :: Purge the name_part array
- for /l %%B in (0,1,!token_counter!) do set "name_part[%%B]="
- :: Return the extracted name
- set "%~2=!extracted_name!"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement