Welcome guest. Before posting on our computer help forum, you must register. Click here it's easy and free.

Author Topic: Create folder from partial filename and move files into that folder  (Read 14561 times)

0 Members and 1 Guest are viewing this topic.

Salmon Trout

  • Guest
Re: Create folder from partial filename and move files into that folder
« Reply #30 on: October 02, 2013, 03:48:11 PM »
Try this batch...

Code: [Select]
@echo off

REM Optional section start -------------------------------
REM Create Test files

echo hello > "New York A08Z06 Blue Train Horse Jeep Boat.doc"
echo hello > "New York A08Z06 Blue Train Horse Jeep Boat.xls"
echo hello > "New York A08Z07 Blue Train Horse Jeep Boat.doc"
echo hello > "New York A08Z07 Blue Train Horse Jeep Boat.xls"
echo hello > "New York A08Z08 Blue Train Horse Jeep Boat.doc"
echo hello > "New York A08Z08 Blue Train Horse Jeep Boat.xls"
echo hello > "New York A08Z09 Blue Train Horse Jeep Boat.doc"
echo hello > "New York A08Z09 Blue Train Horse Jeep Boat.xls"
echo hello > "New York A08Z06 Blue Horse Jeep Boat.doc"
echo hello > "New York A08Z06 Blue Horse Jeep Boat.xls"
echo hello > "New York A08Z07 Blue Horse Jeep Boat.doc"
echo hello > "New York A08Z08 Blue Horse Jeep Boat.xls"
echo hello > "New York A08Z09 Blue Horse Jeep Boat.doc"
echo hello > "New York A08Z09 Blue Horse Jeep Boat.xls"
echo hello > "Chicago A01Z01 Green Car Dog Train.doc"
echo hello > "Chicago A01Z01 Green Car Dog Train.xls"
echo hello > "Chicago A01Z02 Green Car Dog Train.xls"
echo hello > "Chicago A01Z02 Green Car Dog Train.doc"
echo hello > "Chicago A01Z03 Green Car Dog Train.xls"
echo hello > "Chicago A01Z03 Green Car Dog Train.doc"
echo hello > "Chicago A01Z01 Green Water Dog Train.doc"
echo hello > "Chicago A01Z02 Green Water Dog Train.doc"
echo hello > "Chicago A01Z03 Green Water Dog Train.doc"
echo hello > "Chicago A01Z04 Green Water Dog Train.doc"
echo hello > "Chicago A01Z05 Green Water Dog Train.doc"

REM These are bad file names
echo hello > "FailAlphaNumeric AB1Z03 Green Car Dog Train.xls"
echo hello > "FailAlphaNumeric AB1Z03 Green Car Dog Train.doc"
echo hello > "FailKeyWord A01Z03 Green Car Dog Bus.xls"
echo hello > "FailKeyWord A01Z03 Green Car Dog Bus.doc"
echo hello > "FailBoth AB1Z03 Green Car Dog Bus.xls"
echo hello > "FailBoth AB1Z03 Green Car Dog Bus.doc"
REM Optional section end -------------------------------

setlocal enabledelayedexpansion
for /f "delims=" %%A in ( 'dir /b *.doc; *.xls' ) do (
for /f "delims=" %%B in ('cscript //nologo Script.vbs "%%~nA"') do Set "Result=%%B"
if "!Result!"=="Bad Filename" (
    Echo Not moving file %%A
    ) else (
    If not exist "!Result!" md "!Result!"
    Echo Moving file     %%A to folder !Result!
    Move "%%A" "!Result!" > nul
    )
)
echo Complete
echo.
Pause

...which calls this VBscript... (Referred to as Script.vbs in the batch file above)

Note: In the keyword list, put longer phrases before shorter phrases using the same words or the words used singly thus:

"Large Red Book", "Red Book", "Book", "Red", "Blue", "Water"

Code: [Select]
InputString = wscript.arguments(0)
TokensArray = split (InputString , " ")
KeyWordList = Array ("Large Red Book", "Blue Train", "Train", "Blue", "Water")
AlphaBlockFound = False
KeyWordFound = False
OutPutString="Bad Filename"
Wscript.echo "Filename " & InputString
For j = lbound(TokensArray) to Ubound(TokensArray)
    MyString=TokensArray(j)
    If Len(MyString) = 6 Then
        FlagString=""
        For k = 1 To 6
            MyChar = Mid(MyString,k,1)
            If IsNumeric(MyChar) = False Then
                If InStr ("ABCDEFGHIJKLMNOPQRSTUVWXYZ", MyChar) > 0 Then
                    FlagString = FlagString & "A"
                End If
            Else
                FlagString = FlagString & "N"
            End If
        Next
        If FlagString = "ANNANN" Then
                AlphaBlockFound = True
                AlphaBlock = TokensArray(j)
                BlockNum=j
        End If
    End If
Next
If AlphaBlockFound = True Then
                PreambleString = ""
                For L = 0 To (BLocknum-1)
                    PreambleString = PreambleString & " " & TokensArray (L)
                Next
                PostambleString = ""
                For l = (BlockNum+1) To UBound(TokensArray)
                    PostambleString = PostambleString & " " & TokensArray (L)
                Next
                PostambleString = trim (PostambleString)
                    For q = LBound(KeyWordList) To UBound(KeyWordList)
                        Sstring=Trim(KeyWordList(q))
                        If instr (ucase(PostAmbleString), ucase(Sstring)) Then
                            OutPutString = PreambleString & " " & Mid(TokensArray(blocknum), 1,3) & " " & Sstring
                            wscript.echo trim(OutPutString)
                            wscript.quit
                        End If
                    Next
End If
wscript.echo OutPutString

devo

    Topic Starter


    Rookie

    • Experience: Beginner
    • OS: Unknown
    Re: Create folder from partial filename and move files into that folder
    « Reply #31 on: October 03, 2013, 10:57:56 AM »
    You've done it again.  It works perfectly.  Thanks for taking the time to help me out.