[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[其他] bat和powershell混合编程

本帖最后由 yiwuyun 于 2015-3-27 14:51 编辑
  1. if ($true){}# == ($true){}# goto ___yiwuyun
  2. <#
  3. :___yiwuyun
  4. @echo off
  5. setlocal
  6. cls
  7. rem 查找要滑过的行数,行数加2
  8. rem for /f "tokens=1 delims=:" %%a in ('findstr /N "^::__yiwuyunSigned" "%~f0"') do set /a lineCount=%%a+2
  9. rem 设置执行策略
  10. powershell -command "&{set-executionPolicy remoteSigned}"
  11. rem 执行powershell脚本
  12. rem type "%~f0"|more +%lineCount%|powershell -command "-"
  13. type "%~f0"|powershell -command "-"
  14. rem 恢复执行策略
  15. powershell -command "&{set-executionPolicy restricted}"
  16. pause
  17. exit/b 0
  18. rem 签名表示要滑过的行数
  19. ::__yiwuyunSigned
  20. #>
  21. <#PowerShell脚本文件体#>
  22. Function DeleteFileByFileName{
  23. Param([string]$FileName)
  24. if(Test-Path $FileName -PathType leaf){Remove-Item $FileName}
  25. }
  26. $strPath=(Resolve-Path ".\").Path;
  27. DeleteFileByFileName -FileName ($strPath+"\test.xlsx");
  28. $objExcel=New-Object -ComObject "Excel.Application"
  29. $objExcel.WorkBooks.Add().SaveAs($strPath+"\test.xlsx");
  30. $objExcel.DisplayAlerts=$false;
  31. $objExcel.visible=$true;
  32. $objExcel.SheetsInNewWorkBook=2;
  33. $strArray=New-Object -TypeName System.Collections.ArrayList;
  34. $strArray.Add("姓名")|Out-Null;
  35. $strArray.Add("数学")|Out-Null;
  36. $strArray.Add("外语")|Out-Null;
  37. $strArray.Add("历史")|Out-Null;
  38. $strArray.Add("化学")|Out-Null;
  39. $strArray.Add("生物")|Out-Null;
  40. for($col=1;$col -lt 7;$col++){
  41.   $objExcel.ActiveSheet.Cells.Item(1,$col)=$strArray[$col-1];
  42. }
  43. for($row=2;$row -lt 11;$row++){
  44.   $objExcel.ActiveSheet.Cells.Item($row,1)="A$row";
  45. }
  46. $objExcel.Range("B2:F10").Formula="=40+Int(Rand()*61)";
  47. $objExcel.Range("A1:F10").Style.HorizontalAlignment=-4108;
  48. $objShape=$objExcel.ActiveSheet.Shapes.AddChart(51);
  49. $objShape.Chart.SetSourceData($objExcel.Range("A1:F10"),2);
  50. $objExcel.ActiveWorkBook.Save();
  51. ##$objExcel.Quit();
复制代码
1

评分人数

    • CrLf: 感谢分享技术 + 1

我还以为是无视后缀名直接执行,激动了一下...
也是不错的尝试,不过这有个遗憾,函数必须写在最前面

TOP

本帖最后由 yiwuyun 于 2015-3-28 10:10 编辑

如果到ps下,肯定要改成ps1才行噻,但在命令行下,改成.bat就没有这个限制了,就可直接执行。同时第一段代码也可用于执行bat和js的混编。if (true){}// == (true){}// goto ___yiwuyun.另外,我好像只看到过先写函数,再调用的例子,还没见过函数写在后面的ps1啊。

TOP

回复 3# yiwuyun


    保存为 ps1 可以写到后面:
  1. testFunc
  2. function testFunc()
  3. {
  4. echo 123123
  5. }
复制代码
ps 和 bat 都要求固定的后缀名,这俩臭脾气

TOP

回复 4# CrLf
晕。我的电脑上win8下不能通过啊。只能把函数写在前面才能通过。是哪里设置不对吗?必须这样
  1. function testFunc()
  2. {
  3. echo 123123
  4. }
  5. testFunc
复制代码

TOP

回复 5# yiwuyun


    是右键中点击“使用 PowerShell 运行”的吗?

TOP

哦,我晕,我是在调试器里运行的
试着用 powershell -file test.ps1 来运行就报错了
看来调试器的执行方式和直接执行时略有差别啊...

TOP

返回列表