Windows 批处理文件 - 拆分字符串以设置变量

标签 windows for-loop batch-file delimiter

我觉得我在用 FOR 循环选项兜圈子。

我正在尝试获取一个字符串(命令的输出)并用逗号分隔它,然后使用每个值来设置,例如

字符串:USER=Andy,IP=1.2.3.4,HOSTNAME=foobar,PORT=1234

所以我想用逗号分隔,然后在 SET 中直接使用该变量。我不知道会有多少变数。

我试过这样的事情:

FOR %%L IN (%MYSTRING%) DO ECHO %%L

但是这也在等号上 split 所以我最终得到了

USER
Andy
IP
1.2.3.4

等等

我只想能够执行以下操作,这样我就可以SET USER=Andy 等等,比如:

FOR %%L IN (%MYSTRING%) DO SET %%L

我缺少什么选项或标志?

最佳答案

普通FOR命令(没有/F选项)元素的默认分隔符是空格、制表符、逗号、分号和等号,并且没有办法修改它,因此您可以使用 FOR/F 命令以这种方式解决此问题:

@echo off 

set MYSTRING=USER=Andy,IP=1.2.3.4,HOSTNAME=foobar,PORT=1234

:nextVar
   for /F "tokens=1* delims=," %%a in ("%MYSTRING%") do (
      set %%a
      set MYSTRING=%%b
   )
if defined MYSTRING goto nextVar
echo USER=%USER%, IP=%IP%, HOSTNAME=%HOSTNAME%, PORT=%PORT%

解决这个问题的另一种方法是首先获取变量名,然后在常规 FOR 命令中为每对值执行赋值:

setlocal EnableDelayedExpansion

set varName=
for %%a in (%MYSTRING%) do (
   if not defined varName (
      set varName=%%a
   ) else (
      set !varName!=%%a
      set varName=
   )
)
echo USER=%USER%, IP=%IP%, HOSTNAME=%HOSTNAME%, PORT=%PORT%

关于Windows 批处理文件 - 拆分字符串以设置变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18820913/

相关文章:

java - 如何在 Windows (7) 上更改 Java 运行时版本?

java - 从 Windows 命令行运行时如何请求 JVM 垃圾回收(不是从代码)

windows - 如何在 Windows 上创建每个用户的服务?

C程序的困惑输出

java - For 循环未正确运行

windows - 如何测试路径是 Windows 批处理文件中的文件还是目录?

c# - 带有卡在 GetContext() 上的 SSL 证书的 HttpListener

c++ - for 循环在第一次迭代后崩溃

batch-file - 如何删除*.*(不包括某些扩展名)?

Python 批量追加到特定类型的文件 - 在单个目录中