我有一个文件,上面有带方向的文件列表。
赞:
XXXXXX/sample.txt
XXXXXX/dog.txt
XXXXXX/cat.docx
ZZZZ/lamp.jpg
如何压缩所有文件并保存带有子方向的文件。
现在,我可以压缩所有文件,但没有方向。
赞:
sample.txt
dog.txt
cat.docx
lamp.jpg
对不起,我的英语不好。
答案 0 :(得分:1)
foreach ($filename in Get-Content .\ListOfFilesToZip.txt)
{
Compress-Archive -Update $filename .\ZipFile.zip
}
答案 1 :(得分:0)
编辑是否有关于从路径获取文件名的问题
最有效的方法是使用正则表达式,但是如果您不习惯使用它们,它们可能会相当复杂。
一种更简单的方法是简单地分割每个字符串并选择文件名所在的最后一部分:
$string = "c:\asd\qwe\zxc\dog.txt"
#Split the string on each \
$string.Split("\")
#This will output a list like this
c:
asd
qwe
zxc
dog.txt
现在,我们只想选择此列表中的最后一个条目,因为文件名始终位于路径的最后。因此,我们为此选择对象。
$string.Split("\") | Select-Object -Last 1
这将返回:
dog.txt
您可以通过列表中的foreach进行操作,以获取每个项目的内容。
答案 2 :(得分:0)
不确定是否有更好的方法,但是您可以创建一个临时文件夹,将要归档的文件与所需的文件夹结构一起复制到那儿,然后将整个内容压缩。
看看here(不是我的代码,但似乎确实如此)
答案 3 :(得分:0)
以下功能可以将整个文件夹结构压缩为单个zip文件,并将该结构保留在zip文件中(甚至可以与PowerShell <5一起使用)。
function createZipFile($outputFileName, $sourceDirectory){
Add-Type -AssemblyName System.IO.Compression.FileSystem
$compressionLevel = [System.IO.Compression.CompressionLevel]::Optimal
[System.IO.Compression.ZipFile]::CreateFromDirectory($sourceDirectory, $outputFileName, $compressionLevel, $false)
}
这样称呼:
createZipFile "c:\temp\output.zip" "c:\folder\to\compress"