我们有两个由S& P计算的自定义指数。 S& P将8个文件(每个索引4个)上传到我可以访问的FTP服务器文件夹。它们每天晚上上传,然后我在第二天早上取回它们。我希望这是自动化的,因为它们一次只能在服务器上维护5天。
以下是示例文件名:
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软件来解决这个问题。在我们的服务器上进行组织就是这篇文章试图解决的问题。
答案 0 :(得分:0)
不要试图在批处理文件中破解它。
在PowerShell中实现这一点更容易:
$url = "ftp://user:password@ftp.example.com/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)
}