web-dev-qa-db-ja.com

PowerShell内のすべてのファイルをループして、すべてのファイルを古い名前に圧縮する方法

ディレクトリ内のすべてのファイルを圧縮しようとしていますが、ディレクトリまたは古いファイル名を使用するように取得できないようです。 Zipファイルで保護されるように、古いファイルを削除する必要があります。

これは私がこれまでに思いついたものです:

$files = Get-ChildItem "D:\Backuptest\input\*" | 
ForEach ($filename in $files) { 
    $content = Get-Content $_.FullName
    & "C:\Program Files\WinRAR\Rar.exe" a -m0 -hps8Cs7y7RfLjYgYb -k -df $filename.rar
    }
2
Erik Venema

PowerShell Rarは、フォルダー内の複数のファイルをアーカイブ、暗号化、および削除します

Powershellと以下の構文I ...を使用します。

  • sourceディレクトリの変数を一番上に設定して、pathファイルを圧縮する、および
  • destinationディレクトリの変数を設定してpath暗号化されたアーカイブのrarファイルはに出力されます。

したがって、これにより、ファイルを削除する前にファイルの移動先を指示する前よりも少し明確になります(これ以上/System32など)。

この方法では、 ForEach(method) を使用して、ソースディレクトリ内のファイルごとにファイルオブジェクトファイル名を取得し、1つずつ、非ファイル名と同じファイル名で新しいrar暗号化ファイルを作成します。 -暗号化された[ソース]ファイルを作成し、その末尾に.rarを追加します。 (例:test123.txt となります test123.txt.rar暗号化してからtest123.txtが削除されます。

あなたの問題はどちらかだったと思います (1.)rar コマンドの構文が正しくない、または (2.)出力場所のrarコマンドに宛先がなく、そのディレクトリから暗黙的に実行され、そこに出力されるだけです。


Powershellスクリプト

$Source      = Get-ChildItem "D:\Backuptest\input"
$Destination = "D:\Backuptest\input"
$RarApp      = "C:\Program Files\WinRAR\Rar.exe" 

ForEach ($files in $Source) { 
    & $RarApp a $($Destination + $files.Name + ".rar") $($files.FullName) -m0 -hps8Cs7y7RfLjYgYb -k -df
    }

その他のリソース

1
Pimp Juice IT