7zip - powershell 排除 files/folders 变量
7zip - powershell exclude files/folders with variable
我正在尝试压缩一个文件夹,但使用 powershell 排除了多个目录。
我得到以下信息:
if (-not (test-path "$env:ProgramFiles-Zipz.exe")) {throw "$env:ProgramFiles-Zipz.exe needed"}
set-alias sz "$env:ProgramFiles-Zipz.exe"
$Source = "D:\Zip\*"
$Target = "D:\backup.7z"
$exclude = 'Customer\Images\*'
sz a -xr!'$Customer\Images\*' $Target $Source
这很好用.. 但是当我想将 -xr!
更改为 -xr!'$exclude'
或 -xr!$exclude
时,它由于某种原因停止工作。上面分配的变量没有被解析吗?
两件事:
- 如果要扩展变量,请使用双引号内的变量:
sz a "-xr!$exclude" $Target $Source
- 使用模式
Customer\Images\*
排除目录 Images
中的所有文件,但在生成的文件中包含一个空目录。如果您不想包含该目录(或其任何文件),请使用 Customer\Images
。
试试这个...
if (-not (Test-Path "$env:ProgramFiles-Zipz.exe")) {throw "$env:ProgramFiles-Zipz.exe needed"}
ZipPath = "$env:ProgramFiles-Zipz.exe"
$Source = "D:\Zip\*"
$Target = "D:\backup.7z"
$foldersToExclude = 'folder1', 'folder2'
zipParams = @('a',$Target)
@($foldersToExclude) | ForEach-Object { zipParams += "`"-xr!$_`"" }
zipParams += $Source
Write-Host (ZipPath+' '+zipParams -join ' ') # debug - show the command line
&ZipPath zipParams
我们创建一个参数数组以传递到 7zip,包括排除的文件夹。当我们追加排除的文件夹时,我们在文件夹名称前加上 -xr!
标志并将它们包装在双引号中。
#debug
行将结果命令行输出到控制台
我对 7zip 的调用略有不同,方法是使用 7zip 可执行文件创建一个字符串,然后在调用该字符串路径前加上一个符号。
此方法可以从最终存档中排除多个文件夹,包括 folder\subfolder
结构。
我正在尝试压缩一个文件夹,但使用 powershell 排除了多个目录。
我得到以下信息:
if (-not (test-path "$env:ProgramFiles-Zipz.exe")) {throw "$env:ProgramFiles-Zipz.exe needed"}
set-alias sz "$env:ProgramFiles-Zipz.exe"
$Source = "D:\Zip\*"
$Target = "D:\backup.7z"
$exclude = 'Customer\Images\*'
sz a -xr!'$Customer\Images\*' $Target $Source
这很好用.. 但是当我想将 -xr!
更改为 -xr!'$exclude'
或 -xr!$exclude
时,它由于某种原因停止工作。上面分配的变量没有被解析吗?
两件事:
- 如果要扩展变量,请使用双引号内的变量:
sz a "-xr!$exclude" $Target $Source
- 使用模式
Customer\Images\*
排除目录Images
中的所有文件,但在生成的文件中包含一个空目录。如果您不想包含该目录(或其任何文件),请使用Customer\Images
。
试试这个...
if (-not (Test-Path "$env:ProgramFiles-Zipz.exe")) {throw "$env:ProgramFiles-Zipz.exe needed"}
ZipPath = "$env:ProgramFiles-Zipz.exe"
$Source = "D:\Zip\*"
$Target = "D:\backup.7z"
$foldersToExclude = 'folder1', 'folder2'
zipParams = @('a',$Target)
@($foldersToExclude) | ForEach-Object { zipParams += "`"-xr!$_`"" }
zipParams += $Source
Write-Host (ZipPath+' '+zipParams -join ' ') # debug - show the command line
&ZipPath zipParams
我们创建一个参数数组以传递到 7zip,包括排除的文件夹。当我们追加排除的文件夹时,我们在文件夹名称前加上 -xr!
标志并将它们包装在双引号中。
#debug
行将结果命令行输出到控制台
我对 7zip 的调用略有不同,方法是使用 7zip 可执行文件创建一个字符串,然后在调用该字符串路径前加上一个符号。
此方法可以从最终存档中排除多个文件夹,包括 folder\subfolder
结构。