我有以下问题:我正在编写一个循环,以检查某个文件夹中是否出现了一些文件,如果出现了,则将这些文件移动到另一个文件夹。
脚本现在运行得很好,下面是它的代码:
$BasePath = "C:\From"
$TargetPath = "C:\To"
$files = Get-ChildItem -File -Recurse -Path "$($BasePath)\$($Filename)" -ErrorAction SilentlyContinue
foreach ($file in $files)
{
$subdirectorypath = split-path $file.FullName.Replace($BasePath, "").Trim("\")
$targetdirectorypath = "$($TargetPath)\$($subdirectorypath)"
if ((Test-Path $targetdirectorypath) -eq $false)
{
Write-Host "Creating directory: $targetdirectorypath"
md $targetdirectorypath -Force
}
Write-Host "Copying file to: $($targetdirectorypath.TrimEnd('\'))\$($File.Name)"
Move-Item $File.FullName "$($targetdirectorypath.TrimEnd('\'))\$($File.Name)" -Force
}但是,由于其中一些文件可能相当大,我想以“失忆”的方式异步地移动这些文件。用powershell做这件事的最好方法是什么?这个脚本可能会永远运行,所以任何异步作业都必须在完成复制之后自行处理。
谢谢你的建议
发布于 2014-11-20 11:10:48
我会用一份背景工作:
$scriptblock = {
$BasePath = $args[0]
$TargetPath = $args[1]
$files = Get-ChildItem -File -Recurse -Path "$($BasePath)\$($Filename)" -ErrorAction SilentlyContinue
foreach ($file in $files)
{
$subdirectorypath = split-path $file.FullName.Replace($BasePath, "").Trim("\")
$targetdirectorypath = "$($TargetPath)\$($subdirectorypath)"
if ((Test-Path $targetdirectorypath) -eq $false)
{
Write-Host "Creating directory: $targetdirectorypath"
md $targetdirectorypath -Force
}
Write-Host "Copying file to: $($targetdirectorypath.TrimEnd('\'))\$($File.Name)"
Move-Item $File.FullName "$($targetdirectorypath.TrimEnd('\'))\$($File.Name)" -Force
}
}
$arguments = @("C:\From","C:\To")
start-job -scriptblock $scriptblock -ArgumentList $arguments如果以后希望看到作业的任何输出,可以执行以下操作
Get-Job | Receive-Jobhttps://stackoverflow.com/questions/27037932
复制相似问题