在 Windows 批次中迭代键值对

Iterate over Key-Value-Pairs in Windows Batch

我有一个表示设置名称及其值的键值对列表。

ssl=strict 
always_use_https=on
minify={"css":"off","html":"off","js":"off"}
key=value
many=more

我想在批处理文件中通过 curl 请求应用指定设置(键)的每个值:

curl -X PATCH "https://api.cloudflare.com/client/v4/zones/%zone%/settings/%key%" ^
    -H "X-Auth-Email: %email%" ^
    -H "X-Auth-Key: %auth%" ^
    -H "Content-Type: application/json" ^
    --data "{\"value\":\"%value%\"}" ^
    --insecure

我遇到的问题是这些 k-v 对的保存和迭代,所以我为每一对发送了一个请求。我似乎不知道如何批量创建字典。

如果您认为有比批处理更适合此类任务的不同工具,请告诉我。

可以使用以下方法保存环境变量及其值:

set "SettingsFile=%TEMP%\%~n0.txt"
setlocal EnableExtensions EnableDelayedExpansion
(
    echo ssl=!ssl!
    echo always_use_https=!always_use_https!
    echo minify=!minify!
    echo key=!key!
    echo many=!many!
) >"%SettingsFile%"
endlocal

用于SettingsFile任何你想要的,但目录树必须存在。

批处理文件中的单个命令行足以将它们从文件读回环境变量:

for /F "usebackq delims=" %%I in ("%SettingsFile%") do set "%%I"

就是这样。 Delayed expansion 不应启用从设置文件中读回环境变量名称及其值以正确读取带有一个或多个感叹号的值。

要了解使用的命令及其工作原理,请打开命令提示符 window,在其中执行以下命令,并仔细阅读为每个命令显示的所有帮助页面。

  • echo /?
  • endlocal /?
  • for /?
  • set /?
  • setlocal /?

另请阅读有关 Using command redirection operators 的 Microsoft 文章。