Board logo

标题: [问题求助] 在bat文件中有选择的执行某段PowerShell代码遇到的问题 [打印本页]

作者: 5i365    时间: 2022-4-2 22:14     标题: 在bat文件中有选择的执行某段PowerShell代码遇到的问题

在国外so找到了一段下面的代码, 可以实现在一个bat文件中有选择的执行某段PS代码

例如下面的例子中,修改 iex($f[2]) 中的数字, 例如,修改为1 执行第一段PS代码【可以让cmd窗口居中】, 修改2 执行第二段PS代码【打开计算器】, 其中 :tag4file: 是分隔符


但是执行下面的第一段代码, 直接报错, 而单独执行又不报错, 求高手指引, 提前感谢!
  1. @set "0=%~f0" &powershell -nop -c $f=[IO.File]::ReadAllText($env:0)-split':tag4file\:.*';iex($f[2]); &pause&exit
  2. :tag4file:
  3. Add-Type -Ty @'
  4.     using System.Runtime.InteropServices;
  5.     public static class WinApi{
  6.         [DllImport("user32.dll")] public static extern bool SetWindowPos(uint hWnd,uint hAfter,uint x,uint y,uint cx,uint cy,uint flags);
  7.         [DllImport("kernel32.dll")] public static extern uint GetConsoleWindow();
  8.     }
  9. '@
  10. $w = [Windows.Forms.Screen]::PrimaryScreen.WorkingArea.Width
  11. [void][WinApi]::SetWindowPos(([WinApi]::GetConsoleWindow()), $null, ($w-996)/2, 0, 996, 186, 0)
  12. :tag4file:
  13. start calc
复制代码
----------------------------------------------------------------------------------------------------------------
下面单独执行PS代码1没有问题
  1. #@&cls&mode con cols=106 lines=8&powershell "gc '%~0'|out-string|iex"&pause&exit
  2. Add-Type @'
  3.     using System.Runtime.InteropServices;
  4.     public static class WinApi{
  5.         [DllImport("user32.dll")] public static extern bool SetWindowPos(uint hWnd,uint hAfter,uint x,uint y,uint cx,uint cy,uint flags);
  6.         [DllImport("kernel32.dll")] public static extern uint GetConsoleWindow();
  7.     }
  8. '@
  9. $w = [Windows.Forms.Screen]::PrimaryScreen.WorkingArea.Width
  10. [void][WinApi]::SetWindowPos(([WinApi]::GetConsoleWindow()), $null, ($w-996)/2, 0, 996, 186, 0)
复制代码

作者: went    时间: 2022-4-2 22:34

下面这行代码在Add-Type之前插入
  1. [void][System.Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms')
复制代码

作者: 5i365    时间: 2022-4-2 22:49

回复 2# went


   感谢大侠指引, 我用了下面的, 简洁点
Add-Type -AssemblyName System.Windows.Forms




欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2