
Tengo un archivo sfsview_monitor1.txt
con el siguiente contenido:
Total pages: 16320
Pages used: 142
Pages free: 16178
Quiero el resultado como este:
16320 142 16178
con el siguiente codigo no consigo hacerlo:
@echo on
SETLOCAL EnableDelayedExpansion
SET myvar=
for /f "tokens=1-3" %%P in ('type c:\shafique\sfsview_monitor1.txt ^| FINDSTR /B /I "Total Pages"') do (
SET myvar=%myvar% %%R
)
echo %myvar%
¿Alguien me puede apuntar en la dirección correcta?
Respuesta1
En mi opinión, esto no necesariamente tiene que ser tan complicado como lo sugiere la otra respuesta.
Si esas son las únicas líneas en el archivo de texto, entonces puede usar lo siguiente:
@echo off
set var=
setlocal enabledelayedexpansion
for /f "tokens=2 delims=:" %%a in (sfsview_monitor1.txt) do set var=!var!%%a
set var=!var:~1!
echo !var!
endlocal
Si las líneas están presentes en ubicaciones aleatorias en el archivo de texto, puede utilizar lo siguiente:
@echo off
set var=
setlocal enabledelayedexpansion
for /f "tokens=2 delims=:" %%a in ('findstr /c:"Total pages" /c:"Pages used" /c:"Pages free" sfsview_monitor1.txt') do set var=!var!%%a
set var=!var:~1!
echo !var!
endlocal
En realidad, ni siquiera necesitas la primera versión, ya que la segunda es más genérica.
Si ni siquiera le importa almacenar los valores en una variable y simplemente está interesado en el resultado, las siguientes líneas funcionarán igual de bien:
@for /f "tokens=2 delims=:" %%a in (sfsview_monitor1.txt) do @echo | set /p var=%%a
y
@for /f "tokens=2 delims=:" %%a in ('findstr /c:"Total pages" /c:"Pages used" /c:"Pages free" sfsview_monitor1.txt') do @echo | set /p var=%%a
Importante:¡En ambas versiones de una línea hay un espacio al final de la línea que se requiere! Además, como se indicó anteriormente, puedes simplemente ignorar la primera versión y usar la segunda, ya que esta última es la más genérica de las dos.
Respuesta2
El valor %myvar%
dentro del for
bucle siempre será el valor que tenía antes de que comenzara el bucle. Si desea utilizar la variable modificada, utilice !myvar!
en su lugar.
@echo on
SETLOCAL EnableDelayedExpansion
SET myvar=
for /f "tokens=1-3" %%P in ('type c:\shafique\sfsview_monitor1.txt ^| FINDSTR /B /I "Total Pages"') do (
SET myvar=!myvar! %%R
)
echo %myvar:~1%
Esto generará
16320 142 16178
La %myvar:~1%
parte allí simplemente elimina el espacio que su bucle for coloca al principio del primer número.
Respuesta3
Prueba esto:
@echo off &setlocal
set "tf=%temp%%random%"
set "pt=Total pages"
set "pu=Pages used"
set "pf=Pages free"
(echo(%pt%&echo(%pu%&echo(%pf%)>"%tf%"
for /f "tokens=1,2delims=:" %%i in ('^<"sfsview_monitor1.txt" findstr /g:"%tf%"') do (
if "%%i"=="%pt%" for /f %%a in ("%%j") do set "npt=%%a"
if "%%i"=="%pu%" for /f %%a in ("%%j") do set "npu=%%a"
if "%%i"=="%pf%" for /f %%a in ("%%j") do set "npf=%%a"
)
del "%tf%"
SET "myvar=%npt% %npu% %npf%"
echo(%myvar%