什么是最短的代码下载并执行文件inpowershell?
答案 0 :(得分:0)
旧的格言是避免优化,除非有需要。程序应该同情可读性。如果代码难以理解,任何错误都很容易被复杂性所掩盖。正如一位老主人所说:
真正的问题是程序员花了太多时间在错误的地方和错误的时间担心效率;过早优化是编程中所有邪恶(或至少大部分)的根源。
-Donald Knuth
话虽如此,您的示例可以通过使其更易于可读和可维护进行优化。表现不会改变;到目前为止最慢的部分是获取远程文件。
考虑一下,说
$arr= @() #Empty array
$arr += new-object psobject -property @{"Src"="z:\monthlypayments.txt"; "Dst" = "monthend.txt"} # Add custom object for monthly into the array
$arr += new-object psobject -property @{"Src"="z:\weekly.txt"; "Dst" = "weekend.txt"} # Same for weekly
$arr # Print the array for illustration purposes
Src Dst
--- ---
z:\monthlypayments.txt monthend.txt
z:\weekly.txt weekend.txt
# Now that we have seen the data, let's use it
$wc = New-Object net.webclient
$arr | % { # Iterate through the array
$wc.DownloadFile($_.Src, $_.Dst) # Download items
}
所以做的是源数据项和目标数据项在数据结构中绑定在一起。源和目标不再是一堆字符串,而是对象的属性。对象存储在数组中。为了处理所有对象,可以使用Foreach-Object
(又名%
)迭代数组,它将逐个读取数组元素并将它们发送到管道。 $_
表示管道上的当前对象 - foreach语句从数组中选取的元素。
通过使用这种方法,WebClient的DownloadFile不需要担心硬编码路径。它将从管道对象的属性.Src
和.Dst
中读取它们。
现在,这显然是一种下载两个文件的方法。但是,如果你有二十个加工怎么办?然后,在脚本的开头维护源 - 目标对将更加容易,其中所有源和目标元组都添加到数组中。