2015-09-28 117 views
0

我正在處理一個(非常簡單)的powershell腳本,它必須將多個子文件夾中的多個文件(在本例中爲.bak文件)壓縮到目標文件夾。Powershell和7zip - 來自多個(子)文件夾的多個文件

事情是這樣的:

來源:

F:\備份\ USER1 \ file1.bak
F:\備份\用戶2 \ file2.bak

要:

x:\ backupfolder \ users \ file1.zip
x:\ backupfolder \ users \ file2.zip

腳本:

$path = "f:\backup\" 
$dest = "x:\backupfolder\users\" 
$mask = "file*.bak" 

$days = 1 

$files = dir $path -Recurse -Include $mask | where { 
    ($_.LastWriteTime -gt (Get-Date).AddDays(-$days).AddHours(-$hours).AddMinutes(-$mins)) -and ($_.psIsContainer -eq $false) 
    } 

ForEach ($file in $files) 
    { 
    7z.exe a -tzip "$dest\$file.name.zip" $file 
    } 

的問題是,在這種情況下,我得到指定的路徑是無效的錯誤,因爲7zip的試圖在這個

x:\backupfolder\users\f:\backup\user1\file1.bak.name.zip 

形式創建存檔如果我嘗試這樣的:

7z.exe a -tzip "$dest\$_.basename.zip" $file 

我得到一個壓縮文件X:\ backupfolder \用戶\ .basename.zip

所有我想要這個紙條要做的是將壓縮文件(file1.bak)壓縮到一個名爲(file1.zip)的檔案文件夾中。

我在做什麼錯?

TYVM。

回答

2

你靠近。試試這個7z.exe a -tzip "$dest\$($file.basename).zip" $file

+0

Ty。 '7z.exe a -tzip「$ dest \ $($ file.basename).zip」$ file'做到了。 – JohnnyP

1

使用

7z.exe a -tzip "$dest\$($file.basename).zip" $file 
+0

Ty爲你的答案。嘗試了你的建議,並創建了一個名爲「.zip」的存檔,所以仍然不存在。 – JohnnyP

+1

如果它是在For-EachObject {}循環中,那麼它將工作,正如OPs代碼中所示。看起來操作系統在代碼中混合了代碼結構,因此導致了混淆。 – Matt

+0

對不起,我總是用$ _ – ALIENQuake

相關問題