2016-04-01 41 views
0

開始フォルダが指定されたスクリプトを作成し、すべてのフォルダとファイルをループすると想定され、パスが250より大きい場合は、ファイル。それは動作しますが、パスが259文字より大きい場合、パスはテキストファイルに書き込まれません。これは簡単に修正できますか?私のスクリプトは一番下にあります。ありがとうございますVBScriptが260文字を超える文字を読み取っていない

Const ForWriting = 2 
dim x 
StartFolder = "C:\Users\Sample\Desktop\Notess\Reports" 
LogFile = "C:\Users\Sample\Desktop\rand.txt" 

Set objFSO = CreateObject("Scripting.FileSystemObject") 
Set objLogFile = objFSO.OpenTextFile(LogFile, ForWriting, True) 
Call CheckFolder(StartFolder) 

Set objFSO = Nothing 
objLogFile.Close 

Sub CheckFolder(Folder) 
    Set ArrFiles = objFSO.GetFolder(Folder).Files 
    For Each File In ArrFiles 

x=len(file) 
     IF X > 250 THEN objLogFile.WriteLine (File & ", "& X) 


    Next 

    Set ArrSubFolders = objFSO.GetFolder(Folder).SubFolders 
    For Each SubFolder In ArrSubFolders 
     call CheckFolder(SubFolder) 
    Next 
End Sub 

答えて

3

これは、WindowsのMAX_PATH変数に起因する可能性が高いためです。 NTFSでは32,000文字までのパスが許可されていますが、Windowsには、256に設定された多くのAPIで使用される素敵な変数があります。

私の推測によれば、FSOは、 (256文字プラスから3つの文字が「C:\」)結果、259より大きいCheck out this post over at the excellent blog.codinghorror.com

+0

はい、それは、Win32 APIによって負わさ制限です。これまで私が見つけたVBScriptのための唯一の実行可能な方法は、親フォルダを 'subst'を介してドライブレターにマッピングし、そのドライブから続行することによってパスを短縮することです。 –

関連する問題