找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
楼主: lazygc520

[文本处理] [已解决]从FTP上获取当前时间之前一段时间内信息的批处理

[复制链接]
 楼主| 发表于 2009-8-14 22:19:00 | 显示全部楼层
小弟不才,对batch的功能还不太了解。麻烦各位高手解答一下主体的程序!
发表于 2009-8-14 22:32:18 | 显示全部楼层
%time:~11,2% %time:~14,2%这里对时间的截取是错的,如果你还没有搞清楚字符串截取的方法,可以参考以下几个帖子:

set截取字符详解
http://bbs.bathome.net/viewthread.php?tid=996

set变量字符截取点点通
http://bbs.bathome.net/viewthread.php?tid=40

新手set截取字符练习工具
http://bbs.bathome.net/viewthread.php?tid=1149

评分

参与人数 1PB +6 技术 +1 +1 收起 理由
lazygc520 + 6 + 1 + 1 很好的知识点补充。

查看全部评分

 楼主| 发表于 2009-8-15 08:25:09 | 显示全部楼层
原帖由 Batcher 于 2009-8-14 22:32 发表
%time:~11,2% %time:~14,2%这里对时间的截取是错的,如果你还没有搞清楚字符串截取的方法,可以参考以下几个帖子:

set截取字符详解
http://bbs.bathome.net/viewthread.php?tid=996

set变量字符截取点点通
h ...

难道时间格式不是 2009 08 15 08:23 这样的形式么?获取的结果不是%date:~11,2% %date:~14,2%这样的么?
是不是我需要分别获得日期的时间和分钟的时间?象以下这样的格式?

  1. set FileY=%date:~0,4%
  2. set FileN=%time:~0,2%
  3. call :DateToMins %date:~0,4% %date:~5,2% %date:~8,2% %time:~0,2% %time:~3,2% %time:~6,2% Mins
复制代码

[ 本帖最后由 lazygc520 于 2009-8-15 08:38 编辑 ]
发表于 2009-8-15 14:28:50 | 显示全部楼层
难道你的%date%环境变量里面包含时间?不是。
是,分别获取年、月、日、时、分。不是,这样取不到时、分。
 楼主| 发表于 2009-8-16 09:15:23 | 显示全部楼层
那应该怎么取?我设2个变量?
能不能举个例子?
我通过以下代码获得的时间信息,不知道这样对不对:

  1. C:\Documents and Settings\usr>echo %date:~0,4% %date:~5,2% %date:~8,2% %time:~0,
  2. 2%:%time:~3,2%
  3. 2009 08 16  9:20
复制代码

[ 本帖最后由 lazygc520 于 2009-8-16 09:24 编辑 ]
 楼主| 发表于 2009-8-17 08:57:23 | 显示全部楼层
以下是程序及输出结果,但是我还是没有获得时间信息文件。请问batcher怎么修改?

[ 本帖最后由 lazygc520 于 2009-8-19 10:19 编辑 ]
发表于 2009-8-17 13:16:22 | 显示全部楼层
为什么问了问题不回答呢?不能理解。我觉得既然你回答了我的问题,就应该负责到底啊!一起探讨问题才能共同提高。

最近公司里面事情比较多
既然你不能理解那就等等其他朋友帮你解决问题吧
 楼主| 发表于 2009-8-17 13:18:11 | 显示全部楼层

回复 22楼 的帖子

唉,问题是后继无人啊!
发表于 2009-8-18 09:50:02 | 显示全部楼层
DateToMins函数说明里面写得很清楚,它对传入的参数是这样要求的:
::       %4 待转换的小时,范围是 1/01 到 12 (12小时制,分钟数以“a”或者
::          “p”结尾)或者 0/00 到 23 (24小时制)(传值调用)
::       %5 待转换的分钟,范围是 00-59 (12小时制需加 a/p 后缀)(传值调用)

你截取小时和分钟之后(以24小时制为例),对于小于10的情况(比如9点零5分),需要在左侧补零(比如09和05)

评分

参与人数 1PB +6 技术 +1 +1 收起 理由
lazygc520 + 6 + 1 + 1 内容详尽。

查看全部评分

 楼主| 发表于 2009-8-19 09:42:51 | 显示全部楼层
