我试图使用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-作业时,作业在JobStateInfo中显示为已完成,但没有创建.zip。我还运行了一些测试,方法是用$destPath变量的Out替换Compress命令,同时使用Start-Job。
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 (最新的)。
任何帮助都将不胜感激。谢谢!
发布于 2020-03-22 17:58:22
由于某种原因,在作业内部,序列化的fileinfo对象没有basename (它是scriptproperty)。如果你有线程作业,那就有效了。
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
发布于 2020-03-22 14:38:55
我不确定这是否是您想要的,但我认为您首先需要创建一个归档文件,然后用显示更新该归档文件,所以我创建了zip,名为归档,并通过添加文件进行循环。
$shows = Get-ChildItem H:\
foreach($show in $shows){
Compress-Archive -Path $show.FullName -Update -DestinationPath "C:\archive"
}
https://stackoverflow.com/questions/60804519
复制相似问题