Lua中os库的使用(execute,date,clock,time)

本文详细介绍了Lua语言中OS模块的使用方法,包括获取时间戳、格式化日期、文件操作如重命名和删除,以及执行系统命令等。通过具体示例展示了如何利用OS模块进行时间处理和文件管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

--更多详细参考 http://luaer.diandian.com/post/2011-10-09/5660047 --
--更多详细参考 http://blog.csdn.net/goodai007/article/details/8077285--
local function main()
	print(os.clock()) --
	print(os.time())
	dateTable = os.date("*t") --返回一张时间table表{year,month,day,hour,min,sec}
	print(dateTable.year.."~"..dateTable.month.."~"..dateTable.day.."~"..
		  dateTable.hour.."~"..dateTable.min.."~"..dateTable.sec)
	print("rename and remove~~")
	os.rename("./src/Demo.txt","./Demo.bbb") --os.rename()操作可以移动文件的位置只需要在rename时,重新配置路径就可以了
	os.remove("./Demo.bbb")  --删除文件
	--执行命令
	os.execute("mkdir vokie123") --创建文件夹
	os.execute("ls")
	os.execute("dir")
	os.execute("pause")
	os.exit() --停止Lua的主线程
end

main()

输出结果:

0.046
1385609104
2013~11~28~11~25~4
rename and remove~~
src
vokie123
 驱动器 D 中的卷是 SOFTWARE
 卷的序列号是 8236-DBD6


 D:\luaDev\Test2 的目录


2013-11-28  10:26    <DIR>          .
2013-11-28  10:26    <DIR>          ..
2013-11-28  10:26               382 .project
2013-11-28  10:26    <DIR>          src
2013-11-28  10:26               213 .buildpath
2013-11-28  11:25    <DIR>          vokie123
               2 个文件            595 字节
               4 个目录 67,707,273,216 可用字节
请按任意键继续. . . 


date格式format小记:

 

例如:
t = os.date("*t", os.time());
for i, v in pairs(t) do
      print(i, v);
end

输出:
hour  14
min   58
wday  2
day   10
month  8
year  2009
sec   18
yday  222
isdst  false

对于其它的格式字符串,os.date会将日期格式化为一个字符串

例如:
print(os.date("today is %A, in %B"))      -->today is Tuesday, in May
print(os.date("%x", 906000490))           -->09/16/1998

所有格式化字符串如下:
  
%a      一星期中天数的简写                      (Wed)
%A      一星期中天数的全称                      (Wednesday)
%b      月份的简写                                  (Sep)
%B      月份的全称                                  (September)
%c      日期和时间                                   (09/16/98 23:48:10)
%d      一个月中的第几天                          (16)[0 ~ 31]
%H      24小时制中的小时数                      (23)[00 ~ 23]
%I      12小时制中的小时数                       (11)[01 ~ 12]
%j      一年中的第几天                             (259)[01 ~ 366]
%M      分钟数                                       (48)[00 ~ 59]
%m      月份数                                       (09)[01 ~ 12]     
%P      "上午(am)" 或 "下午(pm)"               (pm)
%S      秒数                                          (10)[00 ~ 59]
%w      一星期中的第几天                         (3)[0 ~ 6 = 星期天 ~ 星期六]

 %W 一年中的第几个星期 0 ~ 52
%x      日期                                          (09/16/98)
%X      时间                                          (23:48:10)
%y      两位数的年份                               (90)[00 ~ 99]
%Y      完整的年份                                 (2009)
%%      字符串'%'

 

时间戳转日期,日期转时间戳的几个小函数:

 1 function daysDifference(min_timestamp, max_timestamp)
 2     local temp = nil
 3     if max_timestamp < min_timestamp then
 4         temp = min_timestamp
 5         min_timestamp = max_timestamp
 6         max_timestamp = temp
 7     end
 8 
 9     local min_days = checkint(min_timestamp / 86400)
10     local max_days = checkint(max_timestamp / 86400)
11     return (max_days - min_days)
12 end
13 
14 function timeStampConvertToDate(timestamp)
15     date_string = string.format(os.date("%x",timestamp))
16     local date_table = {}
17     local t = string.split(date_string, "/")
18     date_table.YEAR = checkint(t[3])
19     date_table.MONTH = checkint(t[1])
20     date_table.DAY = checkint(t[2])
21     print("YEAR,MONTH,DAY = "..date_table.YEAR..","..date_table.MONTH..","..date_table.DAY)
22     return date_table
23 end
24 
25 
26 --date_t 格式要求:
27 --local date_t = {year=2005, month=11, day=6, hour=22,min=18,sec=30,isdst=false}
28 --isdst表示是否夏令时 
29 function DateConvertToTimeStamp(date_t)
30     return os.time(date_t)
31 end

 





 

转载于:https://www.cnblogs.com/vokie/p/3602084.html

### 使用 `os.execute` 调用时不显示命令提示符窗口 当在 Windows 平台上使用 Lua 的 `os.execute` 函数调用外部程序时,默认情况下会弹出黑色的命令行窗口。为了防止这个窗口出现,可以采用以下几种方法: #### 方法一:通过 luacom 隐藏 CMD 窗口 如果允许安装额外的话,可以通过 Luacom 来创建 COM 对象并运行进程而不显示窗口。 ```lua local com = require "luacom" function run_hidden(command) local shell = com.CreateObject("WScript.Shell") shell:Run('"'..command..'"', 0, false) end run_hidden("notepad.exe") -- 这里替换为实际要执行的命令 ``` 这种方法依赖于 Luacom 扩展的支持[^1]。 #### 方法二:利用 PowerShell 启动无界面的应用程序 对于不需要交互式的命令操作,可以直接借助 PowerShell 实现静默启动应用程序的效果。 ```lua os.execute([[powershell -WindowStyle Hidden start-process notepad]]) ``` 此方式适用于大多数情况下的简单命令执行需求,并且无需引入第三方模块支持。 #### 方法三:编写批处理文件并通过 VBScript 隐藏执行 另一种思路是先写入一个 .bat 文件保存待执行指令,再由 VBScript 完成对该 bat 文件的无声调用。 ```lua -- 创建临时批处理文件 io.output(io.tmpfile()) print[[start "" /b notepad]] io.close() -- 构建 vbscript 字符串用于隐藏 cmd 窗口 vbs_code=[[Set WshShell=WScript.CreateObject("WScript.Shell"):WshShell.Run "]].. io.open(io.tmpname()):read("*a").."",0,True" -- 将其存盘以便后续读取 temp_vbs=io.tmpname() f=assert(io.open(temp_vbs,"w")) f:write(vbs_code) f:close() -- 利用 os.execute 加载 vbscript 达到目的 os.execute(temp_vbs) collectgarbage() -- 清理垃圾回收机制中的残留资源 ``` 这种方式较为复杂但是兼容性较好,在某些特殊场景下可能更适用。 以上三种方案都可以有效解决 `os.execute` 带来的黑框问题,开发者可以根据实际情况选择最合适的一种来应用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值