Batch scripting, question on variable manipulation

S

Soma C

Hello,

I have a batch file:

@echo off

setlocal

for /f "usebackq tokens=*" %%p in (`dmpinfo -x ^| find ",
primary flag"`) do (
echo %%p
rem echo %%p:~0,-1%%
)


The output is:

Path State: Good (0x1), primary flag: 1
Path State: Reserved (0x5), primary flag: 0
Path State: Reserved (0x5), primary flag: 0
Path State: Good (0x1), primary flag: 1
Path State: Good (0x1), primary flag: 1
Path State: Reserved (0x5), primary flag: 0
Path State: Reserved (0x5), primary flag: 0
Path State: Good (0x1), primary flag: 1
Path State: Good (0x1), primary flag: 1
Path State: Reserved (0x5), primary flag: 0
Path State: Reserved (0x5), primary flag: 0
Path State: Good (0x1), primary flag: 1
Path State: Reserved (0x5), primary flag: 0
Path State: Good (0x1), primary flag: 1
Path State: Good (0x1), primary flag: 1
Path State: Reserved (0x5), primary flag: 0
Path State: Reserved (0x5), primary flag: 0
Path State: Good (0x1), primary flag: 1
Path State: Good (0x1), primary flag: 1
Path State: Reserved (0x5), primary flag: 0
Path State: Reserved (0x5), primary flag: 0
Path State: Good (0x1), primary flag: 1
Path State: Good (0x1), primary flag: 1
Path State: Reserved (0x5), primary flag: 0

I would like to extract the last character in each
outputted line and save that in a string. I have tried
many different ways but it seems that the %% problem in
batch files is limiting me. You can see the REM'ed out
line above where I already tried to get the last char.
 
G

guard

Hello,

I have a batch file:

@echo off

setlocal

for /f "usebackq tokens=*" %%p in (`dmpinfo -x ^| find ",
primary flag"`) do (
echo %%p
rem echo %%p:~0,-1%%
)


The output is:

Path State: Good (0x1), primary flag: 1
Path State: Reserved (0x5), primary flag: 0
Path State: Reserved (0x5), primary flag: 0
Path State: Good (0x1), primary flag: 1
Path State: Good (0x1), primary flag: 1
Path State: Reserved (0x5), primary flag: 0
Path State: Reserved (0x5), primary flag: 0
Path State: Good (0x1), primary flag: 1
Path State: Good (0x1), primary flag: 1
Path State: Reserved (0x5), primary flag: 0
Path State: Reserved (0x5), primary flag: 0
Path State: Good (0x1), primary flag: 1
Path State: Reserved (0x5), primary flag: 0
Path State: Good (0x1), primary flag: 1
Path State: Good (0x1), primary flag: 1
Path State: Reserved (0x5), primary flag: 0
Path State: Reserved (0x5), primary flag: 0
Path State: Good (0x1), primary flag: 1
Path State: Good (0x1), primary flag: 1
Path State: Reserved (0x5), primary flag: 0
Path State: Reserved (0x5), primary flag: 0
Path State: Good (0x1), primary flag: 1
Path State: Good (0x1), primary flag: 1
Path State: Reserved (0x5), primary flag: 0

I would like to extract the last character in each
outputted line and save that in a string. I have tried
many different ways but it seems that the %% problem in
batch files is limiting me. You can see the REM'ed out
line above where I already tried to get the last char.

Your problem is that you cannot extract a substring from a "FOR" variable
(%%p). You have to place the output line in a normal environment variable
first.

The next problem is...

If you place the output into %line%, you'll have to use delayed variable
expansion of %line% will get evaluated ONCE, at the beginning of your FOR
statement, instead of being updated each time through the loop.

*******

Try replacing

echo %%p:~0,-1%%

with

