我在Windows环境中工作。
我有一个项目需要一个简短的脚本来确定文件夹中是否存在具有修改日期的文件。如果文件存在,则应复制文件,如果文件不存在,则应返回错误代码。
我更喜欢不使用第三方应用。我正在考虑使用powershell。
我可以拉一个列表来直观地确定文件是否存在,但是如果计数为零,我在批处理时返回错误。
Get-ChildItem -Path C:\temp\ftp\archive -Recurse | Where-Object { $_.lastwritetime.month -eq 3 -AND $_.lastwritetime.year -eq 2013 -AND $_.lastwritetime.day -eq 21}
非常感谢任何帮助!
答案 0 :(得分:2)
您可以将当前日期与每个文件LastWriteTime短日期的日期部分进行比较:
Get-ChildItem -Path C:\temp\ftp\archive -Recurse | Where-Object {
$_.LastWriteTime.ToShortDateString() -eq (Get-Date).ToShortDateString()
}
答案 1 :(得分:1)
Get-ChildItem $path -r | % {if((!($_.psiscontianer))-and(Get-Date $_.LastWriteTime -Uformat %D)-eq(Get-Date -UFormat %D)){$_.FullName}else{Write-Warning 'No from Today'}}
F.Y.I。在做大型工作时,如果你要经历TB文件,请使用foreach-object。它比Where-Object快。此方法在可用时直接处理数组中收集的对象,并且不等到收集所有对象。
您仍然可以通过计算日期
来提高效率$date = (Get-Date -UFormat %D)
Get-ChildItem $path -r | % {if((!($_.psiscontianer))-and(Get-Date $_.LastWriteTime -Uformat %D)-eq$date){$_.FullName}else{Write-Warning 'No from Today'}}
答案 2 :(得分:0)
我能够使用以下脚本:
$Date = Get-Date
$Date = $Date.adddays(-1)
$Date2Str = $Date.ToString("yyyMMdd")
$Files = gci "C:\\Temp\\FTP\\Archive"
ForEach ($File in $Files){
$FileDate = $File.LastWriteTime
$CTDate2Str = $FileDate.ToString("yyyyMMdd")
if ($CTDate2Str -eq $Date2Str) {Copy-Item $File.Fullname "C:\\Temp\\FTP"; exit}
}
Throw "No file was found to process"
答案 3 :(得分:0)
测试是否没有文件:
$out = Get-ChildItem -Path C:\temp\ftp\archive -Recurse | Where-Object {
$_.LastWriteTime.ToShortDateString() -eq (Get-Date).ToShortDateString()
};
if ($out.Count -gt 0)
//do something with your output
else
//sorry no file