2

私は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}

どんな助けでも大歓迎です!

4

4 に答える 4

2

現在の日付を、各ファイルの日付部分とのみ比較できます。LastWriteTime短い日付:

Get-ChildItem -Path C:\temp\ftp\archive -Recurse | Where-Object  {
   $_.LastWriteTime.ToShortDateString() -eq (Get-Date).ToShortDateString() 
}
于 2013-03-27T13:57:49.800 に答える
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'}}

参考までに、大量のファイルを処理する場合など、大規模なジョブを実行する場合は、foreach-objectを使用します。Where-Objectよりも高速です。このメソッドは、使用可能な場合は配列に収集されたオブジェクトを直接処理し、すべてのオブジェクトが収集されるまで待機しません。

要約すると、PowerShellで同じ結果を達成するためのさまざまな方法が常にあります。私はあなたが覚えるのが最も簡単なものを使うことを提唱します。同時に、PowerShellは、アプローチ間でパフォーマンスに大きな違いをもたらす可能性があります。さらに詳しく知ることは有益です。

日付を計算することで、ラインをもう少し効率的にすることができます

$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'}}
于 2013-03-27T20:51:23.633 に答える
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"
于 2013-03-27T14:18:24.083 に答える
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
于 2013-03-27T14:22:55.087 に答える