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

[转载教程] PowerShell 技能长篇连载 - 2014 年 7 月第 2 辑

[复制链接]
发表于 2014-7-11 23:55:40 | 显示全部楼层 |阅读模式
本帖最后由 victorwoo 于 2014-7-12 00:04 编辑

查找两个日期之间的所有日子
http://blog.vichamp.com/powershe ... s-between-two-dates
复制命令行历史记录
http://blog.vichamp.com/powershe ... ing-command-history
复制命令行历史的工具函数
http://blog.vichamp.com/powershe ... d-history-as-a-tool
简单地读取注册表值
http://blog.vichamp.com/powershe ... istry-values-easily
接收多重输入
http://blog.vichamp.com/powershe ... ting-multiple-input
 楼主| 发表于 2014-7-12 00:05:28 | 显示全部楼层
由于粘贴过来会丢失格式,所以只整理了链接,请见谅。
发表于 2014-7-12 12:15:40 | 显示全部楼层
代码放在code标签里面就可以了,比如:
http://bbs.bathome.net/thread-3473-1-1.html

如果您需要知道两个日期之间的间隔天数,那么可以用 New-TimeSpan 轻松地获得:
  1. $startdate = Get-Date
  2. $enddate = Get-Date -Date '2014-09-12'

  3. $difference = New-TimeSpan -Start $startdate -End $enddate
  4. $difference.Days
复制代码
然而,如果您不仅想知道两者之间的间隔天数,而且还希望精确地获取每一天的日期对象,那么可以用这个方法:
  1. $startdate = Get-Date
  2. $enddate = Get-Date -Date '2014-09-12'

  3. $difference = New-TimeSpan -Start $startdate -End $enddate
  4. $days = [Math]::Ceiling($difference.TotalDays)+1

  5. 1..$days | ForEach-Object {
  6.   $startdate
  7.   $startdate = $startdate.AddDays(1)
  8. }
复制代码
这一次,PowerShell 输出两个指定日期之间的所有日期对象。

当您了解了精确获取每个日期对象(而不仅是总天数)的方法之后,您可以过滤(例如以星期数),并查找距离您放假或退休之前还有多少个星期天或工作日。

以下代码是获取工作日用的:
  1. $startdate = Get-Date
  2. $enddate = Get-Date -Date '2014-09-12'

  3. $difference = New-TimeSpan -Start $startdate -End $enddate
  4. $difference.Days

  5. $days = [Math]::Ceiling($difference.TotalDays)+1

  6. 1..$days | ForEach-Object {
  7.   $startdate
  8.   $startdate = $startdate.AddDays(1)
  9. } |
  10.   Where-Object { $_.DayOfWeek -gt 0 -and $_.DayOfWeek -lt 6}
复制代码
这段代码时统计工作日天数用的:
  1. $startdate = Get-Date
  2. $enddate = Get-Date -Date '2014-09-12'

  3. $difference = New-TimeSpan -Start $startdate -End $enddate
  4. "Days in all: " + $difference.Days

  5. $days = [Math]::Ceiling($difference.TotalDays)+1

  6. $workdays = 1..$days | ForEach-Object {
  7.   $startdate
  8.   $startdate = $startdate.AddDays(1)
  9. } |
  10.   Where-Object { $_.DayOfWeek -gt 0 -and $_.DayOfWeek -lt 6} |
  11.   Measure-Object |
  12.   Select-Object -ExpandProperty Count

  13. "Workdays: $workdays"
复制代码
 楼主| 发表于 2014-7-12 22:45:21 | 显示全部楼层
我知道。
既然是搞脚本的,就应该用脚本来解决。
近期在做博客改版,下一阶段写一些脚本来做这些事情。
 楼主| 发表于 2014-7-18 12:00:35 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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