PowerShell弹窗命令可正常执行,转为批处理文件后报错
问题原因与解决办法
为什么批处理里运行会报错?
你写的是PowerShell专属语法,但批处理文件(.bat/.cmd)默认是交给CMD(命令提示符)解析执行的。CMD完全不认识PowerShell的变量写法$shell,也看不懂New-Object这类PowerShell cmdlet,所以才会提示“'$shell' 不是内部或外部命令”。
两种可行的解决办法
办法1:存为PowerShell脚本,用批处理调用
- 把你的代码保存成后缀为
.ps1的文件,比如命名为popup.ps1,内容就是你原来的代码:
$shell = (New-Object -ComObject WScript.Shell) $shell.Popup("Test",0,"Data Backup Info")
- 新建一个批处理文件,里面写入调用命令:
powershell -ExecutionPolicy Bypass -File "popup.ps1"
-ExecutionPolicy Bypass是临时绕过PowerShell的脚本执行限制,避免默认策略阻止脚本运行。
办法2:直接在批处理里嵌入PowerShell命令
不用单独存ps1文件,把PowerShell命令作为参数传给powershell.exe执行,批处理里写:
powershell -Command "$shell = New-Object -ComObject WScript.Shell; $shell.Popup('Test',0,'Data Backup Info')"
注意把原来的双引号改成单引号,避免和批处理的引号冲突;或者给双引号加转义符^",也能正常运行:
powershell -Command "$shell = New-Object -ComObject WScript.Shell; $shell.Popup(`"Test`",0,`"Data Backup Info`")"
额外选项:用CMD原生命令弹窗
如果不需要自定义标题,也可以直接用CMD自带的msg命令,写法更简单:
msg * /w "Test"
/w参数表示等待用户点击确定再退出。
内容的提问来源于stack exchange,提问作者iloveJesus91
相关产品推荐
相关产品推荐

