2015-06-26 107 views
0

我在写一个复制昨天日志并将它们压缩的PowerShell脚本。我的问题是,我有我需要复制的不同文件夹的大量列表。我想要做一些类似GCI "L:\sites"的文件,并将每个文件夹放入一个变量中,因此,我可以使用诸如$Path之类的变量来代替硬路径。 "L:\sites\$path\log"并将它们分别复制到各自的L:\logTemp\$Path中。然后让压缩部分分别压缩这些文件夹中的每一个。PowerShell中的变量

电流以下脚本:

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

你的问题是什么? – n0rd

+2

“我想做一些像'GCI”L:\ sites“'并把每个文件夹和管道变成一个变量” - 什么阻止你? – n0rd

回答

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循环,并更换一些变量名的路径。如果你运行这个,它应该在每个从Get-ChildItem返回的目录名的foreach循环中执行所有的操作。