2015-11-25 125 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

相关问题