求助,win下用批处理对sqlite进行备份出现问题

2013-08-01 13:25:02 +08:00
 jackyzy823
set year=%date:~0,4%
set month=%date:~5,2%
set day=%date:~8,2%

sqlite3 xxx.db ".dump" > %year%-%month%-%day%.sql

批处理如上
问题是:在cmd里执行这个文件能正常备份,而直接双击却无法生成备份文件。

奇怪的是批处理在执行的时候 sqlite3 xxx.db ".dump" 1>%year%-%month%-%day%.sql
显示的是执行这条命令,但是我实在找不到这个1是从哪里来的?

求各位V友帮助,谢谢。
2941 次点击
所在节点    问与答
10 条回复
timonwong
2013-08-01 14:02:41 +08:00
a) "1" 代表stdout, batch 就是这样parse的,不加file descriptor的话默认就是1, stderr不使用 "2>" 重定向的话会直接写到控制台。

b) 时间日期问题我觉得是环境不同,你在命令行里面和Explorer里面的日期格式可能不一样。我觉得最好还是使用这种方法获取时间:

```
setlocal EnableDelayedExpansion
for /F "skip=1 tokens=1-3" %%A in ('WMIC Path Win32_LocalTime Get Day^,Month^,Year /Format:table') do (
if "%%B" neq "" (
set year=%%C
set month=0%%B
set day=0%%A
)
)
:: remove additional leading zeros
set month=%month:~-2%
set day=%day:~-2%

:: your logic here
```
vmebeh
2013-08-01 14:09:58 +08:00
批处理文件里面变量要用%%,
vmebeh
2013-08-01 14:12:51 +08:00
for /? 里面有说明。
jackyzy823
2013-08-01 14:14:26 +08:00
@timonwong 其实文件名称不重要,关键是双击这个bat并没有生成文件,而用cmd命令行运行这个bat可以生成,而我需要双击生成
timonwong
2013-08-01 14:16:41 +08:00
@jackyzy823
刚才代码我试过了,可以双击生成。我之前想的就是date time的区域设置, 你的命令行控制台和Windows Explorer有所不同,直接导致了文件名错误。

调试你可以简单地在最后加个pause看问题具体出在哪儿。
jackyzy823
2013-08-01 14:21:34 +08:00
@timonwong 我用普通的文件名也测试过。。。情况依旧 以及感谢您帮我测试。
timonwong
2013-08-01 14:24:08 +08:00
@jackyzy823
那总有错误信息啊,最后加pause看看之前有什么错误?
jackyzy823
2013-08-01 14:27:19 +08:00
@timonwong 就单纯地什么都没发生,难道在批处理中需要设置当前路径?
jackyzy823
2013-08-01 14:28:51 +08:00
@timonwong 嗯,的确是忘记设置路径了,以及感谢您的帮助。
jackyzy823
2013-08-01 14:31:25 +08:00
@timonwong 不对。。在注册表里给cmd启动是增加了一个AutoRun=。=导致改了路径。。。==|||

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/77651

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX