Windows PowerShell 命令未在批处理脚本中执行

Windows PowerShell command not executed in a batch script

我在批处理文件中编写了以下命令,以通过 powershell 命令从远程 URL 获取计算机的 public IP:

@echo off
setlocal EnableDelayedExpansion
call :MyIP2
timeout /t 50
EXIT /B 0
:MyIP2
echo Obtaining my IP...
For /f %%A in ('powershell -NonI -NoP -C "(Invoke-Webrequest http://componentsearch.everscrape.com/scraper/ip).content"') Do echo %%A
EXIT /B 0

现在,当我尝试执行批处理文件时(甚至 运行 作为管理员),我得到了以下输出,而不是我正在使用的计算机的 public IP。

Obtaining my IP...
Invoke-Webrequest
Internet
At
+
+
+
+
d

我目前 运行正在 Windows 家中安装所有更新。非常感谢任何帮助。

这样试试:

For /f  "tokens=* delims=" %%A in ('powershell -NonI -NoP -C "(Invoke-Webrequest """http://componentsearch.everscrape.com/scraper/ip""").content"') Do echo %%A

echo Obtaining my IP...
for /f  "tokens=* delims=" %%A in (
    'powershell -NonI -NoP -C "(Invoke-Webrequest """http://componentsearch.everscrape.com/scraper/ip""").content"'
) do (
    set "my_ip=%%A"
) 

echo %my_ip%

URL 需要用双引号引起来,但为了在批处理调用时转义它们,您需要使用三重双引号。

这个问题似乎出现在全新安装的 windows 上。要修复,请启动 Internet Explorer 和 select 推荐设置。

发布一个答案以确保对此有清晰的认识。

  1. 您在问题中指定除了这台设备外,所有其他设备都可以使用您当前的脚本。
  2. 您在尝试 Npocmaka 提供的颂歌后发布了一个错误,其中指出:
 Invoke-Webrequest : The response content cannot be parsed because the Internet Explorer engine is not available, or Internet Explorer's first-launch configuration is not complete. Specify the UseBasicParsing parameter and try again. At line:1 char:2 + (Invoke-Webrequest "http://componentsearch.everscrape.com/scraper/ip" ... +

这个错误有一个明确的信息,实际上是两个。它向您展示了对 IE 作为 windows 解析器的依赖性,更重要的是,它向您展示了这一行中的修复:

Specify the UseBasicParsing parameter and try again

只需添加 -UseBasicParsing 参数即可直接解决问题,而无需最初 运行 IE。

这个documentation

也有明确规定