【发布时间】:2012-07-24 12:04:46
【问题描述】:
我第一次在 Powershell 中探索真正的应用程序;我可以用传统的 .Net 语言编写代码,但我认为 Powershell 非常适合此类控制台应用程序。我搜索了 StackOverflow 并找到了我需要的(几乎)确切的脚本;我的问题是我想获取一个文件文件夹(在服务器 fsA 上)并在 fsB 上创建以文件日期命名的 7-Zip 存档。例如,在 2012 年 7 月 21 日最后写入的所有文件都可以在存档 20120721.7z 中找到。我基于这里找到的解决方案:Create a 7z Archive for files created by date using Powershell
这是我目前所拥有的:
$prog_dir = "C:\Progra~1\7-Zip\7z.exe"
$archive_dir = "\\fsa\Backup"
$input_dir = "\\fsb\Xml\Archive\"
$7zOpts = "-m0=PPMd:o32:mem192M"
$groups = dir $input_dir | group-object -property {$_.LastWriteTime.Date}
$groups | foreach{$cmd = $prog_dir + " a " + $archive_dir + "\$((Get-Date $_.Name).ToString(`"yyyyMMdd`")).7z $([string]::join(`" `", $_.Group)) " + $7zOpts} #; invoke-expression $cmd}
#
#Where to put this: "+ $input_dir +"???
#
$cmd
我似乎找不到在 foreach 行中指定输入目录的方法;我可以将它放在 join 语句的开头,但它只会将输入目录添加到列表中的第一个文件。例如:
$groups | foreach{$cmd = $prog_dir + " a " + $archive_dir + "\$((Get-Date $_.Name).ToString(`"yyyyMMdd`")).7z " + $input_dir + "$([string]::join(`" `", $_.Group)) " + $7zOpts} #; invoke-expression $cmd}
产生输出
C:\Progra~1\7-Zip\7z.exe a \\fsa\Backup\20120722.7z \\fsb\Xml\Archive\255IQR.xml 2573WV.xml 257RMC.xml
最后两个文件的前面没有完整路径?我做错了什么?
【问题讨论】:
-
这不是您当前问题的答案,而是一些建议:每当我想使用 PowerShell 压缩或解压缩内容时,我都会通过 SevenZipSharp 使用 7zip。我会花时间实现它,而不是试图让这个命令行按照你的意愿行事。如果您需要有关如何执行此操作的帮助,请告诉我,我可以为您指出一些文档或写一些东西。
-
@chris-n:我已经看到了一些东西;也许这是一个更好的方法。我会调查的。同时,您可以指出我的任何内容将不胜感激。
标签: powershell