找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 27379|回复: 6

[其他] bat和powershell混合编程

[复制链接]
发表于 2015-3-27 13:18:40 | 显示全部楼层 |阅读模式
本帖最后由 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技术 +1 收起 理由
CrLf + 1 感谢分享

查看全部评分

发表于 2015-3-27 15:54:51 | 显示全部楼层
我还以为是无视后缀名直接执行,激动了一下...
也是不错的尝试,不过这有个遗憾,函数必须写在最前面
 楼主| 发表于 2015-3-28 10:09:07 | 显示全部楼层
本帖最后由 yiwuyun 于 2015-3-28 10:10 编辑

如果到ps下,肯定要改成ps1才行噻,但在命令行下,改成.bat就没有这个限制了,就可直接执行。同时第一段代码也可用于执行bat和js的混编。if (true){}// == (true){}// goto ___yiwuyun.另外,我好像只看到过先写函数,再调用的例子,还没见过函数写在后面的ps1啊。
发表于 2015-3-28 10:55:15 | 显示全部楼层
回复 3# yiwuyun


    保存为 ps1 可以写到后面:
  1. testFunc

  2. function testFunc()
  3. {
  4.         echo 123123
  5. }
复制代码
ps 和 bat 都要求固定的后缀名,这俩臭脾气
 楼主| 发表于 2015-3-28 12:45:35 | 显示全部楼层
回复 4# CrLf
晕。我的电脑上win8下不能通过啊。只能把函数写在前面才能通过。是哪里设置不对吗?必须这样
  1. function testFunc()
  2. {
  3.         echo 123123
  4. }
  5. testFunc
复制代码
发表于 2015-3-28 12:47:57 | 显示全部楼层
回复 5# yiwuyun


    是右键中点击“使用 PowerShell 运行”的吗?
发表于 2015-3-28 12:51:38 | 显示全部楼层
哦,我晕,我是在调试器里运行的
试着用 powershell -file test.ps1 来运行就报错了
看来调试器的执行方式和直接执行时略有差别啊...
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 04:13 , Processed in 0.018488 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表