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 行で入力ディレクトリを指定する方法が見つからないようです。結合ステートメントの先頭に配置できますが、入力ディレクトリがリストの最初のファイルに追加されるだけです。例えば:
$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
最後の 2 つのファイルの先頭にフル パスが追加されていないのはどこですか? 私は何を間違っていますか?