有没有办法在运行另一个命令之前等待复制过程完成?
我尝试了Start-job
和Wait-Job
,但它不起作用。
$func = {
function move-tozip
{
param([string]$filedest)
$Shell = New-Object -com Shell.Application
$b = $shell.namespace($zippath.ToString())
$b.CopyHere($filedest.tostring())
#Remove-Item -Path $filedest
}
}
start-job -InitializationScript $func -ScriptBlock {move-tozip $args[0]} -ArgumentList $file
答案 0 :(得分:0)
等待作业完成的最简单方法是给它命名并告诉Wait-Job
等待具有该名称的任务,您的脚本将等待名为WaitForMe
的作业完成后再运行其余的代码。
将-Name
参数与下面的代码一起使用:
$func =
{
function Move-ToZip
{
Param([string[]]$path, [string]$zipfile)
if (-not $zipfile.EndsWith('.zip')) {$zipfile += '.zip'}
if (-not (test-path $zipfile))
{
set-content $zipfile ("PK" + [char]5 + [char]6 + ("$([char]0)" * 18))
}
$shell = (new-object -com shell.application).NameSpace($zipfile)
foreach($file in $path)
{
$shell.CopyHere($file)
start-sleep -milliseconds 100
}
}
}
Start-Job -Name "WaitForMe" -InitializationScript $func -ScriptBlock {Move-ToZip -path $args[0] -zipfile $args[1]} -ArgumentList "D:\data.log", "D:\datazip.zip"
Write-Host "Waiting for job to complete"
Wait-Job -Name "WaitForMe"
Write-Host "Job has completed :D"
压缩一个文件或文件夹
-ArgumentList "D:\testfile.log", "D:\datazip.zip"
压缩多个文件或文件夹
-ArgumentList @("D:\testfile.log","D:\testFolder1"), "D:\testzip.zip"
编辑17/12/2015
我已将This MSDN blog的代码改编为Move-ToZip功能,因为之前的代码根本不适用于我,我已经在文件和文件夹上成功测试了上述代码。我没有测试过这种方法的性能,如果你想压缩/压缩多个大文件/文件夹,我强烈建议使用已知的工作库或第三方实用程序,如7zip。