程序我大概读懂了。但是我不清楚传参的时候怎么写?就是你说的补零的情况。还有一个问题,这个DateToMins是日期转分钟的函数,那我可以按小时处理么?怎么处理?

  1. call :DateToMins %date:~0,4% %date:~5,2% %date:~8,2% %time:~0,2% %time:~3,2% //这个传参怎么补零?
复制代码


TempDown.txt的一部分结果:

  1. C:\Documents and Settings\Admin\My Documents>(
  2. setlocal enabledelayedexpansion  
  3. if "Jun" EQU "Jan" (set FileM=01 )  else if "Jun" EQU "Feb" (set FileM=02 )  else if "Jun" EQU "Mar" (set FileM=03 )  else if "Jun" EQU "Apr" (set FileM=04 )  else if "Jun" EQU "May" (set FileM=05 )  else if "Jun" EQU "Jun" (set FileM=06 )  else if "Jun" EQU "Jul" (set FileM=07 )  else if "Jun" EQU "Aug" (set FileM=08 )  else if "Jun" EQU "Sep" (set FileM=09 )  else if "Jun" EQU "Oct" (set FileM=10 )  else if "Jun" EQU "Nov" (set FileM=11 )  else if "Jun" EQU "Dec" (set FileM=12 )  
  4. set FileH=101  //不对,没有补0
  5. set FileH=!FileH:~-2!  
  6. if "!FileM!" EQU "01" (if "!FileH!" EQU "00"/×应该是08,我怎么得到的是00?×/ (echo get "F20090532F.SWM" "E:\\F20090532F.SWM" ) )  
  7. endlocal
  8. )
复制代码

[ 本帖最后由 lazygc520 于 2009-8-19 09:58 编辑 ]
 楼主| 发表于 2009-8-19 10:17:38 | 显示全部楼层
找到一个补零的帖子:
  1. @echo off & setlocal enabledelayedexpansion
  2. set var=2,15,20,33,56,1,07,54,89,66,23,25,27,28,29,55,56,57,5,59,6,78,74,66,08,28,9,30,52,14,15,16,2,8,4,6,15,16,13,5,9
  3. for %%a in (%var%) do (
  4.   if 1%%a lss 20 (set var0=!var0!,0%%a) else set var0=!var0!,%%a
  5. )
  6. set var0=%var0:~1%
  7. echo %var0%
  8. pause
复制代码
但是有处不懂,if 1%%a lss 20 (set var0=!var0!,0%%a) else set var0=!var0!,%%a
为什么是lss 20啊?
发表于 2009-8-19 10:24:27 | 显示全部楼层
那个函数库里面没有现成的日期转小时的函数,你有兴趣的话可以自己发明一个出来。

至于补零,可以用“补零”作为关键字在论坛进行搜索,能找到现成的代码。

如果对搜索功能不太熟悉,可以参考:批处理之家论坛使用常见问题FAQ
http://bbs.bathome.net/thread-3473-1-1.html

评分

参与人数 1PB +6 技术 +1 +1 收起 理由
lazygc520 + 6 + 1 + 1 这点至关重要!

查看全部评分

 楼主| 发表于 2009-8-19 10:31:04 | 显示全部楼层
至于为什么用小时是因为这样的原因:
如果本机时间:10:28,我获取60分钟前的时间信息可以获得。但是只能获取在9:28生成包含时间信息的文件.
我的意思是说能不能获得9:28~10:28之内所有包含时间信息的文件?
发表于 2009-8-19 10:38:40 | 显示全部楼层
我觉得转分钟比较合理、简单。
至于你为何无法获取到想要的文件,在没有看到最新代码的前提下,我也不好妄加猜测。
 楼主| 发表于 2009-8-19 10:41:49 | 显示全部楼层
贴出未补零的代码:
  1. rem 假设本机日期格式为yyyy-mm-dd-hh-nn
  2. set FileY=%date:~0,4%
  3. call :DateToMins %date:~0,4% %date:~5,2% %date:~8,2% %time:~0,2% %time:~3,2% Mins
  4. set /a Mins-=MinsAgo
  5. call :MinsToDate %Mins% DstYear DstMonth DstDay DstHour DstMin
复制代码

[ 本帖最后由 lazygc520 于 2009-8-27 15:30 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 00:10 , Processed in 0.021148 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表