我正在尝试使用PowerShell在H:\驱动器上压缩一堆视频文件。但是,由于驱动器很大,因此串行运行该命令将花费很长时间。这是我正在使用的代码的一小段。某些部分已被保留。
$shows = Get-ChildItem H:\
foreach($show in $shows){
Start-Job -ArgumentList $show -ScriptBlock {
param($show)
$destPath = "$($show.DirectoryName)\$($show.BaseName).zip"
Compress-Archive -Path $show.FullName -DestinationPath $destPath
}
}
当我运行Get-Job时,该作业在JobStateInfo中无故显示为已完成,但未创建.zip。我也通过使用Start-Job用$ destPath变量的Out-File替换Compress-Archive命令来运行一些测试。
Start-Job -ArgumentList $shows[0] -ScriptBlock {
param($show)
$show = [System.IO.FileInfo]$show
$destPath = "$($show.DirectoryName)\$($show.BaseName).zip"
$destPath | Out-File "$($show.DirectoryName)\test.txt"
}
已创建一个文本文件,它显示正确的目标路径。我已经以管理员身份运行PowerShell,然后再试一次,但这似乎也不起作用。不确定是否重要,但是我正在Windows 10(最新)上运行。
任何帮助将不胜感激。谢谢!
答案 0 :(得分:0)
不确定那不是您想要的,但是我想您首先需要创建一个档案,然后用演出更新该档案,所以我创建了一个名为archive的zip文件,并循环添加文件。
$shows = Get-ChildItem H:\
foreach($show in $shows){
Compress-Archive -Path $show.FullName -Update -DestinationPath "C:\archive"
}
答案 1 :(得分:0)
由于某种原因,在作业内部,序列化的fileinfo对象没有基本名称(这是脚本属性)。如果您有threadjob,那行得通。
dir | start-job { $input } | receive-job -wait -auto |
select name,basename,fullname
Name basename FullName
---- -------- --------
file1.txt C:\Users\js\foo\file1.txt
file2.txt C:\Users\js\foo\file2.txt
file3.txt C:\Users\js\foo\file3.txt