批命令从FTP服务器GET由当前日期组合成文件名的文件

 

我有一个项目,需要实现每日定时到FTP取动态文件名的文件,文件名是由当前日期加一些固定字符串组成的。文件存在SOLARIS服务器下,定时任务由WINDOWSXP的PC机来执行。

1、创建VBS脚本文件,命名为createftp.vbs

'函数功能:将小于10的数字前加个"0", 例:"7" 改为"07"
Function StrConvert(str)
   If CInt(str) < 10  Then
    StrConvert = "0" & str
    else
    StrConvert = str
   End If
End Function
'待获取文件的路径
DATAPATH ="ftp_server_path"
'获取当天日期
today = Date()
yesterday= DateAdd("d", -1, today)
my_year=year(yesterday)
my_mm=month(yesterday)
my_dd=day(yesterday)
my_month=StrConvert(my_mm)
my_day=StrConvert(my_dd)
'格式化日期
my_time=my_year & my_month & my_day
'获取文件名
filename= my_time & "_sum_start.txt"
'在指定路径生成my_ftp.txt文件,在此可修改相应的路径及文件名  
'按实际情况修改以下部分,即修改 my_ftp.txt的内容
Dim fso1, tf
Set fso1 = CreateObject("Scripting.FileSystemObject")
Set tf = fso1.CreateTextFile("localpc_ftp_filename", True)
tf.WriteLine("lcd  localpc_path")
tf.WriteLine("open ftp_server_ip ftp_server_port")
tf.WriteLine("ftp_server_username")
tf.WriteLine("ftp_server_password")
tf.WriteLine("cd " &DATAPATH )
tf.WriteLine("get " & filename & " new_filename")
tf.WriteLine("disconnect")
tf.WriteLine("bye")
tf.Close

2、创建BAT批处理文件,命名为input.bat

@echo off
rem #creatftp.vbs 脚本功能:自动生成文件my_ftp.txt
creatftp.vbs
ftp -i -s:localpc_ftp_filename

3、通过批处理获取系统时间的另一方法:

%date:~0,4% 获取年份
%date:~5,2% 获取月份
%date:~8,2% 获取日期
%date:~10,6% 获取星期几

%time:~0,2% 获取小时
%time:~3,2% 获取分钟

在批处理文件中,可以使用set命令写文件名,如上例中:
set ftp_server_filename=%date:~0,4%%date:~5,2%%date:~8,2%_sum_start.txt
不过这里的数值小于10不会自动加0。

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
很抱歉,作为AI语言模型,我没有权限访问网络或与计算机进行交互,并且不支持编写和运行实际的代码。但是,我可以给您提供一个大致的FTP客户端的代码框架,以供参考: ``` #include <stdio.h> #include <stdlib.h> #include <string.h> #include <netdb.h> #include <sys/socket.h> #include <arpa/inet.h> #define BUF_SIZE 1024 int main(int argc, char *argv[]) { int sockfd, portno, n; struct sockaddr_in serv_addr; struct hostent *server; char buffer[BUF_SIZE]; if (argc < 4) { fprintf(stderr,"Usage: %s hostname port filename\n", argv[0]); exit(1); } portno = atoi(argv[2]); sockfd = socket(AF_INET, SOCK_STREAM, 0); if (sockfd < 0) { perror("ERROR opening socket"); exit(1); } server = gethostbyname(argv[1]); if (server == NULL) { fprintf(stderr,"ERROR, no such host\n"); exit(1); } memset(&serv_addr, 0, sizeof(serv_addr)); serv_addr.sin_family = AF_INET; memcpy((char *) &serv_addr.sin_addr.s_addr, (char *) server->h_addr, server->h_length); serv_addr.sin_port = htons(portno); if (connect(sockfd,(struct sockaddr *) &serv_addr,sizeof(serv_addr)) < 0) { perror("ERROR connecting"); exit(1); } // send username and password char username[BUF_SIZE], password[BUF_SIZE]; printf("Username: "); fgets(username, BUF_SIZE, stdin); printf("Password: "); fgets(password, BUF_SIZE, stdin); char auth_command[BUF_SIZE]; sprintf(auth_command, "USER %s\r\nPASS %s\r\n", username, password); n = write(sockfd, auth_command, strlen(auth_command)); if (n < 0) { perror("ERROR writing to socket"); exit(1); } // receive response from server n = read(sockfd, buffer, BUF_SIZE-1); if (n < 0) { perror("ERROR reading from socket"); exit(1); } buffer[n] = '\0'; printf("%s", buffer); // send request to retrieve file char filename[BUF_SIZE]; strcpy(filename, argv[3]); char retr_command[BUF_SIZE]; sprintf(retr_command, "RETR %s\r\n", filename); n = write(sockfd, retr_command, strlen(retr_command)); if (n < 0) { perror("ERROR writing to socket"); exit(1); } // receive response from server n = read(sockfd, buffer, BUF_SIZE-1); if (n < 0) { perror("ERROR reading from socket"); exit(1); } buffer[n] = '\0'; printf("%s", buffer); // receive file data FILE *file = fopen(filename, "w"); while ((n = read(sockfd, buffer, BUF_SIZE-1)) > 0) { fwrite(buffer, 1, n, file); } fclose(file); close(sockfd); return 0; } ``` 该代码包含了以下步骤: 1. 解析命令行参数,包括FTP服务器的主机名、端口号和要获取文件名。 2. 创建套接字并连接到FTP服务器。 3. 发送用户名和密码以进行认证。 4. 接收来自服务器的认证响应。 5. 发送请求以获取文件。 6. 接收来自服务器的文件传输响应。 7. 接收文件数据并将其写入本地文件中。 8. 关闭套接字并退出程序。 请注意,该代码仅为示例,可能需要根据您的具体情况进行修改。例如,您可能需要添加错误处理和更多的输入验证。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值