Windows batch file - splitting a string to set variables - Printable Version +- 0Day Forums (https://zeroday.vip) +-- Forum: Coding (https://zeroday.vip/Forum-Coding) +--- Forum: .bat & .wsf & .cmd (https://zeroday.vip/Forum-bat-wsf-cmd) +--- Thread: Windows batch file - splitting a string to set variables (/Thread-Windows-batch-file-splitting-a-string-to-set-variables) |
Windows batch file - splitting a string to set variables - olusolatfsztyyqjc - 07-23-2023 I feel like I'm going around in circles with FOR loop options. I'm trying to take a string (output of a command) and split it on commas, then use each value to SET, e.g. String: `USER=Andy,IP=1.2.3.4,HOSTNAME=foobar,PORT=1234` So I want to split on comma and then literally use that variable in SET. I don't know ahead of time how many many variables there will be. I've tried things like: FOR %%L IN (%MYSTRING%) DO ECHO %%L but that splits on the equals sign too so I end up with USER Andy IP 1.2.3.4 etc I just want to be able to do the following so I can `SET USER=Andy` etc, something like: FOR %%L IN (%MYSTRING%) DO SET %%L What option or flags am I missing? RE: Windows batch file - splitting a string to set variables - presbyope650830 - 07-23-2023 In case your input is something like HOSTNAME:PORT and you need to split into separate variables then you can use this @echo off set SERVER_HOST_PORT=10.0.2.15:8080 set SERVER_HOST_PORT=%SERVER_HOST_PORT::=,% for /F "tokens=1* delims=," %%a in ("%SERVER_HOST_PORT%") do ( set SERVER_HOST=%%a set SERVER_PORT=%%b ) echo SERVER_HOST=%SERVER_HOST% echo SERVER_PORT=%SERVER_PORT% RE: Windows batch file - splitting a string to set variables - Sirpolythenes40 - 07-23-2023 The default delimiters for elements in plain `FOR` command (no `/F` option) are spaces, tab, commas, semicolons and equal signs, and there is no way to modify that, so you may use `FOR /F` command to solve this problem this way: <!-- language-all: lang-dos --> @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% Another way to solve this problem is first taking the variable name and then executing the assignment for each pair of values in a regular FOR command: setlocal EnableDelayedExpansion set MYSTRING=USER=Andy,IP=1.2.3.4,HOSTNAME=foobar,PORT=1234 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% **EDIT 2023/01/20:** _New method added_ I know this is a very old question. However, I can't resist the temptation to post a new _very interesting_ method to solve this old problem: @echo off set MYSTRING=USER=Andy,IP=1.2.3.4,HOSTNAME=foobar,PORT=1234 set "%MYSTRING:,=" & set "%" echo USER=%USER%, IP=%IP%, HOSTNAME=%HOSTNAME%, PORT=%PORT% If you want to know where the magic is, remove the `@echo off` line, execute the program and carefully review the screen... |