前提・実現したいこと
始めて質問します。よろしくお願いします。
スマホに入っている旅行で記録したファイルを整理するためにFTPで接続してパソコンに移動させるプログラムを作りました。
今のままだと画像しか移動できない微妙なプログラムになりそうなので質問させてください。
転送元のファイル名をそのまま転送先のパソコンにも適用できるようにしたいです。
発生している問題・エラーメッセージ
対象日時の名前になっているファイル分、b[]配列の分だけ下のエラーが発生してファイルを転送することができません。 "2" 個の引数を指定して "DownloadFile" を呼び出し中に例外が発生しました: "WebClient 要求で例外が発生しました。" 発生場所 C:\Users\name\Desktop\無題1.ps1:85 文字:3 + $wc.DownloadFile($b[$t],$localDirectoryPath2+$b[$t]); + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId : WebException
該当のソースコード
powershell
1$inputday = Read-Host "当日の日付を入力してください。YYYYMMDD" 2$inputgoto =Read-Host "行く先を入力してください" 3 4$localDirectoryPath = "C:\anydata\ryokou\kiroku\"+$inputgoto+"\"+$inputday+"\"; 5$localDirectoryPath2 = "C:\anydata\ryokou\kiroku\"+$inputgoto+"\"+$inputday+"\Pictures\"; 6 7New-Item $localDirectoryPath2 -ItemType Directory; 8 9 10# FTP接続に必要な情報を設定 11$user = 'your_account'; 12$pass = 'your_password'; 13$hostName = '111.22.33.4:1234'; 14 15# ファイルの一覧を取得する対象のディレクトリのパス 16# (最後はスラッシュで終わらせる) 17$targetDirectoryPath = '/device/DCIM/Camera/'; 18 19# FTP接続用のURL 20$ftpUrl = 'ftp://' + $hostName + $targetDirectoryPath; 21 22# 接続 23$webRequest = [System.Net.WebRequest]::Create($ftpUrl); 24$webRequest.Credentials = New-Object System.Net.NetworkCredential($user, $pass); 25 26 27# 実行する処理を設定 28$webRequest.Method = [System.Net.WebRequestMethods+Ftp]::ListDirectory; 29 30try 31{ 32 # リクエスト実行 33 $response = $webRequest.GetResponse(); 34 $ftpDataStream = $response.GetResponseStream(); 35 $streamReader = New-Object System.IO.StreamReader($ftpDataStream); 36 37 # ファイル名(文字列)のリストを取得 38 $list = $streamReader.ReadToEnd(); 39 40 41 foreach($item in $list) 42 { 43 # ファイル名を出力 44 Write-Host $item; 45 } 46 47 $streamReader.Close(); 48} 49catch 50{ 51 Write-Host 'エラーが発生しました'; 52 Write-Host $_; 53} 54 55$a = $list.split("`n"); 56 57$b = New-Object System.Collections.ArrayList 58 59for ($i=0; $i -lt $a.Length; $i++){ 60 61 if($a[$i].StartsWith($inputday)){ 62 $b += $a[$i]; 63 } 64} 65 66 Write-Output ($b[0]); 67 Write-Output ($b[1]); 68 Write-Output ($b[2]); 69# WebClientを生成 70# FTP設定 71$wc = New-Object System.Net.WebClient; 72$wc.Credentials = New-Object System.Net.NetworkCredential($user,$password); 73$wc.BaseAddress = $ftpurl; 74 75 76# スクリプトファイルのパスを取得 77$mypath=Split-Path ( & { $myInvocation.ScriptName } ) -parent; 78 79# ファイルをダウンロード 80## .DownloadFile(ダウンロード元ファイル名,ダウンロード先ファイル名) 81for ($t=0; $t -lt $b.Length; $t++){ 82 Write-Output ("count:"+$t); 83 84 $wc.DownloadFile($b[$t],$localDirectoryPath2+$b[$t]); 85} 86 87# 終了 88$wc.Dispose(); 89
試したこと
後ろの方にある
$wc.DownloadFile($b[$t],$localDirectoryPath2+$b[$t]);
を $wc.DownloadFile($b[$t],$localDirectoryPath2+$inputday+"_"+$t+".jpg");
にするとエラーが起こらず
第二引数に$b[$t]に入っていると問題が起こるようです。
補足情報(FW/ツールのバージョンなど)
動作環境 実行環境windows10 接続先:Androidバージョン 10 接続元:windows10
Powershellのバージョン
Name Value
PSVersion 5.1.18362.752
PSEdition Desktop
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...}
BuildVersion 10.0.18362.752
CLRVersion 4.0.30319.42000
WSManStackVersion 3.0
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1
よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー