Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 从FTP检索文件,根据文件名在服务器上组织_Batch File_Ftp - Fatal编程技术网

Batch file 从FTP检索文件,根据文件名在服务器上组织

Batch file 从FTP检索文件,根据文件名在服务器上组织,batch-file,ftp,Batch File,Ftp,我们有两个由标准普尔计算的自定义索引。标准普尔将8个文件(每个索引4个)上传到我可以访问的FTP服务器文件夹。它们每天晚上都会被上传,第二天早上我就会把它们取回。我希望这是自动化的,因为他们一次只在服务器上维护5天 以下是示例文件名: 20160805_LUKDGUP 20160805_LUKDGUP_NCS 20160805_LUKDGUP_NCS_ADJ 20160805_LUKDGUP_NCS_CLS 20160805_LUKSGUP 20160805\u LUKSGUP\u NCS 20

我们有两个由标准普尔计算的自定义索引。标准普尔将8个文件(每个索引4个)上传到我可以访问的FTP服务器文件夹。它们每天晚上都会被上传,第二天早上我就会把它们取回。我希望这是自动化的,因为他们一次只在服务器上维护5天

以下是示例文件名:

20160805_LUKDGUP
20160805_LUKDGUP_NCS
20160805_LUKDGUP_NCS_ADJ
20160805_LUKDGUP_NCS_CLS
20160805_LUKSGUP
20160805\u LUKSGUP\u NCS
20160805\u LUKSGUP\u NCS\u ADJ
20160805\u LUKSGUP\u NCS\u 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
   )
)

当然,这并不涉及FTP自动化,但我想我可以通过Filezilla或其他FTP软件解决这一部分。一旦它出现在我们的服务器上,组织就是这篇文章试图解决的问题。

不要试图在批处理文件中破解它

在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=新对象IO.StreamReader$response.GetResponseStream()
$listing=$reader.ReadToEnd()
$reader.Close()
$response.Close()
$files=
($listing-split“`r`n”)|
其中对象{$\类似于“*.*”}
$webclient=新对象System.Net.webclient
foreach($files中的文件)
{
$tokens=$file-split“\ux”
$localPath=(连接路径$tokens[0]$tokens[1])
$localFilePath=(连接路径$localPath$file)
写入主机($file+“=>”+$localFilePath)
if(!(测试路径-路径$localPath))
{
新项-Path$localPath-ItemType目录| Out Null
}
$webclient.DownloadFile(($url+$file),$localFilePath)
}

不要试图在批处理文件中对此进行破解

在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=新对象IO.StreamReader$response.GetResponseStream()
$listing=$reader.ReadToEnd()
$reader.Close()
$response.Close()
$files=
($listing-split“`r`n”)|
其中对象{$\类似于“*.*”}
$webclient=新对象System.Net.webclient
foreach($files中的文件)
{
$tokens=$file-split“\ux”
$localPath=(连接路径$tokens[0]$tokens[1])
$localFilePath=(连接路径$localPath$file)
写入主机($file+“=>”+$localFilePath)
if(!(测试路径-路径$localPath))
{
新项-Path$localPath-ItemType目录| Out Null
}
$webclient.DownloadFile(($url+$file),$localFilePath)
}

如果您可以将您已经尝试过但不起作用的代码包含在内,那将非常有帮助。如果您可以将您已经尝试过但不起作用的代码包含在内,那将非常有帮助。谢谢!这真的很接近!它会抓取每个集合的三个文件,但不会抓取基础文件20160805_LUKDGUP或20160805_LUKSGUP。这是如何处理覆盖的?文件一次在上面5天,例如M1 T1 W1 Th1 F1,然后T1 W1 Th1 F1 M2,等等。但是我不认为如果以前的文件被覆盖会有什么大不了的。我已经修复了
20160805\u LUKSGUP
+文件被覆盖的代码。它现在确实抓住了它们,但是它们被放在自己的文件夹LUKDGUP.SDL和LUKSGUP.SDL中。我真的很感谢你的帮助!什么是
.SDL
?你的问题中没有提到。无论如何,SO不是一个代码编写服务。我已经向你展示了这个概念,其余的都由你来做。谢谢!这真的很接近!它会抓取每个集合的三个文件,但不会抓取基础文件20160805_LUKDGUP或20160805_LUKSGUP。这是如何处理覆盖的?文件一次在上面5天,例如M1 T1 W1 Th1 F1,然后T1 W1 Th1 F1 M2,等等。但是我不认为如果以前的文件被覆盖会有什么大不了的。我已经修复了
20160805\u LUKSGUP
+文件被覆盖的代码。它现在确实抓住了它们,但是它们被放在自己的文件夹LUKDGUP.SDL和LUKSGUP.SDL中。我真的很感谢你的帮助!什么是
.SDL
?你的问题中没有提到。无论如何,SO不是一个代码编写服务。我已经向你展示了这个概念,剩下的就交给你了。