1

8 文字の長さの DBF ファイルを生成する古い FoxPro プログラムを実行しているシステムがあります。私たちは毎日プログラム フォルダのバックアップを作成していますが、午後 5 時にプログラムが大量の不要な dbf を生成したため、迷惑です。バックアップ スクリプトに del *.dbf を設定するだけですが、プログラムを実行するために必要な名前に文字が含まれる dbf がいくつかあります。

ファイルは F:\Clean This\ にあります。

数字のタイトルが付いた .dbf ファイルはすべて削除する必要があります

アルファベット順のタイトルの .dbf ファイルはそのままにしておく必要があります

Set objFSO = CreateObject("Scripting.FileSystemObject")
objStartFolder = "F:\Clean This\"
Set objFolder = objFSO.GetFolder(objStartFolder)
Set colFiles = objFolder.Files
collide = "ABCEDFGHIJKLMNOPQRSTUVWXYZ"

For Each objFile in colFiles
    If UCase(objFSO.GetExtensionName(objFile.name)) = "DBF" Then
        num = 1
        For num = 1 to 26 'find files with names start with # 0-9
            If Left(objFile.Name,1) = Left(collide,num) Then
                Wscript.Echo "Save " & objFile.Name
            Else If int(Left(objFile.Name,1)) > 0 Then
                Wscript.Echo "Delete!"
            End IF
            End If
        Next
    End If
Next

Ifステートメントの方がうまくいくことがわかるように、どうすればうまくいくかわかりません。2 つの Wscript.Echo コマンドは単なるプレースホルダーです。これ以外の方法では、dos 環境で機能する適切な削除機能を見つけることができないためです (私は既に kill を試しましたが、いいえ)。

提案と改善をいただければ幸いです。

4

2 に答える 2

1

IsNumeric() を使用して、数字のみで構成されるファイル名を確認します。

>> For Each sN In Split("abc 123 1O1 101")
>>     If IsNumeric(sN) Then
>>        WScript.Echo "delete", sN
>>     Else
>>        WScript.Echo "keep", sN
>>     End If
>> Next
>>
keep abc
delete 123
keep 1O1
delete 101

Mid() を使用する必要がある場所で Left() を使用しているため、チェックは失敗します。

>> collide = "ABCEDFGHIJKLMNOPQRSTUVWXYZ"
>> num = 5
>> WScript.Echo Left(collide,num)
>> WScript.Echo Mid(collide,num,1)
>>
ABCED
D

それでもLeft(objFile.Name,1)、ファイル名の最初の文字だけを調べます。

更新 (書き込みコメント):

ベース名に IsNumeric() を適用します。

  Dim oFile
  For Each oFile In goFS.GetFolder("..\testdata\17817161").Files
      WScript.Stdout.Write oFile.Name
      If "dbf" = LCase(goFS.GetExtensionName(oFile.Name)) Then
         If IsNumeric(goFS.GetBaseName(oFile.Name)) Then
            WScript.Stdout.WriteLine " delete"
         Else
            WScript.Stdout.WriteLine " keep"
         End If
      Else
         WScript.Stdout.WriteLine " ignore"
      End If
  Next

出力:

123.dbf delete
123.txt ignore
abc.dbf keep
于 2013-07-23T17:56:05.247 に答える
0

私はついにそれを機能させました、そしてこれが最終結果でした。それは素晴らしく機能し、上層部や他の人々は、バックアップしているプログラムの組み込みユーティリティよりもうまく機能したことにかなり感銘を受けました. スコア!

Set objFSO = CreateObject("Scripting.FileSystemObject")
objStartFolder = "..\System Folder"
Set objFolder = objFSO.GetFolder(objStartFolder)
Set DirFiles = objFolder.Files
Dim oFile
For Each objFile in DirFiles
If "dbf" = LCase(objFSO.GetExtensionName(objFile.Name)) Then
    If IsNumeric(objFSO.GetBaseName(objFile.Name)) Then
        objFSO.DeleteFile(objFile)
    End If
End If    
Next
于 2013-07-26T17:13:40.080 に答える