基于CMD 编写批处理程序很反人类,此篇文章介绍利用Power Shell脚本(借鉴明经net版主雪山飞狐的脚本改造而成)处理之前的Bat+scr的过程()
Windows PowerShell 是一种命令行和脚本环境,使命令行用户和者可以利用 的强大功能。与com对象无缝对接,可随时条用
1# 条用com对象
COM就像没落的贵族一样,虽然过气,但那个范儿还在。作为遗产,它们还在放光发热。PowerShell没有嫌弃它,而是选择与他们兼容。这也让现在依旧战斗在Native C++的程序员颇为欣慰。PowerShell对COM的访问方式是通过其ProgID来进行。示例如下:
$ie = New-Object -ComObject Excel.Application
$ie.Visible = $true2# 条用dotnet framework对象
Add-Type
-AssemblyName
mscorlib
$str
=
New-Object
System.Text.StringBuilder
$str
.Append(
"Hello"
)
$str
.ToString()
3# 改造之前的bat+scr 合并为Powershell脚本
1 # 控制台程序路径 2 $key = Get-Item HKLM:\Software\Autodesk\Hardcopy 3 $arr = @() 4 foreach($value in $key.Property) 5 { 6 $arr += Get-Item HKLM:\Software\$value 7 } 8 9 $arr = $arr | sort10 for($i=0;$i -lt $arr.Count;$i++)11 {12 $_values = Get-ItemProperty $arr[$i].PSPath13 $s = "{0}.{1}" -f ($i+1),$_values.ProductName14 [Console]::WriteLine($s)15 }16 $n = Read-Host "请选择AutoCad版本"17 18 19 $_values = Get-ItemProperty $arr[[int]$n - 1].PSPath20 21 22 $MyConsole = $_values.Location + "\accoreconsole.exe"23 24 # 设置进程启动信息25 $psi= New-Object System.Diagnostics.ProcessStartInfo26 27 $psi.FileName = "cmd.exe"28 29 # 设置进程自动重定向输入30 $psi.UseShellExecute = $false31 $psi.CreateNoWindow=$true32 $psi.RedirectStandardInput = $true33 $process = New-Object System.Diagnostics.Process34 $process.StartInfo = $psi35 36 #获取当前ps1文件所在的文件夹37 38 $ScriptPath=Split-Path -Parent $MyInvocation.MyCommand.Definition39 40 41 $dllFileName=$ScriptPath+"\ShopDrawing.dll"42 43 $files=[System.IO.Directory]::GetFiles($ScriptPath,"*.dwg")44 45 foreach ($item in $files)46 {47 48 [System.IO.FileInfo] $fi=New-Object System.IO.FileInfo($item)49 if (!$fi.IsReadOnly){50 $process.Start()51 $process.StandardInput.WriteLine("""$MyConsole"" "+"/i"+" ""$item""") 52 $process.StandardInput.WriteLine("SECURELOAD")53 $process.StandardInput.WriteLine("0")54 $process.StandardInput.WriteLine("netload")55 $process.StandardInput.WriteLine("""$dllFileName""")56 $process.StandardInput.WriteLine("FILEDIA")57 $process.StandardInput.WriteLine("1")58 $process.StandardInput.WriteLine("mySSsetTest")59 $process.StandardInput.WriteLine("Qsave")60 $process.StandardInput.WriteLine("QUIT")61 $process.StandardInput.WriteLine("EXIT")62 #$process.Kill()63 #$process.Close()64 Write-Host ""“$item""批处理执行完成!" 65 }66 else67 {68 Write-Host ""“$item""被占用或者处于只读状态,批处理执行失败!" 69 continue70 }71 72 }
PowerShell脚本下载地址:见第一条评论