2016-07-04 7 views
0

10分ごとに以下のスクリプトのようなものを実行します。PowerShellの 'if'ステートメントでLastWriteTimeを比較します。

私はファイルAとファイルBを持っています。10分ごとに、ファイルAがファイルBよりも新しいかどうかをチェックしたいと思います。もしそうならば、ファイルBのLastWriteTimeを現在の日付に設定します。 ifのステートメントが間違っていると思います...どうすれば修正できますか?私は上記の例では、私は現在の日付に変数$ bを設定していると思う

$a = Get-Item c:\users\testuser\desktop\test.xml | select LastWriteTime 

$b = Get-Item C:\users\testuser\Desktop\test.swf | select LastWriteTime 

if($a < $b) 
{ 
    $b.LastWriteTime = (Get-Date) 
} 

...私は、現在の日付に実際のファイルのLastWriteTimeを設定します。

答えて

1

if文でless than演算子を使用し、LastWriteTimeプロパティの代わりにGet-ChildItemを使用してファイルを取得してみてください。

$a = Get-ChildItem tst1.txt 
$b = Get-ChildItem tst2.txt 

if(($a.LastWriteTime) -lt ($b.LastWriteTime)) 
{ 
    $b.LastWriteTime = (Get-Date) 
} 

オペレータの詳細についてはhereをご覧ください。

+0

ありがとう!...私はすでにこれを試してくださいでしたが、次のようになります。 "@ {LastWriteTime = 7/4/2016 3:54:43 PM}"を "@ {LastWriteTime = 7/4/2016 2:04:11 PM}"と比較することはできません。オブジェクトが同じタイプでないか、オブジェクト "@ {LastWriteTime = 7/4/2016 3:54:43 PM}"が "IComparable"を実装していません。ラインで :5文字:4 + IF($ -lt $ b)は{ + ~~~~~~~~~ + CategoryInfo:NotSpecified:(:) []、ExtendedTypeSystemException + FullyQualifiedErrorId:PSObjectCompareTo – gurpsone

+0

私は答えを編集しました。 Get-Dateは日付をDatetimeに変換し、比較演算子を使用できます。 –

+0

まだ動作しません: Get-Date:パラメータ 'Date'をバインドできません。値 "@ {LastWriteTime = 7/4/2016 3:54:43 PM}"を "System.DateTime"と入力できません。エラー: "タイプ" Selected.System.IO.FileInfo "の" @ {LastWriteTime = 7/4/2016 3:54:43 PM} "値を" System.DateTime "と変換できません。 (Get-Date $ a)-lt(Get-Date $ b)){ + ~~ + CategoryInfo:InvalidArgument :(:) [Get-Date]、ParameterBindingException + FullyQualifiedErrorId:CannotConvertArgumentNoMessage、Microsoft.PowerShell.Commands.GetDateCommand – gurpsone

2

あなたは、ファイルの最終書き込み時刻を変更するには、次のような何かができる:名前空間、.NETクラス、および上記のコードで使用される関連メソッドの

$File1 = Get-ChildItem -Path "C:\Temp\test1.txt" 
$File2 = Get-ChildItem -Path "C:\Temp\test2.txt" 

#System.IO is a namespace of the file class in .NET and GetLastWriteTime/SetLastWriteTime are methods of this class. 
if ([System.IO.File]::GetLastWriteTime($File1) -lt [System.IO.File]::GetLastWriteTime($File2)) 
    { 
     Write-Output "File1 LastWriteTime is less than File2, Setting LastWriteTime on File2." 
      ([System.IO.File]::SetLastWriteTime($File2,(Get-Date))) 
    } 
ELSE 
    { 
     Write-Output "File1 LastWriteTime is not less than File2 LastWriteTime." 
    } 

詳しい情報は見つけることができますHere

希望すると便利です。

+0

これは一部の人にとってはうまくいくかもしれませんが、Powershellのようなものではないかもしれません。:)そしてそれはタイピングのaloooooootです。 – bart

1

これを試してください。これは、LastWriteTimeの日付を変更するためにはPowerShellの5

に私のために働いた、あなたは再びファイルに記述する必要があり、例えば、

$a = Get-Item fileA.txt 
$b = Get-Item fileB.txt 

if(($a.LastWriteTime) -lt ($b.LastWriteTime)) 
{ 
    fileB.txt | add-content -Value '' 
} 
関連する問題