我要求将* .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
答案 0 :(得分:1)
如果我理解你要做的事情:
设置当前路径的变量,新路径以及获取内容的位置:
$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
}
那应该照顾好。
答案 1 :(得分:0)
非常感谢您提供的片段。
我有一个类似的任务,但需要先重命名文件,然后移动它,然后将扩展名改回原来的。
这是我最终得到的结果(我以前从未使用过 PS 代码,并且对一般编码的了解有限,因此对于草率感到抱歉)。
======
$FirstPath = "C:\0001\"
$NewPath = "C:\0002\"
$Stuff = Get-ChildItem "$FirstPath\*.txt" | select name, fullname
ForEach($I in $Stuff){
$curname = $I.name
$modname = $curname -Replace "txt","csv"
$CurFile = $FirstPath + $curname
$newname = $FirstPath + $modname
Rename-Item $CurFile $newname -Force
Move-Item $newname $NewPath
$NewFile = $NewPath + $modname
$origname = $NewPath + $curname
Rename-Item $NewFile $origname -Force
Start-Sleep -s 1
}
======