{"id":28,"date":"2009-11-28T10:38:00","date_gmt":"2009-11-28T10:38:00","guid":{"rendered":"http:\/\/www.roysac.com\/blog\/wp-admin\/2009\/11\/file-processing-scripts-collection-v1-0\/"},"modified":"2014-02-09T15:25:18","modified_gmt":"2014-02-09T23:25:18","slug":"file-processing-scripts-collection-v1-0","status":"publish","type":"post","link":"http:\/\/www.roysac.com\/blog\/2009\/11\/file-processing-scripts-collection-v1-0\/","title":{"rendered":"File Processing Scripts Collection V1.0"},"content":{"rendered":"<p>Here is a collection of useful DOS BATCH and VBSCRIPT scripts for processing, moving, sorting of files.<\/p>\n<p>The code for all scripts can be downloaded in a single ZIP file called: <a href=\"http:\/\/www.roysac.com\/files\/Roy-FileProcScripts.zip\" target=\"_blank\">Roy-FileProcScripts.zip<\/a><\/p>\n<p>The ZIP archive also contains a nice intro for RoySAC.com, which I recommend to check out :).<\/p>\n<h3>ImageFilesSort2Dirs.bat<\/h3>\n<p> IMAGES Cleanup\/Sorting Batch Script<\/p>\n<ol>\n<li>looks for IMAGE files in current directory  (Extensions JPG, PNG, GIF, BMP, LBM, TGA, PCX, SVG, TIF, IFF)<\/li>\n<li>looks for &#8220;-&#8221; in file name (assumed to be  the separator between Artist Name and Image Title)<\/li>\n<li>parses string before first &#8220;-&#8220;, trims trailing spaces<\/li>\n<li>checks if directory with that name exists<br \/>    4.1 If not, it creates it (artist name)<\/li>\n<li>moves all image files of the artist into the artist dir<\/li>\n<\/ol>\n<div>\n<div class=\"code\">\n<pre><span>   1:<\/span> @echo off<\/pre>\n<pre><span>   2:<\/span> :: -------------------------------------------------------<\/pre>\n<pre><span>   3:<\/span> :: IMAGES Cleanup\/Sorting Batch Script<\/pre>\n<pre><span>   4:<\/span> :: ------------------------------------------------------- <\/pre>\n<pre><span>   5:<\/span> :: 1. looks <span>for<\/span> IMAGE files <span>in<\/span> current directory<\/pre>\n<pre><span>   6:<\/span> :: (Extensions JPG, PNG, GIF, BMP, LBM, TGA, PCX, SVG, TIF, IFF)<\/pre>\n<pre><span>   7:<\/span> :: 2. looks <span>for<\/span> <span>\"-\"<\/span> <span>in<\/span> file name (assumed <span>to<\/span> be <\/pre>\n<pre><span>   8:<\/span> ::    the separator between Artist Name <span>and<\/span> Image Title)<\/pre>\n<pre><span>   9:<\/span> :: 3. parses <span>string<\/span> before first <span>\"-\"<\/span>, trims trailing spaces<\/pre>\n<pre><span>  10:<\/span> :: 4. checks <span>if<\/span> directory <span>with<\/span> that name exists<\/pre>\n<pre><span>  11:<\/span> ::   4.1 <span>If<\/span> <span>not<\/span>, it creates it (artist name)<\/pre>\n<pre><span>  12:<\/span> :: 5. moves all image files of the artist into the artist dir<\/pre>\n<pre><span>  13:<\/span> :: <\/pre>\n<pre><span>  14:<\/span> :: Batch Script by Carsten Cumbrowski aka Roy\/SAC<\/pre>\n<pre><span>  15:<\/span> :: visit http:\/\/www.roysac.com<\/pre>\n<pre><span>  16:<\/span>  <\/pre>\n<pre><span>  17:<\/span>  <\/pre>\n<pre><span>  18:<\/span> setlocal enabledelayedexpansion<\/pre>\n<pre><span>  19:<\/span> CLS<\/pre>\n<pre><span>  20:<\/span> <span>SET<\/span> DC=DIR \/A-D \/<span>ON<\/span> \/B<\/pre>\n<pre><span>  21:<\/span> <span>SET<\/span> EXT=JPG PNG GIF BMP LBM TGA PCX SVG TIF IFF<\/pre>\n<pre><span>  22:<\/span>  <\/pre>\n<pre><span>  23:<\/span> <span>for<\/span> %%f <span>in<\/span> (%EXT%) <span>DO<\/span> <span>SET<\/span> <span>\"DS=!DS!^^&%DC% *.%%f 2^^>NUL\"<\/span><\/pre>\n<pre><span>  24:<\/span> <span>SET<\/span> <span>\"DS=%DS:~2%\"<\/span><\/pre>\n<pre><span>  25:<\/span>  <\/pre>\n<pre><span>  26:<\/span> ::only list files <span>with<\/span> IMAGE extension, exclude directories<\/pre>\n<pre><span>  27:<\/span> <span>for<\/span> \/f <span>\"tokens=*\"<\/span> %%A <span>in<\/span> (<span>'%DS%') do (<\/span><\/pre>\n<pre><span>  28:<\/span>  <span>if<\/span> <span>NOT<\/span> <span>\"%%A\"<\/span>==<span>\"File Not Found\"<\/span> (<\/pre>\n<pre><span>  29:<\/span>    <span>call<\/span> :PERFACTION <span>\"%%~A%\"<\/span><\/pre>\n<pre><span>  30:<\/span>  )<\/pre>\n<pre><span>  31:<\/span> )<\/pre>\n<pre><span>  32:<\/span> echo.<\/pre>\n<pre><span>  33:<\/span> echo Done!<\/pre>\n<pre><span>  34:<\/span> echo.<\/pre>\n<pre><span>  35:<\/span> pause<\/pre>\n<pre><span>  36:<\/span> <span>goto<\/span> :EOF<\/pre>\n<pre><span>  37:<\/span>  <\/pre>\n<pre><span>  38:<\/span>  <\/pre>\n<pre><span>  39:<\/span> :PERFACTION<\/pre>\n<pre><span>  40:<\/span> ::look <span>for<\/span> dash <span>in<\/span> file name, parse str before dash<\/pre>\n<pre><span>  41:<\/span> <span>for<\/span> \/F <span>\"tokens=1 delims=-\"<\/span> %%B <span>in<\/span> (<span>\"%~1\"<\/span>) <span>do<\/span> (<\/pre>\n<pre><span>  42:<\/span> ::trim trailing spaces from parsed <span>string<\/span>  <\/pre>\n<pre><span>  43:<\/span>     <span>set<\/span> str=%%~B%<\/pre>\n<pre><span>  44:<\/span>     <span>for<\/span> \/l %%a <span>in<\/span> (1,1,31) <span>do<\/span> <span>if<\/span> <span>\"!str:~-1!\"<\/span>==<span>\" \"<\/span> <span>set<\/span> str=!str:~0,-1!<\/pre>\n<pre><span>  45:<\/span> )<\/pre>\n<pre><span>  46:<\/span> <span>call<\/span> :PROCFILE <span>\"%str%\"<\/span><\/pre>\n<pre><span>  47:<\/span> <span>goto<\/span> :EOF<\/pre>\n<pre><span>  48:<\/span>  <\/pre>\n<pre><span>  49:<\/span>  <\/pre>\n<pre><span>  50:<\/span> :PROCFILE<\/pre>\n<pre><span>  51:<\/span> ::check <span>if<\/span> directory exists <span>and<\/span> move file(s)<\/pre>\n<pre><span>  52:<\/span> <span>set<\/span> f2=<span>\"%~1\"<\/span><\/pre>\n<pre><span>  53:<\/span> <span>if<\/span> {%~x1}=={} (<\/pre>\n<pre><span>  54:<\/span>    echo %f2%<\/pre>\n<pre><span>  55:<\/span>    <span>if<\/span> <span>NOT<\/span> exist %f2%  MD %f2%<\/pre>\n<pre><span>  56:<\/span>    <span>FOR<\/span> %%f <span>in<\/span> (%EXT%) <span>DO<\/span> MOVE <span>\"%~1*-*.%%f\"<\/span> %f2% 2>NUL<\/pre>\n<pre><span>  57:<\/span> )<\/pre>\n<pre><span>  58:<\/span> <span>goto<\/span> :EOF<\/pre>\n<pre><span>  59:<\/span>  <\/pre>\n<pre><span>  60:<\/span>  <\/pre>\n<\/div>\n<\/div>\n<p><\/p>\n<h3>MoveDirsToAlphaSub.bat<\/h3>\n<p><\/p>\n<p>MOVE Subfolders and their content (including their subdirectories) to Destination Folder by First Letter of the Subfolder Name. I created this batch script to be able to sort content that I had in sub directories sorted by group names to an additional sub directory level by letter. I only needed the script to move the files in the sub directory itself, not worrying about additional sub directories that the folder might contains, but I extended the script to move those over as well. Here is an illustration of what the script does, using the example of mod tracker files in sub directories by group name.<\/p>\n<p>Source:<br \/>   Ackerlight  <br \/>        Ackerlight1.mod <br \/>    Backlash <br \/>         Backlash1.mod<\/p>\n<p>The script moves everything to a target that will look like the following:<\/p>\n<p>            A          <br \/>               Ackerlight  <br \/>                  Ackerlight1.mod <br \/>            B<br \/>               Backlash<br \/>                   Backlash1.mod<\/p>\n<p>USAGE of the script:<br \/>MOVEDIRSTOALPHASUB.BAT  [SOURCEDIR]  [DESTDIR]<\/p>\n<p>[SOURCEDIR] &#8211; Optional &#8211; Source Directory<br \/>[DESTDIR]   &#8211; Optional &#8211; Destination Directory<\/p>\n<div>\n<div class=\"code\">\n<pre><span>   1:<\/span> @ECHO OFF<\/pre>\n<pre><span>   2:<\/span> CLS<\/pre>\n<pre><span>   3:<\/span> <span>REM ============================================================<\/span><\/pre>\n<pre><span>   4:<\/span> <span>REM MOVE Subfolders and their content (including their subdirectories)<\/span><\/pre>\n<pre><span>   5:<\/span> <span>REM to Destination Folder by First Letter of the Subfolder Name<\/span><\/pre>\n<pre><span>   6:<\/span> <span>REM  <\/span><\/pre>\n<pre><span>   7:<\/span> <span>REM Source:<\/span><\/pre>\n<pre><span>   8:<\/span> <span>REM   axxxxxx     DIR<\/span><\/pre>\n<pre><span>   9:<\/span> <span>REM     xxxxxxx   DIR<\/span><\/pre>\n<pre><span>  10:<\/span> <span>REM       yyyyyyy FILE<\/span><\/pre>\n<pre><span>  11:<\/span> <span>REM     yyyyyyy   FILE<\/span><\/pre>\n<pre><span>  12:<\/span> <span>REM<\/span><\/pre>\n<pre><span>  13:<\/span> <span>REM Destination:<\/span><\/pre>\n<pre><span>  14:<\/span> <span>REM   A             DIR<\/span><\/pre>\n<pre><span>  15:<\/span> <span>REM     axxxxxx     DIR<\/span><\/pre>\n<pre><span>  16:<\/span> <span>REM       xxxxxxx   DIR <\/span><\/pre>\n<pre><span>  17:<\/span> <span>REM         yyyyyyy FILE<\/span><\/pre>\n<pre><span>  18:<\/span> <span>REM       yyyyyyy   FILE<\/span><\/pre>\n<pre><span>  19:<\/span> <span>REM <\/span><\/pre>\n<pre><span>  20:<\/span> <span>REM USAGE:<\/span><\/pre>\n<pre><span>  21:<\/span> <span>REM MOVEDIRSTOALPHASUB.BAT  [SOURCEDIR]  [DESTDIR]<\/span><\/pre>\n<pre><span>  22:<\/span> <span>REM <\/span><\/pre>\n<pre><span>  23:<\/span> <span>REM [SOURCEDIR] - Optional - Source Directory<\/span><\/pre>\n<pre><span>  24:<\/span> <span>REM [DESTDIR]   - Optional - Destination Directory<\/span><\/pre>\n<pre><span>  25:<\/span> <span>REM<\/span><\/pre>\n<pre><span>  26:<\/span> <span>REM Written by Roy\/SAC in 2009<\/span><\/pre>\n<pre><span>  27:<\/span> <span>REM <\/span><\/pre>\n<pre><span>  28:<\/span> <span>REM ============================================================<\/span><\/pre>\n<pre><span>  29:<\/span>  <\/pre>\n<pre><span>  30:<\/span> <span>REM Backup original directory location<\/span><\/pre>\n<pre><span>  31:<\/span> <span>SET<\/span> ORG=%CD%<\/pre>\n<pre><span>  32:<\/span>  <\/pre>\n<pre><span>  33:<\/span> <span>REM If no source directory is specified<\/span><\/pre>\n<pre><span>  34:<\/span> <span>REM use current directory location as source<\/span><\/pre>\n<pre><span>  35:<\/span> <span>IF<\/span> <span>\"%~1\"<\/span>==<span>\"\"<\/span> (<\/pre>\n<pre><span>  36:<\/span>   <span>SET<\/span> SROOT=%CD%<\/pre>\n<pre><span>  37:<\/span> ) <span>ELSE<\/span> (<\/pre>\n<pre><span>  38:<\/span>   <span>SET<\/span> SROOT=%~1<\/pre>\n<pre><span>  39:<\/span> )<\/pre>\n<pre><span>  40:<\/span> <span>REM If no destination directory is specified<\/span><\/pre>\n<pre><span>  41:<\/span> <span>REM use current directory as destination<\/span><\/pre>\n<pre><span>  42:<\/span> <span>IF<\/span> <span>\"%~2\"<\/span>==<span>\"\"<\/span> (<\/pre>\n<pre><span>  43:<\/span>   <span>SET<\/span> DROOT=%CD%<\/pre>\n<pre><span>  44:<\/span> ) <span>ELSE<\/span> (<\/pre>\n<pre><span>  45:<\/span>   <span>SET<\/span> DROOT=%~2<\/pre>\n<pre><span>  46:<\/span> )<\/pre>\n<pre><span>  47:<\/span>  <\/pre>\n<pre><span>  48:<\/span>  <\/pre>\n<pre><span>  49:<\/span> <span>REM Goto Source Directory<\/span><\/pre>\n<pre><span>  50:<\/span> CD \/D <span>\"%SROOT%\"<\/span><\/pre>\n<pre><span>  51:<\/span>  <\/pre>\n<pre><span>  52:<\/span> <span>REM Get all Sub-Folders in Source Directory<\/span><\/pre>\n<pre><span>  53:<\/span> <span>for<\/span> \/f <span>\"tokens=*\"<\/span> %%A <span>in<\/span> (<span>'DIR \/ON \/B \/AD *.* 2^>NUL') DO CALL :ACTION \"%%~A\"<\/span><\/pre>\n<pre><span>  54:<\/span>  <\/pre>\n<pre><span>  55:<\/span> <span>REM Return to Original Directory<\/span><\/pre>\n<pre><span>  56:<\/span> CD \/D <span>\"%ORG%\"<\/span><\/pre>\n<pre><span>  57:<\/span> ECHO ===============================================<\/pre>\n<pre><span>  58:<\/span> ECHO DONE! Window Closes Automatically <span>in<\/span> 10 Seconds<\/pre>\n<pre><span>  59:<\/span> ECHO ===============================================<\/pre>\n<pre><span>  60:<\/span> <span>GOTO<\/span> :ENDOFAPP<\/pre>\n<pre><span>  61:<\/span>  <\/pre>\n<pre><span>  62:<\/span> <span>REM ===========================================================<\/span><\/pre>\n<pre><span>  63:<\/span> <span>REM ACTION - Folder Processing<\/span><\/pre>\n<pre><span>  64:<\/span> <span>REM ===========================================================<\/span><\/pre>\n<pre><span>  65:<\/span> :ACTION<\/pre>\n<pre><span>  66:<\/span> <span>REM Extract Folder Name<\/span><\/pre>\n<pre><span>  67:<\/span> <span>SET<\/span> STR1=<span>\"%~nx1\"<\/span><\/pre>\n<pre><span>  68:<\/span>  <\/pre>\n<pre><span>  69:<\/span> <span>REM Extract First Letter of Folder Name<\/span><\/pre>\n<pre><span>  70:<\/span> <span>SET<\/span> <span>\"STR=%STR1:~1,1%\"<\/span><\/pre>\n<pre><span>  71:<\/span>  <\/pre>\n<pre><span>  72:<\/span> <span>REM Convert Letter to Upper Case<\/span><\/pre>\n<pre><span>  73:<\/span> <span>for<\/span> %%X <span>in<\/span> (<span>\"a=A\"<\/span> <span>\"b=B\"<\/span> <span>\"c=C\"<\/span> <span>\"d=D\"<\/span> <span>\"e=E\"<\/span> <span>\"f=F\"<\/span> <span>\"g=G\"<\/span> <span>\"h=H\"<\/span> <span>\"i=I\"<\/span><\/pre>\n<pre><span>  74:<\/span>             <span>\"j=J\"<\/span> <span>\"k=K\"<\/span> <span>\"l=L\"<\/span> <span>\"m=M\"<\/span> <span>\"n=N\"<\/span> <span>\"o=O\"<\/span> <span>\"p=P\"<\/span> <span>\"q=Q\"<\/span> <span>\"r=R\"<\/span><\/pre>\n<pre><span>  75:<\/span>             <span>\"s=S\"<\/span> <span>\"t=T\"<\/span> <span>\"u=U\"<\/span> <span>\"v=V\"<\/span> <span>\"w=W\"<\/span> <span>\"x=X\"<\/span> <span>\"y=Y\"<\/span> <span>\"z=Z\"<\/span>) <span>do<\/span> (<\/pre>\n<pre><span>  76:<\/span>     <span>call<\/span> <span>set<\/span> <span>\"STR=%%STR:%%~X%%\"<\/span><\/pre>\n<pre><span>  77:<\/span> )<\/pre>\n<pre><span>  78:<\/span>  <\/pre>\n<pre><span>  79:<\/span> <span>REM Jump to destination directory<\/span><\/pre>\n<pre><span>  80:<\/span> CD \/D <span>\"%DROOT%\"<\/span><\/pre>\n<pre><span>  81:<\/span>  <\/pre>\n<pre><span>  82:<\/span> <span>REM If letter directory does not exist, create it<\/span><\/pre>\n<pre><span>  83:<\/span> <span>IF<\/span> <span>NOT<\/span> exist <span>\"%STR%\"<\/span> MD <span>\"%STR%\"<\/span><\/pre>\n<pre><span>  84:<\/span>  <\/pre>\n<pre><span>  85:<\/span> <span>REM Jump into letter directory<\/span><\/pre>\n<pre><span>  86:<\/span> CD \/D <span>\"%DROOT%\\%STR%\"<\/span><\/pre>\n<pre><span>  87:<\/span>  <\/pre>\n<pre><span>  88:<\/span> <span>REM If target directory does not exist, create it<\/span><\/pre>\n<pre><span>  89:<\/span> <span>IF<\/span> <span>NOT<\/span> exist <span>\"%~nx1\"<\/span> MD <span>\"%~nx1\"<\/span><\/pre>\n<pre><span>  90:<\/span>  <\/pre>\n<pre><span>  91:<\/span> <span>REM copy all files and subfolders from source to target directory<\/span><\/pre>\n<pre><span>  92:<\/span> XCOPY \/S \/E <span>\"%SROOT%\\%~nx1\\*.*\"<\/span> <span>\"%DROOT%\\%STR%\\%~nx1\"<\/span> 2>NUL <\/pre>\n<pre><span>  93:<\/span>  <\/pre>\n<pre><span>  94:<\/span> <span>REM Jump to source directory<\/span><\/pre>\n<pre><span>  95:<\/span> CD \/D <span>\"%SROOT%\\%~nx1\"<\/span><\/pre>\n<pre><span>  96:<\/span>  <\/pre>\n<pre><span>  97:<\/span> <span>REM Delete all files in source directory<\/span><\/pre>\n<pre><span>  98:<\/span> DEL \/S \/Q *.* 2>NUL<\/pre>\n<pre><span>  99:<\/span>  <\/pre>\n<pre><span> 100:<\/span> <span>REM Jump to root source directory<\/span><\/pre>\n<pre><span> 101:<\/span> CD \/D <span>\"%SROOT%\"<\/span><\/pre>\n<pre><span> 102:<\/span>  <\/pre>\n<pre><span> 103:<\/span> <span>REM Remove source directory and its sub directories<\/span><\/pre>\n<pre><span> 104:<\/span> RMDIR \/S \/Q <span>\"%~nx1\"<\/span> 2>NUL<\/pre>\n<pre><span> 105:<\/span> <span>GOTO<\/span> :EOF<\/pre>\n<pre><span> 106:<\/span>  <\/pre>\n<pre><span> 107:<\/span>  <\/pre>\n<pre><span> 108:<\/span> <span>REM ===========================================================<\/span><\/pre>\n<pre><span> 109:<\/span> <span>REM End of App - Script closes automatically after 10 seconds<\/span><\/pre>\n<pre><span> 110:<\/span> <span>REM ===========================================================<\/span><\/pre>\n<pre><span> 111:<\/span> :ENDOFAPP<\/pre>\n<pre><span> 112:<\/span>  <\/pre>\n<pre><span> 113:<\/span> <span>FOR<\/span> \/l %%a <span>in<\/span> (10,-1,1) <span>do<\/span> (<\/pre>\n<pre><span> 114:<\/span>   TITLE %title% -- closing <span>in<\/span> %%<span>as<\/span>&ping -n 2 -w 1 127.0.0.1>NUL<\/pre>\n<pre><span> 115:<\/span> )<\/pre>\n<pre><span> 116:<\/span> TITLE Press any key <span>to<\/span> close the application&ECHO.<\/pre>\n<\/div>\n<\/div>\n<p><\/p>\n<h3>MoveToAlphabetSubFolders.bat<\/h3>\n<p><\/p>\n<p>This script simply moves files in a folder to sub folders with the first letter as name. For example, if you have a folder with the following files:<\/p>\n<p>Ackerlight1.mod <br \/>Backlash1.mod<\/p>\n<p>The script will move them to subfolders like this:<\/p>\n<p>A<br \/>   Ackerlight1.mod<br \/>B<br \/>   Backlash1.mod<\/p>\n<p>Note: this version of the script overwrites files with the same name in the destination folder. Check out the script below, which does the same as this script, but does not overwrite files in the destination directory.<\/p>\n<p><\/p>\n<div>\n<div class=\"code\">\n<pre><span>   1:<\/span> @ECHO OFF<\/pre>\n<pre><span>   2:<\/span> CLS<\/pre>\n<pre><span>   3:<\/span> <span>IF<\/span> <span>NOT<\/span> {%1}=={} (<\/pre>\n<pre><span>   4:<\/span>   CD \/d <span>\"%~1\"<\/span><\/pre>\n<pre><span>   5:<\/span> )<\/pre>\n<pre><span>   6:<\/span> ECHO Processing Folder: %CD%<\/pre>\n<pre><span>   7:<\/span>  <\/pre>\n<pre><span>   8:<\/span> <span>FOR<\/span> %%f <span>IN<\/span> (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z REST) <span>DO<\/span> <\/pre>\n<pre>       <span>CALL<\/span> :MoveFiles <span>\"%%f\"<\/span><\/pre>\n<pre><span>   9:<\/span> <span>GOTO<\/span> :EOF<\/pre>\n<pre><span>  10:<\/span>  <\/pre>\n<pre><span>  11:<\/span> :MoveFiles<\/pre>\n<pre><span>  12:<\/span> ECHO Processing: %1 ...<\/pre>\n<pre><span>  13:<\/span> <span>IF<\/span> %1==<span>\"REST\"<\/span> <span>Goto<\/span> :MoveRest<\/pre>\n<pre><span>  14:<\/span> <span>IF<\/span> <span>NOT<\/span> EXIST %1 MD %1<\/pre>\n<pre><span>  15:<\/span> <span>REM FOR %%f IN (%1*) DO MOVE \"%%f\" %1>NUL<\/span><\/pre>\n<pre><span>  16:<\/span> move %1* %1\\ >NUL 2>&1<\/pre>\n<pre><span>  17:<\/span> <span>GOTO<\/span> :EOF<\/pre>\n<pre><span>  18:<\/span>  <\/pre>\n<pre><span>  19:<\/span> :MoveRest<\/pre>\n<pre><span>  20:<\/span> <span>IF<\/span> <span>NOT<\/span> EXIST 0-9 MD 0-9<\/pre>\n<pre><span>  21:<\/span> MOVE * 0-9>NUL<\/pre>\n<pre><span>  22:<\/span> <span>GOTO<\/span> :EOF<\/pre>\n<\/div>\n<\/div>\n<p><\/p>\n<h3>MoveToAlphabetSubFoldersWithoutOverwrite.bat<\/h3>\n<p><\/p>\n<p>This script does the same as the one above with the difference that this script does not overwrite files with the same name that already exist in the destination directory.<\/p>\n<p><\/p>\n<div>\n<div class=\"code\">\n<pre><span>   1:<\/span> @ECHO OFF<\/pre>\n<pre><span>   2:<\/span> CLS<\/pre>\n<pre><span>   3:<\/span> <span>IF<\/span> <span>NOT<\/span> {%1}=={} (<\/pre>\n<pre><span>   4:<\/span>   CD \/d <span>\"%~1\"<\/span><\/pre>\n<pre><span>   5:<\/span> )<\/pre>\n<pre><span>   6:<\/span> ECHO Processing Folder: %CD%<\/pre>\n<pre><span>   7:<\/span> ECHO ------------------------------------------------------------------------------------------<\/pre>\n<pre><span>   8:<\/span> <span>FOR<\/span> %%f <span>IN<\/span> (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z REST) <span>DO<\/span> <\/pre>\n<pre>        <span>CALL<\/span> :MoveFiles <span>\"%%f\"<\/span><\/pre>\n<pre><span>   9:<\/span> ECHO ------------------------------------------------------------------------------------------<\/pre>\n<pre><span>  10:<\/span> ECHO Done!<\/pre>\n<pre><span>  11:<\/span> ECHO.<\/pre>\n<pre><span>  12:<\/span> PAUSE<\/pre>\n<pre><span>  13:<\/span> <span>GOTO<\/span> :EOF<\/pre>\n<pre><span>  14:<\/span>  <\/pre>\n<pre><span>  15:<\/span> :MoveFiles<\/pre>\n<pre><span>  16:<\/span> ECHO Processing: %1 ...<\/pre>\n<pre><span>  17:<\/span> <span>IF<\/span> %1==<span>\"REST\"<\/span> <span>Goto<\/span> :MoveRest<\/pre>\n<pre><span>  18:<\/span> <span>IF<\/span> <span>NOT<\/span> EXIST %1 MD %1<\/pre>\n<pre><span>  19:<\/span> <span>REM FOR %%f IN (%1*) DO MOVE \"%%f\" %1\\ >NUL 2>&1<\/span><\/pre>\n<pre><span>  20:<\/span> Echo N|move \/-Y %1* %1\\ >NUL 2>&1<\/pre>\n<pre><span>  21:<\/span> RmDir <span>\"%1\"<\/span>>NUL 2>&1<\/pre>\n<pre><span>  22:<\/span> <span>GOTO<\/span> :EOF<\/pre>\n<pre><span>  23:<\/span>  <\/pre>\n<pre><span>  24:<\/span> :MoveFiles2<\/pre>\n<pre><span>  25:<\/span> Echo N|move \/-Y %1* 0-9\\ >NUL 2>&1<\/pre>\n<pre><span>  26:<\/span> <span>GOTO<\/span> :EOF<\/pre>\n<pre><span>  27:<\/span>  <\/pre>\n<pre><span>  28:<\/span> :MoveRest<\/pre>\n<pre><span>  29:<\/span> <span>IF<\/span> <span>NOT<\/span> EXIST 0-9 MD 0-9<\/pre>\n<pre><span>  30:<\/span> <span>FOR<\/span> %%a <span>IN<\/span> (0 1 2 3 4 5 6 7 8 9 # $ % ~ ! ^ & ( ) - _ + = [ ] { } <span>' ; , `) DO <\/span><\/pre>\n<pre><span>       CALL :MoveFiles2 \"%%a\"<\/span><\/pre>\n<pre><span>  31:<\/span> RmDir <span>\"0-9\"<\/span>>NUL 2>&1<\/pre>\n<pre><span>  32:<\/span> <span>GOTO<\/span> :EOF<\/pre>\n<\/div>\n<\/div>\n<p><\/p>\n<h3>MoveToSubFoldersByExt.bat<\/h3>\n<p><\/p>\n<p>This script requires also the .VBS script ???Extensions.vbs??? (see below). <\/p>\n<p>It sorts files away into sub directories with the extension name. I used it to sort away tracker modules by file format. For example:<\/p>\n<p>   Ackerlight1.mod<br \/>   Backlash1.xm<\/p>\n<p>Would be moved into folders like this:<\/p>\n<p>   MOD<br \/>       Ackerlight1.mod<\/p>\n<p>   XM<br \/>       Backlash1.xm<\/p>\n<p><\/p>\n<div>\n<div class=\"code\">\n<pre><span>   1:<\/span> @ECHO OFF<\/pre>\n<pre><span>   2:<\/span> CLS<\/pre>\n<pre><span>   3:<\/span> <span>IF<\/span> <span>NOT<\/span> {%1}=={} (<\/pre>\n<pre><span>   4:<\/span>   CD \/d <span>\"%~1\"<\/span><\/pre>\n<pre><span>   5:<\/span> )<\/pre>\n<pre><span>   6:<\/span> <span>Set<\/span> WorkP=%CD%<\/pre>\n<pre><span>   7:<\/span> ECHO Processing Folder: %WorkP%!<\/pre>\n<pre><span>   8:<\/span> <span>Call<\/span> :GetScrPath <span>\"extensions.vbs\"<\/span><\/pre>\n<pre><span>   9:<\/span> Echo [%CmdL%]<\/pre>\n<pre><span>  10:<\/span> <span>FOR<\/span> \/F %%f <span>IN<\/span> (<span>'%CmdL%') DO CALL :MoveFiles \"%%f\"<\/span><\/pre>\n<pre><span>  11:<\/span> <span>Call<\/span> :MoveRest<\/pre>\n<pre><span>  12:<\/span> <span>GOTO<\/span> :EOF<\/pre>\n<pre><span>  13:<\/span>  <\/pre>\n<pre><span>  14:<\/span> :MoveFiles<\/pre>\n<pre><span>  15:<\/span> <span>IF<\/span> <span>NOT<\/span> EXIST <span>\"%~1\"<\/span> MD <span>\"%~1\"<\/span><\/pre>\n<pre><span>  16:<\/span> <span>FOR<\/span> %%f <span>IN<\/span> (*.%~1) <span>DO<\/span> MOVE <span>\"%%f\"<\/span> <span>\"%~1\\\"<\/span>>NUL 2>&1<\/pre>\n<pre><span>  17:<\/span> <span>GOTO<\/span> :EOF<\/pre>\n<pre><span>  18:<\/span>  <\/pre>\n<pre><span>  19:<\/span> :MoveRest<\/pre>\n<pre><span>  20:<\/span> <span>IF<\/span> <span>NOT<\/span> EXIST <span>\"NoExtension\"<\/span> MD <span>\"NoExtension\"<\/span><\/pre>\n<pre><span>  21:<\/span> MOVE <span>\"*.\"<\/span> <span>\"NoExtension\\\"<\/span>>NUL 2>&1<\/pre>\n<pre><span>  22:<\/span> RmDir <span>\"NoExtension\"<\/span>>NUL 2>&1<\/pre>\n<pre><span>  23:<\/span> <span>GOTO<\/span> :EOF<\/pre>\n<pre><span>  24:<\/span>  <\/pre>\n<pre><span>  25:<\/span>  <\/pre>\n<pre><span>  26:<\/span> :GetScrPath<\/pre>\n<pre><span>  27:<\/span> <span>Set<\/span> CmdL=cscript.exe \/nologo <span>\"%~$PATH:1\"<\/span> <span>\"%WorkP%\"<\/span><\/pre>\n<pre><span>  28:<\/span> <span>GOTO<\/span> :EOF<\/pre>\n<\/div>\n<\/div>\n<p><\/p>\n<h3>extensions.vbs<\/h3>\n<p><\/p>\n<p>This is a supporting script for the batch script ???MoveToSubFoldersByExt.bat???. It returns a list of all file extensions for the files in the provided directory location.<\/p>\n<p><\/p>\n<div><\/p>\n<div class=\"code\">\n<pre><span>   1:<\/span> <span>Dim<\/span> objCmdlineArguments: <span>Set<\/span> objCmdlineArguments = Wscript.Arguments<\/pre>\n<pre><span>   2:<\/span> <span>Dim<\/span> oFso: <span>Set<\/span> oFso = CreateObject(<span>\"Scripting.FileSystemObject\"<\/span>)<\/pre>\n<pre><span>   3:<\/span> <span>Dim<\/span> oFile, oFolder, sPath<\/pre>\n<pre><span>   4:<\/span> <span>Dim<\/span> sExt, a, aExt<\/pre>\n<pre><span>   5:<\/span> <span>Dim<\/span> sExtensions: sExtensions=<span>\"\"<\/span><\/pre>\n<pre><span>   6:<\/span>  <\/pre>\n<pre><span>   7:<\/span>  <\/pre>\n<pre><span>   8:<\/span> <span>If<\/span> objCmdlineArguments.Unnamed.Count > 0 <span>then<\/span><\/pre>\n<pre><span>   9:<\/span>    sPath = objCmdlineArguments.Unnamed(0)<\/pre>\n<pre><span>  10:<\/span>    <span>If<\/span> <span>Not<\/span> oFso.FolderExists(sPath) <span>Then<\/span><\/pre>\n<pre><span>  11:<\/span>       sPath = oFso.GetAbsolutePathName(<span>\".\"<\/span>)<\/pre>\n<pre><span>  12:<\/span>    <span>End<\/span> <span>If<\/span><\/pre>\n<pre><span>  13:<\/span> <span>Else<\/span><\/pre>\n<pre><span>  14:<\/span>    sPath = oFso.GetAbsolutePathName(<span>\".\"<\/span>)<\/pre>\n<pre><span>  15:<\/span> <span>End<\/span> <span>If<\/span><\/pre>\n<pre><span>  16:<\/span>  <\/pre>\n<pre><span>  17:<\/span> <span>Set<\/span> oFolder = oFSO.GetFolder(sPath)<\/pre>\n<pre><span>  18:<\/span>  <\/pre>\n<pre><span>  19:<\/span> <span>'Process Files in Folder<\/span><\/pre>\n<pre><span>  20:<\/span> <span>For<\/span> <span>each<\/span> oFile <span>in<\/span> oFolder.Files<\/pre>\n<pre><span>  21:<\/span>    sExt = LCase(oFso.GetExtensionName(oFile.Name))<\/pre>\n<pre><span>  22:<\/span>    <span>If<\/span> sExt <> <span>\"\"<\/span> <span>And<\/span> InStr(1,sExtensions,sExt & <span>\"|\"<\/span>,1) = 0 <span>Then<\/span><\/pre>\n<pre><span>  23:<\/span>       sExtensions = sExtensions & sExt & <span>\"|\"<\/span><\/pre>\n<pre><span>  24:<\/span>    <span>End<\/span> <span>If<\/span><\/pre>\n<pre><span>  25:<\/span> <span>Next<\/span><\/pre>\n<pre><span>  26:<\/span>  <\/pre>\n<pre><span>  27:<\/span> <span>If<\/span> sExtensions <> <span>\"\"<\/span> <span>Then<\/span><\/pre>\n<pre><span>  28:<\/span>   sExtensions = Left(sExtensions,Len(sExtensions)-1)<\/pre>\n<pre><span>  29:<\/span>   <span>If<\/span> InStr(1,sExtensions,<span>\"|\"<\/span>,1) > 0 <span>Then<\/span><\/pre>\n<pre><span>  30:<\/span>     aExt = Split(sExtensions,<span>\"|\"<\/span>)<\/pre>\n<pre><span>  31:<\/span>     sExtensions=<span>\"\"<\/span><\/pre>\n<pre><span>  32:<\/span>     QSort aExt, LBound(aExt), UBound(aExt)   <\/pre>\n<pre><span>  33:<\/span>     <span>For<\/span> a = 0 <span>To<\/span> UBound(aExt) <\/pre>\n<pre><span>  34:<\/span>       <span>If<\/span> aExt(a) <> <span>\"\"<\/span> <span>Then<\/span><\/pre>\n<pre><span>  35:<\/span>         sExtensions = Join(aExt,vbcrlf)<\/pre>\n<pre><span>  36:<\/span>        <span>End<\/span> <span>If<\/span><\/pre>\n<pre><span>  37:<\/span>     <span>Next<\/span><\/pre>\n<pre><span>  38:<\/span>   <span>End<\/span> <span>If<\/span><\/pre>\n<pre><span>  39:<\/span>   WScript.Echo sExtensions   <\/pre>\n<pre><span>  40:<\/span> <span>End<\/span> <span>If<\/span><\/pre>\n<pre><span>  41:<\/span>   <\/pre>\n<pre><span>  42:<\/span> <span>Set<\/span> oFolder = <span>Nothing<\/span><\/pre>\n<pre><span>  43:<\/span> <span>Set<\/span> ofso = <span>Nothing<\/span><\/pre>\n<pre><span>  44:<\/span>  <\/pre>\n<pre><span>  45:<\/span>  <\/pre>\n<pre><span>  46:<\/span> <span>Sub<\/span> QSort(aData, iaDataMin, iaDataMax)<\/pre>\n<pre><span>  47:<\/span>   <span>Dim<\/span> Temp <\/pre>\n<pre><span>  48:<\/span>   <span>Dim<\/span> Buffer <\/pre>\n<pre><span>  49:<\/span>   <span>Dim<\/span> iaDataFirst<\/pre>\n<pre><span>  50:<\/span>   <span>Dim<\/span> iaDataLast<\/pre>\n<pre><span>  51:<\/span>   <span>Dim<\/span> iaDataMid<\/pre>\n<pre><span>  52:<\/span>  <\/pre>\n<pre><span>  53:<\/span>   iaDataFirst = iaDataMin          <span>' Start current low and high at actual low\/high<\/span><\/pre>\n<pre><span>  54:<\/span>   iaDataLast = iaDataMax<\/pre>\n<pre><span>  55:<\/span>  <\/pre>\n<pre><span>  56:<\/span>   <span>If<\/span> iaDataMax < = iaDataMin <span>Then <span>Exit<\/span> <span>Sub<\/span>        <span>' Error!  <\/span><\/pre>\n<pre><span>  57:<\/span>   iaDataMid = (iaDataMin + iaDataMax) \\ 2   <span>' Find the approx midpoint of the array<\/span><\/pre>\n<pre><span>  58:<\/span>  <\/pre>\n<pre><span>  59:<\/span>   Temp = aData(iaDataMid)                 <span>' Pick as a starting point (we are making<\/span><\/pre>\n<pre><span>  60:<\/span>                                           <span>' an assumption that the data *might* be<\/span><\/pre>\n<pre><span>  61:<\/span>                                           <span>' in semi-sorted order already!<\/span><\/pre>\n<pre><span>  62:<\/span>  <\/pre>\n<pre><span>  63:<\/span>   <span>Do<\/span> <span>While<\/span> (iaDataFirst < = iaDataLast)<\/pre>\n<pre><span>  64:<\/span>       <span>'Comparison here<\/span><\/pre>\n<pre><span>  65:<\/span>         <span>Do<\/span> <span>While<\/span> aData(iaDataFirst) < Temp<\/pre>\n<pre><span>  66:<\/span>           iaDataFirst = iaDataFirst + 1<\/pre>\n<pre><span>  67:<\/span>           <span>If<\/span> iaDataFirst = iaDataMax <span>Then<\/span> <span>Exit<\/span> <span>Do<\/span><\/pre>\n<pre><span>  68:<\/span>       <span>Loop<\/span><\/pre>\n<pre><span>  69:<\/span>  <\/pre>\n<pre><span>  70:<\/span>       <span>'Comparison here<\/span><\/pre>\n<pre><span>  71:<\/span>        <span>Do<\/span> <span>While<\/span> Temp < aData(iaDataLast)<\/pre>\n<pre><span>  72:<\/span>           iaDataLast = iaDataLast - 1<\/pre>\n<pre><span>  73:<\/span>           <span>If<\/span> iaDataLast = iaDataMin <span>Then<\/span> <span>Exit<\/span> <span>Do<\/span><\/pre>\n<pre><span>  74:<\/span>       <span>Loop<\/span><\/pre>\n<pre><span>  75:<\/span>  <\/pre>\n<pre><span>  76:<\/span>       <span>If<\/span> (iaDataFirst < = iaDataLast) <span>Then        <span>' if low is < = high then swap<\/span><\/span><\/pre>\n<pre><span>  77:<\/span>           Buffer = aData(iaDataFirst)<\/pre>\n<pre><span>  78:<\/span>           aData(iaDataFirst) = aData(iaDataLast)<\/pre>\n<pre><span>  79:<\/span>           aData(iaDataLast) = Buffer<\/pre>\n<pre><span>  80:<\/span>           iaDataFirst = iaDataFirst + 1  <\/pre>\n<pre><span>  81:<\/span>           iaDataLast = iaDataLast - 1 <\/pre>\n<pre><span>  82:<\/span>       <span>End<\/span> <span>If<\/span><\/pre>\n<pre><span>  83:<\/span>   <span>Loop<\/span><\/pre>\n<pre><span>  84:<\/span>  <\/pre>\n<pre><span>  85:<\/span>   <span>If<\/span> iaDataMin < iaDataLast <span>Then                 <span>' Recurse if necessary<\/span><\/pre>\n<pre><span>  86:<\/span>       QSort aData, iaDataMin, iaDataLast<\/pre>\n<pre><span>  87:<\/span>   <span>End<\/span> <span>If<\/span><\/pre>\n<pre><span>  88:<\/span>  <\/pre>\n<pre><span>  89:<\/span>   <span>If<\/span> iaDataFirst < iaDataMax <span>Then                <span>' Recurse if necessary<\/span><\/pre>\n<pre><span>  90:<\/span>       QSort aData, iaDataFirst, iaDataMax<\/pre>\n<pre><span>  91:<\/span>   <span>End<\/span> <span>If<\/span><\/pre>\n<pre><span>  92:<\/span>  <\/pre>\n<pre><span>  93:<\/span> <span>End<\/span> <span>Sub<\/span> <span>'QSort<\/span><\/pre>\n<\/div>\n<\/div>\n<p><\/p>\n<h3>MP3FileSort2Dirs.bat<\/h3>\n<p><\/p>\n<p>I published this batch script already on my blog. It sorts MP3 files away to sub directories by artist name, assuming that the MP3 files start with the artist name followed by a ???-??? character (then followed by the song title for example).<\/p>\n<div>\n<div class=\"code\">\n<pre><span>   1:<\/span> @echo off<\/pre>\n<pre><span>   2:<\/span> :: -------------------------------------------------------<\/pre>\n<pre><span>   3:<\/span> :: MP3 Cleanup\/Sorting Batch Script<\/pre>\n<pre><span>   4:<\/span> :: ------------------------------------------------------- <\/pre>\n<pre><span>   5:<\/span> :: 1. looks <span>for<\/span> MP3 files <span>in<\/span> current directory<\/pre>\n<pre><span>   6:<\/span> :: 2. looks <span>for<\/span> <span>\"-\"<\/span> <span>in<\/span> file name (assumed <span>to<\/span> be <\/pre>\n<pre><span>   7:<\/span> ::    the separator between Artist Name <span>and<\/span> Song Title)<\/pre>\n<pre><span>   8:<\/span> :: 3. parses <span>string<\/span> before first <span>\"-\"<\/span>, trims trailing spaces<\/pre>\n<pre><span>   9:<\/span> :: 4. checks <span>if<\/span> directory <span>with<\/span> that name exists<\/pre>\n<pre><span>  10:<\/span> ::   4.1 <span>If<\/span> <span>not<\/span>, it creates it (artist name)<\/pre>\n<pre><span>  11:<\/span> :: 5. moves file into the directory<\/pre>\n<pre><span>  12:<\/span> :: <\/pre>\n<pre><span>  13:<\/span> :: Batch Script by Carsten Cumbrowski aka Roy\/SAC<\/pre>\n<pre><span>  14:<\/span> :: visit http:\/\/www.roysac.com<\/pre>\n<pre><span>  15:<\/span>  <\/pre>\n<pre><span>  16:<\/span> setlocal enabledelayedexpansion<\/pre>\n<pre><span>  17:<\/span> cls<\/pre>\n<pre><span>  18:<\/span> ::only list files <span>with<\/span> extension MP3, exclude directories<\/pre>\n<pre><span>  19:<\/span> <span>for<\/span> \/f <span>\"tokens=*\"<\/span> %%A <span>in<\/span> (<span>'DIR \/A-D \/ON \/B \"*.MP3\"^|SORT \/REVERSE') do (<\/span><\/pre>\n<pre><span>  20:<\/span>   <span>call<\/span> :PERFACTION <span>\"%%~A%\"<\/span><\/pre>\n<pre><span>  21:<\/span> )<\/pre>\n<pre><span>  22:<\/span> echo.<\/pre>\n<pre><span>  23:<\/span> echo Done!<\/pre>\n<pre><span>  24:<\/span> echo.<\/pre>\n<pre><span>  25:<\/span> pause<\/pre>\n<pre><span>  26:<\/span> <span>goto<\/span> :EOF<\/pre>\n<pre><span>  27:<\/span>  <\/pre>\n<pre><span>  28:<\/span>  <\/pre>\n<pre><span>  29:<\/span> :PERFACTION<\/pre>\n<pre><span>  30:<\/span> ::look <span>for<\/span> dash <span>in<\/span> file name, parse str before dash<\/pre>\n<pre><span>  31:<\/span> <span>for<\/span> \/F <span>\"tokens=1 delims=-\"<\/span> %%B <span>in<\/span> (<span>\"%~1\"<\/span>) <span>do<\/span> (<\/pre>\n<pre><span>  32:<\/span> ::trim trailing spaces from parsed <span>string<\/span>  <\/pre>\n<pre><span>  33:<\/span>     <span>set<\/span> str=%%~B%<\/pre>\n<pre><span>  34:<\/span>     <span>for<\/span> \/l %%a <span>in<\/span> (1,1,31) <span>do<\/span> <span>if<\/span> <span>\"!str:~-1!\"<\/span>==<span>\" \"<\/span> <span>set<\/span> str=!str:~0,-1!<\/pre>\n<pre><span>  35:<\/span> )<\/pre>\n<pre><span>  36:<\/span> <span>call<\/span> :PROCFILE <span>\"%str%\"<\/span><\/pre>\n<pre><span>  37:<\/span> <span>goto<\/span> :EOF<\/pre>\n<pre><span>  38:<\/span>  <\/pre>\n<pre><span>  39:<\/span>  <\/pre>\n<pre><span>  40:<\/span> :PROCFILE<\/pre>\n<pre><span>  41:<\/span> ::check of directory exists <span>and<\/span> move file<\/pre>\n<pre><span>  42:<\/span> <span>set<\/span> f2=<span>\"%~1\"<\/span><\/pre>\n<pre><span>  43:<\/span> <span>if<\/span> {%~x1}=={} (<\/pre>\n<pre><span>  44:<\/span>    echo %f2%<\/pre>\n<pre><span>  45:<\/span>    <span>if<\/span> <span>NOT<\/span> exist %f2%  MD %f2%<\/pre>\n<pre><span>  46:<\/span>    move <span>\"%~1*.MP3\"<\/span> %f2%<\/pre>\n<pre><span>  47:<\/span> )<\/pre>\n<pre><span>  48:<\/span> <span>goto<\/span> :EOF<\/pre>\n<pre><span>  49:<\/span>  <\/pre>\n<pre><span>  50:<\/span>  <\/pre>\n<\/div>\n<\/div>\n<p><\/p>\n<h3>MoveFilesAutoRenDup.vbs<\/h3>\n<p><\/p>\n<p>This script copies all files from a source directory, including its subfolders to a destination directory without any subfolders. Since the subfolders of the source might contain files with the same name (such as file_id.diz files), this script automatically renames those files, appending [2] to the first duplicate, [3] to the next and so on.<\/p>\n<p><\/p>\n<div>\n<div class=\"code\">\n<pre><span>   1:<\/span> <span>Dim<\/span> FSO: <span>Set<\/span> FSO = CreateObject(<span>\"Scripting.FileSystemObject\"<\/span>)<\/pre>\n<pre><span>   2:<\/span> <span>Dim<\/span> arguments: <span>Set<\/span> arguments = Wscript.arguments<\/pre>\n<pre><span>   3:<\/span> <span>Const<\/span> ForAppending = 8, ForReading = 1, ForWriting = 2<\/pre>\n<pre><span>   4:<\/span>  <\/pre>\n<pre><span>   5:<\/span> <span>Dim<\/span> sTo<\/pre>\n<pre><span>   6:<\/span> <span>Dim<\/span> sFrom<\/pre>\n<pre><span>   7:<\/span>  <\/pre>\n<pre><span>   8:<\/span> <span>if<\/span> arguments.unnamed.count = 0 <span>then<\/span><\/pre>\n<pre><span>   9:<\/span>   sFrom = <span>\"N*A\"<\/span><\/pre>\n<pre><span>  10:<\/span>   <span>Do<\/span> <span>While<\/span> sFrom <> <span>\"\"<\/span> <span>and<\/span> FSO.FolderExists(sFrom) = <span>false<\/span><\/pre>\n<pre><span>  11:<\/span>   sFrom = InputBox(<span>\"Move All Files and Auto Rename Dupes\"<\/span>, _<\/pre>\n<pre><span>  12:<\/span>           <span>\"Enter Source Directory: \"<\/span>, fso.GetAbsolutePathName(<span>\".\"<\/span>))<\/pre>\n<pre><span>  13:<\/span>   <span>Loop<\/span><\/pre>\n<pre><span>  14:<\/span>   <span>if<\/span> sFrom = <span>\"\"<\/span> <span>then<\/span><\/pre>\n<pre><span>  15:<\/span>      WScript.Quit(1)<\/pre>\n<pre><span>  16:<\/span>   <span>End<\/span> <span>if<\/span><\/pre>\n<pre><span>  17:<\/span> <span>else<\/span><\/pre>\n<pre><span>  18:<\/span>   sFrom = arguments.unnamed.Item(0)<\/pre>\n<pre><span>  19:<\/span> <span>end<\/span> <span>if<\/span><\/pre>\n<pre><span>  20:<\/span> <span>if<\/span> <span>not<\/span> FSO.FolderExists(sFROM) <span>then<\/span><\/pre>\n<pre><span>  21:<\/span>    WScript.Quit(2)<\/pre>\n<pre><span>  22:<\/span> <span>end<\/span> <span>if<\/span><\/pre>\n<pre><span>  23:<\/span>  <\/pre>\n<pre><span>  24:<\/span> <span>if<\/span> arguments.unnamed.count < = 1 <span>then<\/pre>\n<pre><span>  25:<\/span>   sTo=<span>\"N*A\"<\/span> <\/pre>\n<pre><span>  26:<\/span>   <span>Do<\/span> <span>While<\/span> sTo <> <span>\"\"<\/span> <span>and<\/span> FSO.FolderExists(sTo) = <span>false<\/span><\/pre>\n<pre><span>  27:<\/span>   sTo = InputBox(<span>\"Move All Files and Auto Rename Dupes\"<\/span>, _<\/pre>\n<pre><span>  28:<\/span>         <span>\"Source Directory: \"<\/span> & vbcrlf & sFrom & vbcrlf & _<\/pre>\n<pre><span>  29:<\/span>         <span>\"Enter Destination Directory: \"<\/span>, FSO.GetParentFolderName(sFrom))<\/pre>\n<pre><span>  30:<\/span>   <span>Loop<\/span><\/pre>\n<pre><span>  31:<\/span>   <span>if<\/span> sTo = <span>\"\"<\/span> <span>then<\/span><\/pre>\n<pre><span>  32:<\/span>      WScript.Quit(1)<\/pre>\n<pre><span>  33:<\/span>   <span>end<\/span> <span>if<\/span><\/pre>\n<pre><span>  34:<\/span> <span>else<\/span><\/pre>\n<pre><span>  35:<\/span>   sTo = arguments.unnamed.Item(1)<\/pre>\n<pre><span>  36:<\/span> <span>end<\/span> <span>if<\/span><\/pre>\n<pre><span>  37:<\/span> <span>if<\/span> <span>not<\/span> FSO.FolderExists(sTo) <span>then<\/span><\/pre>\n<pre><span>  38:<\/span>    WScript.Quit(2)<\/pre>\n<pre><span>  39:<\/span> <span>end<\/span> <span>if<\/span><\/pre>\n<pre><span>  40:<\/span>  <\/pre>\n<pre><span>  41:<\/span>  <\/pre>\n<pre><span>  42:<\/span>  <\/pre>\n<pre><span>  43:<\/span>  <\/pre>\n<pre><span>  44:<\/span> <span>Dim<\/span> iFilesCount: iFilesCount  = 1<\/pre>\n<pre><span>  45:<\/span> <span>Dim<\/span>  sSrc, sDest, DC, sExt, sBase, oFOld<\/pre>\n<pre><span>  46:<\/span>  <\/pre>\n<pre><span>  47:<\/span> <span>Set<\/span> oFold = FSO.GetFolder(sFrom)<\/pre>\n<pre><span>  48:<\/span>  <\/pre>\n<pre><span>  49:<\/span> <span>if<\/span> lcase(sTo) <> lcase(sFrom) <span>then<\/span><\/pre>\n<pre><span>  50:<\/span>   ShowFiles oFold.Path<\/pre>\n<pre><span>  51:<\/span> <span>end<\/span> <span>if<\/span><\/pre>\n<pre><span>  52:<\/span>  <\/pre>\n<pre><span>  53:<\/span> ShowSubFolders oFold<\/pre>\n<pre><span>  54:<\/span>  <\/pre>\n<pre><span>  55:<\/span> Wscript.echo iFilesCount  & <span>\" files moved\"<\/span><\/pre>\n<pre><span>  56:<\/span>  <\/pre>\n<pre><span>  57:<\/span>  <\/pre>\n<pre><span>  58:<\/span> <span>'========================================================<\/span><\/pre>\n<pre><span>  59:<\/span>  <\/pre>\n<pre><span>  60:<\/span> <span>Sub<\/span> ShowSubFolders(Folder)<\/pre>\n<pre><span>  61:<\/span> <span>Dim<\/span> SubFolder<\/pre>\n<pre><span>  62:<\/span>  <\/pre>\n<pre><span>  63:<\/span>     <span>For<\/span> <span>Each<\/span> Subfolder <span>in<\/span> Folder.SubFolders<\/pre>\n<pre><span>  64:<\/span>           ShowFiles Subfolder.Path<\/pre>\n<pre><span>  65:<\/span>           ShowSubFolders Subfolder<\/pre>\n<pre><span>  66:<\/span>     <span>Next<\/span><\/pre>\n<pre><span>  67:<\/span> <span>End<\/span> <span>Sub<\/span><\/pre>\n<pre><span>  68:<\/span>  <\/pre>\n<pre><span>  69:<\/span> <span>'----------------------------------------<\/span><\/pre>\n<pre><span>  70:<\/span> <span>Sub<\/span> ShowFiles(sPath)<\/pre>\n<pre><span>  71:<\/span> <span>Dim<\/span> oFile, oFolder<\/pre>\n<pre><span>  72:<\/span>  <\/pre>\n<pre><span>  73:<\/span>   iFolderCount = iFolderCount + 1<\/pre>\n<pre><span>  74:<\/span>   <span>Set<\/span> oFolder = FSO.GetFolder(sPath)<\/pre>\n<pre><span>  75:<\/span>   iFilesCount = iFilesCount + oFolder.Files.count<\/pre>\n<pre><span>  76:<\/span>  <\/pre>\n<pre><span>  77:<\/span>   <span>For<\/span> <span>each<\/span> oFile <span>in<\/span> oFolder.Files<\/pre>\n<pre><span>  78:<\/span>       sDest = FSO.BuildPath(sTo, oFile.Name)<\/pre>\n<pre><span>  79:<\/span>       sExt = FSO.GetExtensionName(sDest)<\/pre>\n<pre><span>  80:<\/span>       sBase = left(oFile.Name,len(oFile.name)-len(sExt)-1)<\/pre>\n<pre><span>  81:<\/span>       DC = 1<\/pre>\n<pre><span>  82:<\/span>       <span>Do<\/span> <span>While<\/span> FSO.FileExists(sDest) = <span>true<\/span><\/pre>\n<pre><span>  83:<\/span> <span>'           Wscript.sleep 500<\/span><\/pre>\n<pre><span>  84:<\/span>            DC = DC + 1<\/pre>\n<pre><span>  85:<\/span>            sDest = FSO.BuildPath(sTo, sBase & <span>\"[\"<\/span> & DC & <span>\"].\"<\/span> &  sExt)<\/pre>\n<pre><span>  86:<\/span>       <span>Loop<\/span><\/pre>\n<pre><span>  87:<\/span>       sSrc = FSO.GetAbsolutePathName(FSO.BuildPath(sPath,oFile.Name))<\/pre>\n<pre><span>  88:<\/span>  <\/pre>\n<pre><span>  89:<\/span>       FSO.MoveFile sSrc, sDest<\/pre>\n<pre><span>  90:<\/span>  <\/pre>\n<pre><span>  91:<\/span>   <span>Next<\/span><\/pre>\n<pre><span>  92:<\/span> <span>End<\/span> <span>Sub<\/span><\/pre>\n<pre><span>  93:<\/span>  <\/pre>\n<pre><span>  94:<\/span>  <\/pre>\n<\/div>\n<\/div>\n<p><\/p>\n<h3>CleanUp.bat<\/h3>\n<p><\/p>\n<p>I published this script also already. It simply checks all subdirectories of the provided path and removes all those that are empty (have no files).<\/p>\n<p><\/p>\n<div>\n<div class=\"code\">\n<pre><span>   1:<\/span> <span>REM CleanUp.bat<\/span><\/pre>\n<pre><span>   2:<\/span> @echo off<\/pre>\n<pre><span>   3:<\/span> <span>set<\/span> Folder=<span>\"%~1\"<\/span><\/pre>\n<pre><span>   4:<\/span> <span>if<\/span> %Folder%==<span>\"\"<\/span> @echo Syntax CleanUp Folder&<span>goto<\/span> :EOF<\/pre>\n<pre><span>   5:<\/span> <span>if<\/span> <span>not<\/span> exist %Folder% @echo Syntax CleanUp Folder - %Folder% <span>not<\/span> found.&<span>goto<\/span> :EOF<\/pre>\n<pre><span>   6:<\/span> CD \/D %Folder%<\/pre>\n<pre><span>   7:<\/span> Echo Processing Folder: %Folder%<\/pre>\n<pre><span>   8:<\/span> setlocal<\/pre>\n<pre><span>   9:<\/span> :: REMOVE EMPTY SUBFOLDERS<\/pre>\n<pre><span>  10:<\/span> <span>for<\/span> \/f <span>\"tokens=*\"<\/span> %%A <span>in<\/span> (<span>'dir \/ad \/s \/b *.* ^|Sort \/Reverse') do (<\/span><\/pre>\n<pre><span>  11:<\/span>  RmDir <span>\"%%A\"<\/span> 2>NUL<\/pre>\n<pre><span>  12:<\/span> )<\/pre>\n<pre><span>  13:<\/span> CD ..<\/pre>\n<pre><span>  14:<\/span> :: REMOVE FOLDER, <span>IF<\/span> EMPTY<\/pre>\n<pre><span>  15:<\/span> RmDir %Folder% 2>NUL<\/pre>\n<pre><span>  16:<\/span> endlocal<\/pre>\n<\/div>\n<\/div>\n<p><\/p>\n<p>All scripts are freeware, but you are using them at your own risk. I take no responsibility for any damages or losses that result directly or indirectly from the use of those scripts.<\/p>\n<p><\/p>\n<p>Again, you can download the source code of all scripts in this post here: <a href=\"http:\/\/www.roysac.com\/files\/Roy-FileProcScripts.zip\" target=\"_blank\">Roy-FileProcScripts.zip<\/a><\/p>\n<p><\/p>\n<p>Cheers!<\/p>\n<p><\/p>\n<p>Carsten aka Roy\/SAC<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Here is a collection of useful DOS BATCH and VBSCRIPT scripts for processing, moving, sorting of files. The code for all scripts can be downloaded in a single ZIP file called: Roy-FileProcScripts.zip The ZIP archive also contains a nice intro for RoySAC.com, which I recommend to check out :). ImageFilesSort2Dirs.bat IMAGES Cleanup\/Sorting Batch Script looks [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[],"class_list":["post-28","post","type-post","status-publish","format-standard","hentry","category-tools"],"_links":{"self":[{"href":"http:\/\/www.roysac.com\/blog\/wp-json\/wp\/v2\/posts\/28","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.roysac.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.roysac.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.roysac.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.roysac.com\/blog\/wp-json\/wp\/v2\/comments?post=28"}],"version-history":[{"count":3,"href":"http:\/\/www.roysac.com\/blog\/wp-json\/wp\/v2\/posts\/28\/revisions"}],"predecessor-version":[{"id":413,"href":"http:\/\/www.roysac.com\/blog\/wp-json\/wp\/v2\/posts\/28\/revisions\/413"}],"wp:attachment":[{"href":"http:\/\/www.roysac.com\/blog\/wp-json\/wp\/v2\/media?parent=28"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.roysac.com\/blog\/wp-json\/wp\/v2\/categories?post=28"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.roysac.com\/blog\/wp-json\/wp\/v2\/tags?post=28"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}