2017-05-02 18 views
1

2日以上経過したFTPサーバーのリモート(.csv)ファイルを削除しようとしています。タイムスタンプが2日以上のリモートの.csvファイルを削除する

ファイルの最終更新時刻が正しく設定されていません。私は彼らの名前のタイムスタンプに頼る必要があります。

ファイルの名前は、Sales_201705010315.csv(日時)です。

私の現在のWinSCPのスクリプトは次のとおりです。私は、スクリプトを実行すると、ファイルが削除されていない

option batch on 
option confirm off 
open login ftp credentials 
cd /OUT 
rm *<1D 
exit 

。誰かが私のスクリプトを修正してもらえますか

+0

どのように.txtファイルを実行していますか?それはWinSCPスクリプトのようですが、あなたはWinSCPについて言及していません+何が質問ですか?スクリプトはよく見えます。あなたが好きなように動作しない場合は、何が間違っているのかを教えてください! + 2日前のファイルを選択したいのですが、なぜ* * <1D'を使用しますか? +実際にファイルを変更時刻で選択できますか?あなたの投稿はファイルの名前にタイムスタンプがあることを示しているからです。これはファイル変更時と同じではなく、 '* <1D 'で使用されます。ファイルの変更時刻がファイル名のタイムスタンプと一致するかどうか –

+0

こんにちは私はsales.batファイルを使用して.txtファイルを実行しています。 txtスクリプトはrmセクション以外は正常に動作しています。最初に私はrm * .csvを与え、すべてのファイルが削除されました。私の質問は、私は2日の古いファイルを削除する必要があります。ファイル名に基づいてファイルを削除する方法を教えてください。(sales_201705010315) – swetha

+0

ファイルの変更に基づいてファイルを選択することはできません。 –

答えて

0

FTPサーバー上のファイルには、元のファイルの日付/時刻ではなく、FTPサーバー上にファイルが作成された日時があることに注意してください。したがって、夜間に実行される自動化されたタスクによってファイルが転送された場合、FTPサーバーの日付/時刻は異なる場合があります。 FTPサーバーの日付/時刻がタイムサーバーに同期されていない場合、同じ問題が発生します。また、FTP送信マシンと受信マシンが異なるタイムゾーンにある場合、この問題が発生する可能性があります。

+0

* "FTPサーバー上のファイルには、元のファイルの日付/時刻ではなく、FTPサーバー上にファイルが作成された日時が記載されています。それはアップローダに依存します。 –

+0

だらけ。 rm %% timestamp -1d#yyyymmddhhss %%として実行しようとしました。しかし、これもそれらのファイルを削除しませんでした。スクリプトを変更して – swetha

+0

に一致する方法を教えてください。「どうやって知っていますか?」彼の削除コードで判断すると、私は彼がファイルをアップロードするのに似たようなものを使用していると仮定しています。彼は他のソフトウェアは言及していませんが、それは有効な点です。 – thx1138v2

0

これは確かに "1日より古い" ファイル(ない2日)を削除します:

rm *<1D 

file mask with time contraintsを参照してください。

しかし、この構文ではファイルの変更時刻が使用されます。

Delete files older than X days from FTP server with PowerShell or batch fileも参照してください。

名前のタイムスタンプに基づいてファイルを選択する必要がある場合は、より複雑です。


それは2日古いタイムスタンプを持つファイルを削除するのは簡単です:

rm Sales_%TIMESTAMP-2D#yyyymmdd%????.csv 

これは%TIMESTAMP% syntax with a relative timeを使用しています。構文は(2017年5月4日現在)にコマンド決意を行います:

rm Sales_20170502????.csv 

しかし、それは3日以上古いファイルを削除しません。毎日スクリプトを定期的に実行すると、それは問題ではありません。あなたが停止の1または数日間お応えしたい場合は、古いような日...タイムスタンプが2、3、4のファイルを削除することができます。

rm Sales_%TIMESTAMP-2D#yyyymmdd%????.csv 
rm Sales_%TIMESTAMP-3D#yyyymmdd%????.csv 
rm Sales_%TIMESTAMP-4D#yyyymmdd%????.csv 
... 

あなたが本当に持つすべてのファイルを削除する場合タイムスタンプ2日以上、スクリプトを書く必要がありますより強力な言語です。 PowerShell with use of WinSCP .NET assembly

例:

# Load WinSCP .NET assembly 
Add-Type -Path "WinSCPnet.dll" 

# Setup session options 
$sessionOptions = New-Object WinSCP.SessionOptions 

# Set up session options 
$sessionOptions = New-Object WinSCP.SessionOptions -Property @{ 
    Protocol = [WinSCP.Protocol]::Ftp 
    HostName = "ftp.examle.com" 
    UserName = "username" 
    Password = "password" 
} 

# Connect 
Write-Host "Connecting..." 
$session = New-Object WinSCP.Session 
$session.Open($sessionOptions) 

Write-Host "Listing files..." 
$remotePath = "/OUT" 
$files = $session.ListDirectory($remotePath).Files 

$prefix = "Sales_" 
$twoDaysBack = (Get-Date).AddDays(-2) 
$timestamp = $twoDaysBack.ToString("yyyyMMdd") 

foreach ($file in $files) 
{ 
    if (($file.Name.Length -gt ($prefix.Length + $timestamp.Length)) -and 
     ($file.Name.SubString(0, $prefix.Length) -eq $prefix) -and 
     ($file.Name.SubString($prefix.Length, $timestamp.Length) -le $timestamp)) 
    { 
     $path = [WinSCP.RemotePath]::EscapeFileMask($file.FullName) 
     $session.RemoveFiles($path).Check() 
     Write-Host "Deleted $($file.Name)" 
    } 
} 

Write-Host "Done" 
関連する問題