Fox*_*loy 8 powershell recursion
我需要在PowerShell的列表中创建每个目录的.zip.我出于某种原因无法弄清楚如何更改到每个目录以运行相对于该路径的命令.
这是我的情况:
$dir = Get-ChildItem d:\directory | ? {$_.PSIsContainer}
$dir | ForEach-Object {Set-Location $_.FullName;
Invoke-Expression "7z.exe A" + $_.Name + ".rar " + $_.Path + "\"}
Run Code Online (Sandbox Code Playgroud)
命令很难看,但是由于7Zip似乎解析文本的方式,我不得不这样做.我相信命令应该在每个目录中创建一个ZIP文件,名称设置为目录名,并包含目录中的所有文件.
看起来我陷入了一些PowerShell地狱,尽管我甚至无法出于某种原因访问对象的值.
例如,如果我回显$ dir,我会看到我的目录列表.但是,如果我试试
gci $dir[1]
Run Code Online (Sandbox Code Playgroud)
PowerShell什么都不返回.它实际上并不是枚举变量属性中包含的目录路径,而是尝试列出该值中包含的项目,这些项目当然是空的.
是什么赋予了?!我该怎么做呢?
log*_*ram 16
您不需要设置位置,只需提供7z.exe的路径即可.此外,7zip不会压缩到Rar,只能解压缩.
$dir = dir d:\directory | ?{$_.PSISContainer}
foreach ($d in $dir){
$name = Join-Path -Path $d.FullName -ChildPath ($d.Name + ".7z")
$path = Join-Path -Path $d.FullName -ChildPath "*"
& "C:\Program Files\7-Zip\7z.exe" a -t7z $name $path
}
Run Code Online (Sandbox Code Playgroud)
小智 5
如果您不想在压缩后删除日志,请注释掉第三行
function zip-log {
Compress-Archive *.log Logs.zip
Get-Item *.log | Remove-Item -Force
}
$dir = Get-ChildItem d:\directory| ? {$_.PSIsContainer}
$dir | ForEach-Object {Set-Location $_.FullName; zip-log}
Run Code Online (Sandbox Code Playgroud)