我正在编写一个PowerShell脚本,可以复制昨天的日志并对其进行压缩。我的问题是我有一个我需要复制的大量不同文件夹列表。我想做GCI "L:\sites"
之类的事情并将每个文件夹和管道传递给变量,因此我可以使用$Path
之类的变量而不是硬路径。 "L:\sites\$path\log"
并将它们分别复制到自己的L:\logTemp\$Path
中。然后让压缩部分分别压缩每个文件夹。
下面的当前脚本:
Robocopy "l:\sites\TNSERVICE\log" "L:\LogTemp\TNSERVICE" /s /copy:DAT /Maxage:1
set-alias sz "$env:ProgramFiles\7-Zip\7z.exe"
$Date = Get-Date
$Date = $Date.adddays(-1)
$Date2Str = $Date.ToString("yyyMMdd")
sz a -mx=9 "L:\LogTEMP\TNSERVICE $Date2Str.zip" "L:\LogTEMP\TNSERVICE\*"
remove-item L:\LogTemp\TNSERVICE -recurse
答案 0 :(得分:1)
这看起来像是foreach
的工作。
使用您上面所述的内容,看起来您需要的是:
# Get the list of directories (you could use a filter here to match a pattern)
$sites = Get-ChildItem L:\sites -Directory
# Loop through each object in $sites and perform a series of actions
foreach ($dir in $sites) {
# This is all your original code, I've just changed to use variables
Robocopy "$dir.Fullname\log" "L:\LogTemp\$dir.Name" /s /copy:DAT /Maxage:1
set-alias sz "$env:ProgramFiles\7-Zip\7z.exe"
$Date = Get-Date
$Date = $Date.adddays(-1)
$Date2Str = $Date.ToString("yyyMMdd")
sz a -mx=9 "L:\LogTEMP\$dir.Name $Date2Str.zip" "L:\LogTEMP\$dir.Name\*"
remove-item L:\LogTemp\$dir.Name -recurse
}
我在这里真正做的就是围绕你编写的内容包装一个foreach循环,并用变量名替换一些路径。如果你运行它,它应该在foreach循环中执行从Get-ChildItem返回的每个目录名称的所有内容。