标题: [日期时间] 批处理命令FOR循环里面定义变量取值错误 [打印本页]
作者: Forever520 时间: 2015-7-29 11:18 标题: 批处理命令FOR循环里面定义变量取值错误
想定功能:
在FOR循环了进行某个操作(如导出数据库表数据),想输出记录一下没一次操作的开始结束时间。
问题点:
执行了下面的代码后,发现在FOR循环里面重新定义的变量【nowtime】的值,每次都是取的FOR循环外面定义的同名变量【nowtime】的值。
发下这个问题后,做了一下还尝试:
1、怀疑同名变量的问题。把FOR循环里面的变量名改变一下【set nowtime1=%time: =0%】,但是发现输出【2015/07/29 ~,8 】。还是有问题。
2、怀疑执行时间短,瞬间执行完了。每次PAUSE暂停几秒,但是问题依旧。
求助事项:
请各位看看我的代码有什么问题,以及如何实现我要求的功能。
代码如下:
--------------------------------------------------------------------代码开始(本行非代码行)--------------------------------------------------------------------- @ECHO OFF & setlocal EnableDelayedExpansion
- TITLE test
-
- ECHO ##***************************************************************************## > log.txt
- REM BAT运行开始时间记录
- set nowtime=%time: =0%
- ECHO %date% %nowtime:~,8% >> log.txt
- ECHO .>> log.txt
-
- SET COUNT=0
- FOR %%i IN (1,2,3,4,5,6,7,8,9,10) DO (
- SET /A COUNT+=1
- ECHO No.!COUNT! [%%i] >> log.txt
-
- REM 处理开始时间记录
- set nowtime=%time: =0%
- ECHO %date% %nowtime:~,8% >> log.txt
-
- REM 暂停处理
- PAUSE
-
- REM 处理结束时间记录
- set nowtime=%time: =0%
- ECHO %date% %nowtime:~,8% >> log.txt
- )
- ECHO . >> log.txt
-
- REM BAT运行结束时间记录
- set nowtime=%time: =0%
- ECHO %date% %nowtime:~,8% >> log.txt
- ECHO ##***************************************************************************## >> log.txt
- PAUSE>nul
- @ECHO ON
复制代码
--------------------------------------------------------------------代码结束(本行非代码行)--------------------------------------------------------------------
实行结果如下:
--------------------------------------------------------------------结果开始(本行非结果行)--------------------------------------------------------------------
##***************************************************************************##
2015/07/29 10:17:00
.
No.1 [1]
2015/07/29 10:17:00
2015/07/29 10:17:00
No.2 [2]
2015/07/29 10:17:00
2015/07/29 10:17:00
No.3 [3]
2015/07/29 10:17:00
2015/07/29 10:17:00
No.4 [4]
2015/07/29 10:17:00
2015/07/29 10:17:00
No.5 [5]
2015/07/29 10:17:00
2015/07/29 10:17:00
No.6 [6]
2015/07/29 10:17:00
2015/07/29 10:17:00
No.7 [7]
2015/07/29 10:17:00
2015/07/29 10:17:00
No.8 [8]
2015/07/29 10:17:00
2015/07/29 10:17:00
No.9 [9]
2015/07/29 10:17:00
2015/07/29 10:17:00
No.10 [10]
2015/07/29 10:17:00
2015/07/29 10:17:00
.
2015/07/29 10:17:04
##***************************************************************************## --------------------------------------------------------------------结果结束(本行非结果行)--------------------------------------------------------------------
作者: flyinnet9 时间: 2015-7-29 11:32
输出当前时间直接echo %date% %time:~0,8%
作者: Forever520 时间: 2015-7-29 11:42
回复 2# flyinnet9
【输出当前时间直接echo %date% %time:~0,8%】这样写在循环里面是可以输出时间的,但是10次循环输出的时间是一样的,并非当前时间。
在循环里面正确的写法是 【CALL ECHO %%date%% %%time:~0,8%%】这样输出的时间每次不一样,为真正的当前时间。
为什么定义变量就不行了?
作者: pcl_test 时间: 2015-7-29 12:51
开了变量延迟就该利用- @echo off&setlocal EnableDelayedExpansion
- for /l %%a in (1 1 100) do echo;!time!
- pause
复制代码
作者: Forever520 时间: 2015-7-29 13:37
回复 4# pcl_test
一语惊醒梦中人,还是自己学艺不精。
多谢!
setlocal EnableDelayedExpansion 开启变量延迟后,需要使用“!”来引用变量。
修改后的代码:
--------------------------------------------------------------------代码开始(本行非代码行)--------------------------------------------------------------------- @ECHO OFF & setlocal EnableDelayedExpansion
- TITLE test
-
- ECHO ##***************************************************************************## > log.txt
- REM BAT运行开始时间记录
- set nowtime=%time: =0%
- ECHO %date% %nowtime:~,8% >> log.txt
- ECHO .>> log.txt
-
- SET COUNT=0
- FOR %%i IN (1,2,3,4,5,6,7,8,9,10) DO (
- SET /A COUNT+=1
- ECHO No.!COUNT! [%%i] >> log.txt
-
- REM 处理开始时间记录
- set nowtime=!time: =0!
- ECHO !date! !nowtime:~,8! >> log.txt
-
- REM 暂停处理
- PAUSE
-
- REM 处理结束时间记录
- set nowtime=!time: =0!
- ECHO !date! !nowtime:~,8! >> log.txt
- )
- ECHO . >> log.txt
-
- REM BAT运行结束时间记录
- set nowtime=%time: =0%
- ECHO %date% %nowtime:~,8% >> log.txt
- ECHO ##***************************************************************************## >> log.txt
- PAUSE>nul
- @ECHO ON
复制代码
--------------------------------------------------------------------代码结束(本行非代码行)--------------------------------------------------------------------
修改后实行结果:
--------------------------------------------------------------------结果开始(本行非结果行)--------------------------------------------------------------------- ##***************************************************************************##
- 2015/07/29 13:23:24
- .
- No.1 [1]
- 2015/07/29 13:23:24
- 2015/07/29 13:23:27
- No.2 [2]
- 2015/07/29 13:23:27
- 2015/07/29 13:23:29
- No.3 [3]
- 2015/07/29 13:23:29
- 2015/07/29 13:23:30
- No.4 [4]
- 2015/07/29 13:23:30
- 2015/07/29 13:23:32
- No.5 [5]
- 2015/07/29 13:23:32
- 2015/07/29 13:23:33
- No.6 [6]
- 2015/07/29 13:23:33
- 2015/07/29 13:23:35
- No.7 [7]
- 2015/07/29 13:23:35
- 2015/07/29 13:23:37
- No.8 [8]
- 2015/07/29 13:23:37
- 2015/07/29 13:23:39
- No.9 [9]
- 2015/07/29 13:23:39
- 2015/07/29 13:23:40
- No.10 [10]
- 2015/07/29 13:23:40
- 2015/07/29 13:23:41
- .
- 2015/07/29 13:23:41
复制代码
##***************************************************************************##
--------------------------------------------------------------------结果结束(本行非结果行)--------------------------------------------------------------------
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |