2015-11-25 48 views
-1

我有一個要求,即將* .csv文件從歐洲移動到位於北美的服務器,服務正在監聽處理這些文件的文件。腳本一次移動一個文件並重命名

我遇到的問題是,有時服務器上的監聽器會在文件被丟棄時拿起文件,並嘗試處理文件並失敗。

我建議做的事情是將文件移動爲.txt,然後在出現在目標目錄中時立即對其進行重命名。這工作正常,但我現在需要爲許多文件自動執行此過程。

注意,如果太多文件一次被重命名,監聽器服務也將停止。

簡單來說

For Each *.txt in Folder c:\Source 
    Move from C:\Source to \\ne-ifs-app\IN_FIELD_SERVICE\ 
    Rename \\ne-ifs-app\IN_FIELD_SERVICE\*.txt *.csv 
Repeat for next File 
+1

你的僞代碼的邏輯看起來很好。你真正的問題是什麼?鑑於_listener服務也將停止,如果太多的文件一次被重命名_我建議在循環中使用睡眠,以緩慢重命名下來。多久?你將不得不測試一下。你有實際的代碼給我們看? – Matt

回答

0

如果我理解你想要做什麼:

設置你的當前路徑,新路徑的變量和你在哪裏得到你的東西:

$FirstPath = "C:\Source\" 
$NewPath = "\\ne-ifs-app\IN_FIELD_SERVICE\" 
$Stuff = Get-ChildItem "$FirstPath\*.txt" | select name, fullname 

現在從$Stuff中取出每個項目並將其移至新路徑,在其新位置重命名該文件,然後等待10秒鐘,以執行$Stuff中的下一個文件:

ForEach($I in $Stuff){ 
    $newfile = $NewPath + $I.name 
    $newname = $newfile -Replace "txt","csv" 
    Move-Item $I.fullname $NewPath 
    Rename-Item $Newfile $newname -Force 
    Start-Sleep -s 10 
} 

這應該照顧到這一點。

+0

Nate - 你的傳奇,完美的作品, – yanickaps

+0

我只是想幫忙。請接受它作爲答案,以便它不在列表中。快樂的編碼,朋友。 – Nate

相關問題