2013-07-16 41 views
5

Tôi cần tạo một tệp .zip của mỗi thư mục trong danh sách trong PowerShell. Tôi vì một số lý do không thể tìm ra cách để thay đổi từng thư mục để chạy một lệnh liên quan đến đường dẫn đó mặc dù.Chạy lệnh trên mỗi thư mục trong danh sách bằng PowerShell

Đây là tình hình của tôi:

$dir = Get-ChildItem d:\directory | ? {$_.PSIsContainer} 

$dir | ForEach-Object {Set-Location $_.FullName; 
Invoke-Expression "7z.exe A" + $_.Name + ".rar " + $_.Path + "\"} 

Lệnh là xấu xí, nhưng do cách mà 7Zip dường như phân tích văn bản, tôi đã phải đi theo con đường này. Tôi tin rằng lệnh nên tạo một tệp ZIP trong mỗi thư mục, với tên được đặt bằng tên thư mục và bao gồm tất cả các tệp trong thư mục.

Có vẻ như tôi bị kẹt trong một số địa ngục PowerShell mặc dù tôi không thể truy cập vào các giá trị của các đối tượng vì lý do nào đó.

Ví dụ: nếu tôi lặp lại $ dir, tôi sẽ thấy danh sách các thư mục của mình. Tuy nhiên, nếu tôi thử

gci $dir[1] 

PowerShell không trả lại gì. Nó không thực sự liệt kê đường dẫn thư mục chứa trong thuộc tính biến, nhưng thay vì cố gắng liệt kê các mục chứa trong giá trị đó, tất nhiên sẽ trống.

Điều gì cho ?! Làm thế nào để tôi làm điều này?

+0

Vì vậy, tôi đã tìm thấy một phương pháp khác trong một diễn đàn khác. Về cơ bản, tôi cần tách các chức năng điều hướng thư mục của mình khỏi xây dựng chỉ huy của mình, và tôi đã suy nghĩ quá mức. Trong thực tế, tôi đã quên về phương thức ForEach ($ var in $ vars) để đệ quy thông qua một mảng. http://sourceforge.net/p/sevenzip/discussion/45797/thread/49a7a85b/ – FoxDeploy

+0

Để làm cho người gọi zip của bạn sử dụng bí danh: Set-Alias ​​sz "C: \ Windows \ 7za.exe"; sz Một tập tin "$ ($ _. Name) .rar" $ _. Đường dẫn –

Trả lời

9

Bạn không cần đặt vị trí, bạn chỉ cần cung cấp đường dẫn đến 7z.exe. Ngoài ra, 7zip không nén thành Rar, chỉ giải nén.

$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 
} 
Các vấn đề liên quan