Create an account

Very important

  • To access the important data of the forums, you must be active in each forum and especially in the leaks and database leaks section, send data and after sending the data and activity, data and important content will be opened and visible for you.
  • You will only see chat messages from people who are at or below your level.
  • More than 500,000 database leaks and millions of account leaks are waiting for you, so access and view with more activity.
  • Many important data are inactive and inaccessible for you, so open them with activity. (This will be done automatically)


Thread Rating:
  • 422 Vote(s) - 3.41 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Windows batch file - splitting a string to set variables

#1
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?
Reply

#2
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%
Reply

#3
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...
Reply



Forum Jump:


Users browsing this thread:
1 Guest(s)

©0Day  2016 - 2023 | All Rights Reserved.  Made with    for the community. Connected through