2016-08-08 64 views
1

我們有兩個自定義索引,分別由S & P. S & P上傳8個文件(每個索引4個)到我可以訪問的FTP服務器文件夾。他們每天晚上都上傳,然後我在第二天早上取回。我希望這是自動的,因爲他們一次只能在服務器上保持5天。從FTP檢索文件,根據文件名在服務器上進行整理

下面是示例文件名:

20160805_LUKDGUP
20160805_LUKDGUP_NCS
20160805_LUKDGUP_NCS_ADJ
20160805_LUKDGUP_NCS_CLS
20160805_LUKSGUP
20160805_LUKSGUP_NCS
20160805_LUKSGUP_NCS_ADJ
20160805_LUKSGUP_NCS_CLS

我想要做的是將它們下載到我們的本地服務器,讓它們根據文件名自動放入文件夾中→20160805_LUKDGUP_ *文件進入LUKDGUP \ 20160805 \文件夾,LUKSGUP文件也一樣。

我試過從其他帖子修改一些批處理文件,但認爲我一直在做出阻止他們工作的小錯誤。

編輯20160809-0841: 我一直在試圖修改此以滿足我的需求,但一直沒能遵循循環,以及:

setlocal 
set "basename=." 
PAUSE 
for /F "tokens=1 delims=_" %%a in ('dir /B /A-D') do (
    set "filename=%%a" 
    setlocal EnableDelayedExpansion 
    for /F "delims=" %%c in ("!basename!") do if "!filename:%%c=!" equ  "!filename!" (
     set "basename=!filename!" 
     md "!basename!" 
    ) 
    move "!filename!.%%b" "!basename!" 
    for /F "delims=" %%c in ("!basename!") do (
     endlocal 
     set "basename=%%c 
     PAUSE 
    ) 
) 

Source.當然,這不涉及FTP自動化,但我想我可以用Filezilla或其他一些FTP軟件來解決這個問題。組織一旦它在我們的服務器上就是這件作品試圖解決的問題。

+2

,如果您能[編輯您的帖子(http://stackoverflow.com/posts/38838906/edit),包括你的代碼已經嘗試過,這不起作用,這將是非常有益的。 – SomethingDark

回答

0

不要試圖在批處理文件中破解這個。

這是一個比較容易的方式來實現這個在PowerShell中:

$url = "ftp://user:[email protected]/remote/path/" 
$request = [System.Net.WebRequest]::Create($url) 
$request.Method = [System.Net.WebRequestMethods+FTP]::ListDirectory 
$response = $request.GetResponse() 
$reader = New-Object IO.StreamReader $response.GetResponseStream() 
$listing = $reader.ReadToEnd() 
$reader.Close() 
$response.Close() 

$files = 
    ($listing -split "`r`n") | 
    Where-Object {$_ -like "*_*"} 

$webclient = New-Object System.Net.WebClient 

foreach ($file in $files) 
{ 
    $tokens = $file -split "_" 
    $localPath = (Join-Path $tokens[0] $tokens[1]) 
    $localFilePath = (Join-Path $localPath $file) 
    Write-Host ($file + " => " + $localFilePath) 

    if (!(Test-Path -Path $localPath)) 
    { 
     New-Item -Path $localPath -ItemType directory | Out-Null 
    } 

    $webclient.DownloadFile(($url + $file), $localFilePath) 
} 
+0

謝謝!這真的很接近!它抓取每組文件中的三個,但不抓取基本文件20160805_LUKDGUP和20160805_LUKSGUP。這如何處理覆蓋?這些文件一次可以存放5天,例如M1 T1 W1 Th1 F1,然後是T1 W1 Th1 F1 M2等。如果以前的文件被覆蓋,我不會預料到這是件大事。 –

+0

我已修復'20160805_LUKSGUP'的代碼+文件被覆蓋。 –

+0

它現在確實抓住它們,但它們放在它們自己的文件夾LUKDGUP.SDL和LUKSGUP.SDL中。我非常感謝你的幫助! –