如何在CMD中通过PowerShell执行含参数的变量命令?
解决CMD调用PowerShell执行带参数命令变量的问题
问题原因
当你把dir /a这类带参数的命令整段赋值给变量,用&($test)执行时,PowerShell会把整个字符串当作单一命令名称去查找,系统显然不存在名为dir /a的命令,所以报错。
可行解决方法
方法1:用数组存储命令与参数(推荐,安全无注入风险)
在CMD中直接执行:
powershell -c "$test = @('dir', '/a'); & $test"
原理:PowerShell的数组可以分别存储命令和参数,&调用数组时会自动识别第一个元素为命令,后续为参数。
方法2:使用Invoke-Expression(需注意引号转义)
如果坚持用字符串形式,要处理CMD的引号嵌套问题,比如:
powershell -c '$test = "dir /a"; Invoke-Expression $test'
或者:
powershell -c "$test = ""dir /a""; Invoke-Expression $test"
原理:Invoke-Expression会直接解析执行字符串里的命令逻辑,但这种方式存在命令注入风险,非必要不推荐。
方法3:通过Start-Process调用(适合需单独窗口或更多控制的场景)
如果需要控制执行窗口等额外设置,可使用:
powershell -c "$test = @('dir', '/a'); Start-Process -NoNewWindow -FilePath $test[0] -ArgumentList $test[1..$test.Length]"
参数-NoNewWindow确保在当前CMD窗口输出结果,避免弹出新PowerShell窗口。
内容的提问来源于stack exchange,提问作者user18623114
相关产品推荐
相关产品推荐

