我想创建一个脚本,帮助复制在时间范围内修改的文件。我想将$EndDate
参数保留为可选参数,在这种情况下,我希望脚本将今天的日期用作默认值。
以下是剧本:
param (
[Parameter(Mandatory=$True)]
[string]$Path,
[Parameter(Mandatory=$True)]
[string]$targetDir,
[Parameter(Mandatory=$True)]
[string]$BeginDate,
[Parameter(Mandatory=$False)]
[string]$EndDate,
[switch]$force
)
Get-ChildItem -Path $Path -Recurse | Where-Object {$_.LastWriteTime -gt $BeginDate -and $_.LastWriteTime -lt $EndDate }| cp -Destination $targetDir -Force
答案 0 :(得分:3)
[Parameter(Mandatory=$False)][string]$enddate = Get-Date,
给它一个默认值,你可能还想格式化它:
[Parameter(Mandatory=$False)][string]$enddate = (Get-Date -f dd\MM\yy)
答案 1 :(得分:2)
[Parameter(Mandatory=$False)]
[string]$EndDate = Get-Date
我不建议格式化它,因为这会将其从DateTime
类型转换为String
数据类型,从而导致Where-Object
编辑:刚刚意识到您明确地投射为[string]
。当你将Where-Object
与字符串进行比较时,AFAIK会破坏你的DateTime
(除非PowerShell自动将$EndDate
强制转换为DateTime
...)。
这使它更健壮。如果4c74356b41's answer得到你想要的东西,那就去吧!
param (
[Parameter(Mandatory=$True)]
[string]$Path,
[Parameter(Mandatory=$True)]
[string]$targetDir,
[Parameter(Mandatory=$True)]
[string]$BeginDate,
[Parameter(Mandatory=$False)]
[string]$EndDate = (Get-Date),
[switch]$force
)
try{
[datetime]$BeginDate = $BeginDate
}catch{
Write-Output "$BeginDate is not a valid datetime"
}
try{
[datetime]$EndDate = $EndDate
}catch{
Write-Output "$EndDate is not a valid datetime"
}
Get-ChildItem -Path $Path -Recurse | Where-Object {$_.LastWriteTime -gt $BeginDate -and $_.LastWriteTime -lt $EndDate }| cp -Destination $targetDir -Force