Powershell创建文件夹中每个文件的zip(或7z),然后删除原始文件

时间:2014-02-02 23:03:24

标签: batch-file powershell batch-processing 7zip

我有一个带有Ton of iso图像的文件夹。我发现很多图像都有伪数据,以达到原始DVD的大小。我可以通过拉链来节省大量空间。我尝试创建批处理文件,但无法正常工作。

所以,我基本上希望它为文件夹中的每个文件创建一个.7z,然后删除原始文件。

这就是我得到的。它会压缩文件,但之后可以删除文件。无法弄清楚原因:

function zipFiles()
 {
 dir *.iso| ForEach-Object { & "7z.exe" a -mx9 $_.BaseName $_.Name } 
 }

function delFiles()
 {
 dir *.iso| ForEach-Object { & Remove-Item $_.BaseName $_.Name } 
 }

zipFiles
delFiles

4 个答案:

答案 0 :(得分:0)

试试这个:

pushd C:\...[path to folder]
for /r %%a in (*) do (
if "%%~xa"==".iso" (
7z a "%%~na.zip" "%%~a"
if exist "%%~na.zip" (
Del "%%~na.iso"
)
)
)
popd

注意:我认真地建议在Echo7z命令之前添加Del以查看程序在运行之前将执行的操作。如果您注意到我只创建了压缩.iso个文件。

最后我建议改用这个程序:

pushd C:\...[path to folder]
7z a Images.zip *.iso
Echo.&Echo Check all the files are compressed
pause
del *.iso
popd

将它们全部压缩为1 .zip文件,可以在资源管理器中打开,并且仍然可以接收单个文件。它还将提高压缩比。我再次建议首先检查所有文件是否已压缩,然后继续执行中间暂停命令。

查看7-zip.chm文件以获取7-zip文件夹中的更多帮助。

答案 1 :(得分:0)

尝试将-force添加到remove-item

答案 2 :(得分:0)

更改 delFiles 功能:

function delFiles()
 {
     dir *.iso| ForEach-Object { Remove-Item $_.FullName } 
 }

答案 3 :(得分:0)

我认为解决方案就在这里:

Superuser - 7-Zip script to delete after zipping