标题: [问题求助] 在bat文件中有选择的执行某段PowerShell代码遇到的问题 [打印本页]
作者: 5i365 时间: 2022-4-2 22:14 标题: 在bat文件中有选择的执行某段PowerShell代码遇到的问题
在国外so找到了一段下面的代码, 可以实现在一个bat文件中有选择的执行某段PS代码
例如下面的例子中,修改 iex($f[2]) 中的数字, 例如,修改为1 执行第一段PS代码【可以让cmd窗口居中】, 修改2 执行第二段PS代码【打开计算器】, 其中 :tag4file: 是分隔符
但是执行下面的第一段代码, 直接报错, 而单独执行又不报错, 求高手指引, 提前感谢!- @set "0=%~f0" &powershell -nop -c $f=[IO.File]::ReadAllText($env:0)-split':tag4file\:.*';iex($f[2]); &pause&exit
- :tag4file:
- Add-Type -Ty @'
- using System.Runtime.InteropServices;
- public static class WinApi{
- [DllImport("user32.dll")] public static extern bool SetWindowPos(uint hWnd,uint hAfter,uint x,uint y,uint cx,uint cy,uint flags);
- [DllImport("kernel32.dll")] public static extern uint GetConsoleWindow();
- }
- '@
- $w = [Windows.Forms.Screen]::PrimaryScreen.WorkingArea.Width
- [void][WinApi]::SetWindowPos(([WinApi]::GetConsoleWindow()), $null, ($w-996)/2, 0, 996, 186, 0)
-
- :tag4file:
- start calc
复制代码
----------------------------------------------------------------------------------------------------------------
下面单独执行PS代码1没有问题- #@&cls&mode con cols=106 lines=8&powershell "gc '%~0'|out-string|iex"&pause&exit
-
- Add-Type @'
- using System.Runtime.InteropServices;
- public static class WinApi{
- [DllImport("user32.dll")] public static extern bool SetWindowPos(uint hWnd,uint hAfter,uint x,uint y,uint cx,uint cy,uint flags);
- [DllImport("kernel32.dll")] public static extern uint GetConsoleWindow();
- }
- '@
- $w = [Windows.Forms.Screen]::PrimaryScreen.WorkingArea.Width
- [void][WinApi]::SetWindowPos(([WinApi]::GetConsoleWindow()), $null, ($w-996)/2, 0, 996, 186, 0)
复制代码
作者: went 时间: 2022-4-2 22:34
下面这行代码在Add-Type之前插入- [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 |