2013-07-16 10 views
5

PowerShellのリストにある各ディレクトリの.zipを作成する必要があります。私は何らかの理由で、たとえそのパスに関連したコマンドを実行するために各ディレクトリに変更する方法を見つけることができません。ここでリストの各ディレクトリでPowerShellを使用してコマンドを実行する

が私の状況です:

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

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

コマンドは醜いですが、原因7zipを、テキストを解析しているようだ道に、私はこの道を行かなければなりませんでした。コマンドはディレクトリ名と同じ名前のZIPファイルを各ディレクトリに作成し、ディレクトリ内のすべてのファイルをインクルードする必要があります。

私はPowerShell地獄に陥っているようですが、何らかの理由でオブジェクトの値にアクセスすることさえできません。

たとえば、私が$ dirをエコーし​​た場合、私はディレクトリのリストを見ることができます。ただし、試してみると

gci $dir[1] 

PowerShellは何も返しません。これは実際には変数プロパティに含まれるディレクトリパスを列挙するのではなく、その値に含まれる項目をリストしようとしています。

何がありますか?これはどうすればいいですか?

+0

私は別のフォーラムで別の方法を見つけました。私は基本的に私のディレクトリのナビゲーション機能を私の司令ビルから分離する必要があり、私は物事を思っていました。実際、配列を介して再帰するForEach($ var in $ vars)メソッドを忘れてしまいました。 http://sourceforge.net/p/sevenzip/discussion/45797/thread/49a7a85b/ – FoxDeploy

+0

ジップコールを一元化するには、別名を使用します。 Set-Alias sz "C:\ Windows \ 7za.exe"; sz A -tzip "$($ _。Name).rar" $ _。パス –

答えて

9

ロケーションを設定する必要はありません。ちょうど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 
} 
関連する問題