Try this batch...
@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"
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