SET "line=%%p"
CALL ECHO:^%%line:`0,-1^%%

*******

For additional info, see:

(http://TheSystemGuard.com/TheGuardBook/CCS-Int/ECHO.htm)
(http://TheSystemGuard.com/TheGuardBook/CCS-Int/FOR.htm)
(http://TheSystemGuard.com/TheGuardBook/CCS-Int/SET.htm)

(http://TheSystemGuard.com/MtCmds/CrystalClear/ForExpand.htm)

*******

-tsg

/-----------------+---------------+----------------------\
| COMPATIBILITY | CLARITY | SPEED |
| Write code ONCE | Make it clear | THEN...Make it fast! |
\-----------------+---------------+----------------------/
400+ command-line resources using ONLY native NT commands!
(http://TheSystemGuard.com/default.asp#MasterCommandList)
 
P

Phil Robyn [MVP]

Soma said:
Hello,

I have a batch file:

@echo off

setlocal

for /f "usebackq tokens=*" %%p in (`dmpinfo -x ^| find ",
primary flag"`) do (
echo %%p
rem echo %%p:~0,-1%%
)


The output is:

Path State: Good (0x1), primary flag: 1
Path State: Reserved (0x5), primary flag: 0
Path State: Reserved (0x5), primary flag: 0
Path State: Good (0x1), primary flag: 1
Path State: Good (0x1), primary flag: 1
Path State: Reserved (0x5), primary flag: 0
Path State: Reserved (0x5), primary flag: 0
Path State: Good (0x1), primary flag: 1
Path State: Good (0x1), primary flag: 1
Path State: Reserved (0x5), primary flag: 0
Path State: Reserved (0x5), primary flag: 0
Path State: Good (0x1), primary flag: 1
Path State: Reserved (0x5), primary flag: 0
Path State: Good (0x1), primary flag: 1
Path State: Good (0x1), primary flag: 1
Path State: Reserved (0x5), primary flag: 0
Path State: Reserved (0x5), primary flag: 0
Path State: Good (0x1), primary flag: 1
Path State: Good (0x1), primary flag: 1
Path State: Reserved (0x5), primary flag: 0
Path State: Reserved (0x5), primary flag: 0
Path State: Good (0x1), primary flag: 1
Path State: Good (0x1), primary flag: 1
Path State: Reserved (0x5), primary flag: 0

I would like to extract the last character in each
outputted line and save that in a string. I have tried
many different ways but it seems that the %% problem in
batch files is limiting me. You can see the REM'ed out
line above where I already tried to get the last char.

Here's one way:
- - - - - - - - - - begin screen capture Win2000 - - - - - - - - - -
C:\cmd>type %temp%\dmpinfo.txt
Path State: Good (0x1), primary flag: 1
Path State: Reserved (0x5), primary flag: 0
Path State: Reserved (0x5), primary flag: 0
Path State: Good (0x1), primary flag: 1
Path State: Good (0x1), primary flag: 1
Path State: Reserved (0x5), primary flag: 0
Path State: Reserved (0x5), primary flag: 0
Path State: Good (0x1), primary flag: 1
Path State: Good (0x1), primary flag: 1
Path State: Reserved (0x5), primary flag: 0
Path State: Reserved (0x5), primary flag: 0
Path State: Good (0x1), primary flag: 1
Path State: Reserved (0x5), primary flag: 0
Path State: Good (0x1), primary flag: 1
Path State: Good (0x1), primary flag: 1
Path State: Reserved (0x5), primary flag: 0
Path State: Reserved (0x5), primary flag: 0
Path State: Good (0x1), primary flag: 1
Path State: Good (0x1), primary flag: 1
Path State: Reserved (0x5), primary flag: 0
Path State: Reserved (0x5), primary flag: 0
Path State: Good (0x1), primary flag: 1
Path State: Good (0x1), primary flag: 1
Path State: Reserved (0x5), primary flag: 0

C:\cmd>demo\dmpinfo
line is [1 0 0 1 1 0 0 1 1 0 0 1 0 1 1 0 0 1 1 0 0 1 1 0]

C:\cmd>rlist demo\dmpinfo.cmd
=====begin C:\cmd\demo\dmpinfo.cmd ====================
1. @echo off
2. setlocal enabledelayedexpansion
3. set line=
4. for /f "tokens=7" %%p in (c:\temp\dmpinfo.txt) do (
5. set line=!line! %%p
6. )
7. set line=%line:~1%
8. echo line is [%line%]
=====end C:\cmd\demo\dmpinfo.cmd ====================
- - - - - - - - - - end screen capture Win2000 - - - - - - - - - -
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top