前提・実現したいこと
Web(SharePointのライブラリ)に置いてあるファイルをダウンロードする作業があります。
フォルダやファイルの数がとても多いので、いっこずつクリックしてダウンロードして…… ってやってるとキリがないのです。
(WebDAVは無いしこれからあるようになる予定もありません)
なので、フォルダごとにまとめてダウンロードしてくれるようなのをしてくれるようなのを、いろんなサイトを検索して真似したりして書きました。
引数にするテキストファイルはこんな感じです。
1行目:ダウンロード元のフォルダのURL
2行目:ダウンロード先のフォルダのパス
3行目以降にファイル名を列挙します。(ファイルの種類はいろいろです。SharePointの仕様上、最大限に大きくても50MBはありません)
Text
1http://www.sample.jp/site/dept01/DocLib01/folder01/ 2D:\bkup\folder01\ 3file01.txt 4帳票.xlsx 5プレゼン資料20180701.pptx 6001部長からのメール.msg
ダウンロードするためのスクリプトはこれです。
VBScript
1Set objShell = WScript.CreateObject("WScript.Shell") 2Set objXmlHttp = WScript.CreateObject("MSXML2.XmlHttp") 3Set objFso = WScript.CreateObject("Scripting.FileSystemObject") 4 5'ファイル一覧が列挙されてるテキストファイルを読み込んで配列に格納(1行目に置いてある場所のURL) 6Set objFile = objFso.OpenTextFile("filelist.txt") 7Dim aryRet() 8Dim gyosu : gyosu = 0 9Do Until objFile.AtEndOfStream 10 redim Preserve aryRet(gyosu) 11 aryRet(gyosu) = objFile.ReadLine 12 gyosu = gyosu + 1 13Loop 14objFile.Close 15 16'置いてある場所のURLが1行目に書いてある 17cReqPath = aryRet(0) 18 19'3行目以降のファイル名を読んで順にダウンロード 20Dim i 21for i = 2 to gyosu-1 step 1 22 cFileName = aryRet(i) 23 objXmlHttp.Open "GET", cReqPath & cFileName, False 24 objXmlHttp.Send 25 intStatus = objXmlHttp.status 26 If (intStatus <> 200) Then 27 WScript.Echo "FAILED" & vbCrLf & vbCrLf & "HTTP status code is " & intStatus & vbCrLf & cFileName 28 WScript.Quit 29 End If 30 31'ダウンロード先にする場所のネットーワークパスが2行目に書いてある 32 toNWDirectory = aryRet(1) 33 Set objStream = WScript.CreateObject("ADODB.Stream") 34 objStream.Open 35 objStream.Type = 1 36 objStream.Write objXmlHttp.responseBody 37 objStream.SaveToFile toNWDirectory & cFileName, 2 38 objStream.Close 39 Set objStream = Nothing 40next 41 42WScript.Echo "フォルダ" & vbCrLf & toNWDirectory & vbCrLf & "にダウンロードしました。" 43Set objXmlHttp = Nothing 44 45WScript.Quit
発生している問題
ときどき、404エラーでダウンロードできないファイルが出てきます。
ファイル名は合っています。
当該のファイルを手でダウンロード(ファイル名を右クリック→「対象をファイルに保存」)すると正常にダウンロードできます。
なにか共通する問題点
(たとえば、ファイル名の先頭が特定の文字や記号や数字で始まるとか、ファイル名のなかにスペースがあるとか、特定の拡張子とか)
があるのかなーと、大丈夫だったファイルとダメだったファイルを並べて観察しましたが、私には共通点がみつけられませんでした。
ファイルはあるのに404エラーでダウンロードできない場合に
考えられる原因って、どのようなものがあるのでしょうか。やっぱりファイル名とかでしょうか。
そのような場合に原因をみつけるのは、どのような手段があるのでしょうか。
補足情報(FW/ツールのバージョンなど)
使用しているPCのOSはWindows10で、SharePointは2010です。
あなたの回答
tips
プレビュー