重要フォルダに対応したものを作りました。
お試しください。
重要用と普通のファイル用とファイル名をチェックする関数が別にあるのでそれぞれ修正してください。
---------ここから-------
Option Explicit
' 検索対象のフォルダ
Const CFromFolder = "C:\txt"
' 保存先のフォルダ
Const CToFolder = "C:\fld"
' テストモード: これを True にする場合は CScript で起動してください。
Const TestMode = False
Dim FSO, Fld, FC, Entry, Fld2, FC2
Dim nameFailed
Dim chiikiFailed
Dim folderNotFound
Dim subfolderNotMatch
Dim movedFile
Dim ChiikiCode
Dim code, year, fileNumber
Dim moveToFolder
Set ChiikiCode = CreateObject("Scripting.Dictionary")
ChiikiCode.Add "01", "本社"
ChiikiCode.Add "02", "西日本"
ChiikiCode.Add "03", "中部"
ChiikiCode.Add "04", "九州"
ChiikiCode.Add "05", "東北"
ChiikiCode.Add "06", "中四国"
ChiikiCode.Add "07", "神奈川"
Set FSO = CreateObject("Scripting.FileSystemObject")
Set Fld = FSO.GetFolder(CFromFolder)
Set FC = Fld.Files
nameFailed = 0
chiikiFailed = 0
folderNotFound = 0
movedFile = 0
If TestMode Then WScript.Echo "### Test Mode ###"
For Each Entry In FC
If checkName(Entry.Name) Then
code = CStr(Mid(Entry.Name, 3, 2))
year = CStr(Mid(Entry.Name, 5, 2))
fileNumber = CLng(Mid(Entry.Name, 3, 9))
' 地域コードのチェック
If ChiikiCode.Exists(code) Then
' 上位フォルダ (CToFolder\20xx年\地域名) の存在確認
moveToFolder = CToFolder & "\20" & year & "年\" & ChiikiCode(code)
If FSO.FolderExists(moveToFolder) Then
' 下位フォルダ (~AB[0-9]{9}) の保存先特定
Set Fld2 = FSO.GetFolder(moveToFolder)
subfolderNotMatch = True
For Each FC2 In Fld2.SubFolders
If Not FC2.Name = "重要" Then
If CLng(Mid(FC2.Name, 4, 9)) >= fileNumber Then
If TestMode Then
WScript.Echo Entry.Path & " -> " & vbNewLine & vbTab & FC2.Path & "\" & Entry.Name
movedFile = movedFile + 1
Else
Call FSO.MoveFile (Entry.Path, FC2.Path & "\" & Entry.Name)
movedFile = movedFile + 1
End If
subfolderNotMatch = False
Exit For
End If
End If
Next
If subfolderNotMatch Then
If TestMode Then
WScript.Echo "該当するフォルダが見つかりません: " & Entry.Name
End If
folderNotFound = folderNotFound + 1
End If
Else
If TestMode Then
WScript.Echo "フォルダが見つかりません: " & moveToFolder
End If
folderNotFound = folderNotFound + 1
End If
Else
If TestMode Then
WScript.Echo "地域コードが該当しません: " & Entry.Name
End If
chiikiFailed = chiikiFailed + 1
End If
Else
' 重要ファイル
If checkJuyo(Entry.Name) Then
code = CStr(Mid(Entry.Name, 7, 2))
year = CStr(Mid(Entry.Name, 9, 2))
fileNumber = CLng(Mid(Entry.Name, 7, 9))
' 地域コードのチェック
If ChiikiCode.Exists(code) Then
' フォルダ (CToFolder\20xx年\地域名\重要) の存在確認
moveToFolder = CToFolder & "\20" & year & "年\" & ChiikiCode(code) & "\重要"
If FSO.FolderExists(moveToFolder) Then
If TestMode Then
WScript.Echo Entry.Path & " -> " & vbNewLine & vbTab & moveToFolder & "\" & Entry.Name
movedFile = movedFile + 1
Else
Call FSO.MoveFile (Entry.Path, moveToFolder & "\" & Entry.Name)
movedFile = movedFile + 1
End If
Else
If TestMode Then
WScript.Echo "フォルダが見つかりません: " & moveToFolder
End If
folderNotFound = folderNotFound + 1
End If
Else
If TestMode Then
WScript.Echo "地域コードが該当しません: " & Entry.Name
End If
chiikiFailed = chiikiFailed + 1
End If
Else
If TestMode Then
WScript.Echo "書式エラー: " & Entry.Name
End If
nameFailed = nameFailed + 1
End If
End If
Next
WScript.Echo movedFile & " 個のファイルを移動しま(す or した)。" & _
vbNewLine & nameFailed & " 個のファイル名に書式エラーがあります。" & _
vbNewLine & chiikiFailed & " 個のファイル名の地域コードがありません。" & _
vbNewLine & folderNotFound & " 個のファイルに該当するフォルダが見つかりません。"
' ファイル名のチェック
Function checkName(ByVal name) ' As Boolean
Dim returnValue
Dim regEx
returnValue = False
Set regEx = New RegExp
' AB数字9ケタ(???).txt にマッチ
regEx.Pattern = "^AB[0-9]{9}\(.+\)\.txt$"
regEx.Global = False
regEx.IgnoreCase = False
If regEx.Test(name) Then returnValue = True
checkName = returnValue
End Function
Function checkJuyo(ByVal name) ' As Boolean
Dim returnValue
Dim regEx
returnValue = False
Set regEx = New RegExp
' 【重要】AB数字9ケタ(???).txt にマッチ
regEx.Pattern = "^【重要】AB[0-9]{9}\(.+\)\.txt$"
regEx.Global = False
regEx.IgnoreCase = False
If regEx.Test(name) Then returnValue = True
checkJuyo = returnValue
End Function
お礼
ありがとうございます。 遅くなりました。 今日になってやっと試す時間ができました。 残念ながら、エラーが出ました。 C:\>cscript quotation.vbs Microsoft (R) Windows Script Host Version 5.7 Copyright (C) Microsoft Corporation 1996-2001. All rights reserved. 0 個のファイルを移動しま(す or した)。 1 個のファイル名に書式エラーがあります。 0 個のファイル名の地域コードがありません。 0 個のファイルに該当するフォルダが見つかりません。
補足
すみません。 家に帰ってきて思ったのですが、私のミスだと思います。 一部書き換えて、改めて実行してみます。