标题: [其他] bat和powershell混合编程 [打印本页]
作者: yiwuyun 时间: 2015-3-27 13:18 标题: bat和powershell混合编程
本帖最后由 yiwuyun 于 2015-3-27 14:51 编辑
- if ($true){}# == ($true){}# goto ___yiwuyun
- <#
- :___yiwuyun
- @echo off
- setlocal
- cls
-
- rem 查找要滑过的行数,行数加2
- rem for /f "tokens=1 delims=:" %%a in ('findstr /N "^::__yiwuyunSigned" "%~f0"') do set /a lineCount=%%a+2
-
- rem 设置执行策略
- powershell -command "&{set-executionPolicy remoteSigned}"
-
- rem 执行powershell脚本
- rem type "%~f0"|more +%lineCount%|powershell -command "-"
- type "%~f0"|powershell -command "-"
-
- rem 恢复执行策略
- powershell -command "&{set-executionPolicy restricted}"
- pause
- exit/b 0
-
- rem 签名表示要滑过的行数
- ::__yiwuyunSigned
- #>
-
- <#PowerShell脚本文件体#>
-
- Function DeleteFileByFileName{
- Param([string]$FileName)
- if(Test-Path $FileName -PathType leaf){Remove-Item $FileName}
- }
-
-
- $strPath=(Resolve-Path ".\").Path;
- DeleteFileByFileName -FileName ($strPath+"\test.xlsx");
-
- $objExcel=New-Object -ComObject "Excel.Application"
- $objExcel.WorkBooks.Add().SaveAs($strPath+"\test.xlsx");
- $objExcel.DisplayAlerts=$false;
- $objExcel.visible=$true;
- $objExcel.SheetsInNewWorkBook=2;
-
- $strArray=New-Object -TypeName System.Collections.ArrayList;
- $strArray.Add("姓名")|Out-Null;
- $strArray.Add("数学")|Out-Null;
- $strArray.Add("外语")|Out-Null;
- $strArray.Add("历史")|Out-Null;
- $strArray.Add("化学")|Out-Null;
- $strArray.Add("生物")|Out-Null;
- for($col=1;$col -lt 7;$col++){
- $objExcel.ActiveSheet.Cells.Item(1,$col)=$strArray[$col-1];
- }
-
- for($row=2;$row -lt 11;$row++){
- $objExcel.ActiveSheet.Cells.Item($row,1)="A$row";
- }
-
- $objExcel.Range("B2:F10").Formula="=40+Int(Rand()*61)";
- $objExcel.Range("A1:F10").Style.HorizontalAlignment=-4108;
-
- $objShape=$objExcel.ActiveSheet.Shapes.AddChart(51);
- $objShape.Chart.SetSourceData($objExcel.Range("A1:F10"),2);
-
- $objExcel.ActiveWorkBook.Save();
- ##$objExcel.Quit();
复制代码
作者: CrLf 时间: 2015-3-27 15:54
我还以为是无视后缀名直接执行,激动了一下...
也是不错的尝试,不过这有个遗憾,函数必须写在最前面
作者: yiwuyun 时间: 2015-3-28 10:09
本帖最后由 yiwuyun 于 2015-3-28 10:10 编辑
如果到ps下,肯定要改成ps1才行噻,但在命令行下,改成.bat就没有这个限制了,就可直接执行。同时第一段代码也可用于执行bat和js的混编。if (true){}// == (true){}// goto ___yiwuyun.另外,我好像只看到过先写函数,再调用的例子,还没见过函数写在后面的ps1啊。
作者: CrLf 时间: 2015-3-28 10:55
回复 3# yiwuyun
保存为 ps1 可以写到后面:- testFunc
-
- function testFunc()
- {
- echo 123123
- }
复制代码
ps 和 bat 都要求固定的后缀名,这俩臭脾气
作者: yiwuyun 时间: 2015-3-28 12:45
回复 4# CrLf
晕。我的电脑上win8下不能通过啊。只能把函数写在前面才能通过。是哪里设置不对吗?必须这样- function testFunc()
- {
- echo 123123
- }
- testFunc
复制代码
作者: CrLf 时间: 2015-3-28 12:47
回复 5# yiwuyun
是右键中点击“使用 PowerShell 运行”的吗?
作者: CrLf 时间: 2015-3-28 12:51
哦,我晕,我是在调试器里运行的
试着用 powershell -file test.ps1 来运行就报错了
看来调试器的执行方式和直接执行时略有差别啊...
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |