批处理脚本调用PowerShell命令时引号使用错误导致仅输出‘powershell’的问题求助
批处理脚本只输出
powershell的问题解决办法 嗨,我来帮你搞定这个批处理的问题!你的脚本只输出powershell,核心有两个原因:
问题根源
- 你的
for /f命令默认会把空格、制表符当成分隔符,只提取第一个分隔前的内容——所以它把powershell当成了第一个片段,直接赋值给了%%a,自然输出只有这个词。 - 另外,你用双引号
("命令")包裹PowerShell命令的方式不对,for /f需要用单引号('命令')来识别这是要执行的命令,双引号在这里只是把整个字符串当成普通文本,根本没触发PowerShell执行。
正确解决方案
方法一:直接修正for /f写法
把for /f的执行逻辑和分隔符设置改对,就能直接获取PowerShell的计算结果:
@echo off for /f "delims=" %%a in ('powershell -c "[math]::Round((Get-ChildItem 'C:\Program Files (x86)\Steam\' -Recurse | Measure-Object -Property Length -Sum -ErrorAction Stop).Sum / 1MB)"') do set "test=%%~a" echo %test%
这里的关键改动:
- 用
'powershell ...'替代原来的双引号,告诉for /f这是要执行的命令 - 添加
"delims="禁用默认分隔符,确保把PowerShell输出的完整数值赋值给变量
方法二:用临时文件中转(更直观)
如果觉得命令嵌套容易晕,可以先让PowerShell把结果写到临时文件,再读取到变量里:
@echo off powershell -c "[math]::Round((Get-ChildItem 'C:\Program Files (x86)\Steam\' -Recurse | Measure-Object -Property Length -Sum -ErrorAction Stop).Sum / 1MB)" > temp.txt set /p test=<temp.txt echo %test% del temp.txt
内容的提问来源于stack exchange,提问作者Datasmuggler
相关产品推荐
相关产品推荐

